{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/brand/**",
              "components/core/**",
              "components/forms/**",
              "components/marketing/**",
              "ui_kits/website/**"
            ],
            "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*(?!['\\\"]?(?:Cinzel|Hanken Grotesk|IBM Plex Mono))/i]",
        "message": "Font not provided by the design system. Available: Cinzel, Hanken Grotesk, IBM Plex Mono."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|tone|icon|uppercase|style|key|ref|className|style|children)$/]",
        "message": "<Badge> doesn't accept that prop. Declared props: children, tone, icon, uppercase, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Badge'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:brass|ink|neutral|success|warning|danger)$/]",
        "message": "<Badge> tone must be one of 'brass' | 'ink' | 'neutral' | 'success' | 'warning' | 'danger'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|size|iconLeft|iconRight|fullWidth|disabled|as|href|onClick|style|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: children, variant, size, iconLeft, iconRight, fullWidth, disabled, as, href, onClick, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|dark|secondary|ghost|outline-light)$/]",
        "message": "<Button> variant must be one of 'primary' | 'dark' | 'secondary' | 'ghost' | 'outline-light'."
      },
      {
        "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='as'] > Literal[value!=/^(?:button|a)$/]",
        "message": "<Button> as must be one of 'button' | 'a'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|elevation|padding|tone|interactive|borderAccent|style|key|ref|className|style|children)$/]",
        "message": "<Card> doesn't accept that prop. Declared props: children, elevation, padding, tone, interactive, borderAccent, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Card'] > JSXAttribute[name.name='elevation'] > Literal[value!=/^(?:none|xs|sm|md|lg)$/]",
        "message": "<Card> elevation must be one of 'none' | 'xs' | 'sm' | 'md' | 'lg'."
      },
      {
        "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='tone'] > Literal[value!=/^(?:raised|sunken|ink|brass)$/]",
        "message": "<Card> tone must be one of 'raised' | 'sunken' | 'ink' | 'brass'."
      },
      {
        "selector": "JSXOpeningElement[name.name='ContactMethod'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|label|value|href|theme|style|key|ref|className|style|children)$/]",
        "message": "<ContactMethod> doesn't accept that prop. Declared props: icon, label, value, href, theme, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='ContactMethod'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<ContactMethod> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Divider'] > JSXAttribute > JSXIdentifier[name!=/^(?:ornament|tone|width|style|key|ref|className|style|children)$/]",
        "message": "<Divider> doesn't accept that prop. Declared props: ornament, tone, width, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Divider'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:default|strong|ink|brass)$/]",
        "message": "<Divider> tone must be one of 'default' | 'strong' | 'ink' | 'brass'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|theme|rule|align|style|key|ref|className|style|children)$/]",
        "message": "<Eyebrow> doesn't accept that prop. Declared props: children, theme, rule, align, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<Eyebrow> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute[name.name='align'] > Literal[value!=/^(?:left|center)$/]",
        "message": "<Eyebrow> align must be one of 'left' | 'center'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Icon'] > JSXAttribute > JSXIdentifier[name!=/^(?:name|size|strokeWidth|color|key|ref|className|style|children)$/]",
        "message": "<Icon> doesn't accept that prop. Declared props: name, size, strokeWidth, color."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|id|type|placeholder|value|onChange|required|hint|error|theme|style|key|ref|className|style|children)$/]",
        "message": "<Input> doesn't accept that prop. Declared props: label, id, type, placeholder, value, onChange, required, hint, error, theme, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Input'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<Input> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Logo'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|theme|assetBase|height|shieldSrc|style|key|ref|className|style|children)$/]",
        "message": "<Logo> doesn't accept that prop. Declared props: variant, theme, assetBase, height, shieldSrc, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Logo'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:lockup|shield|wordmark)$/]",
        "message": "<Logo> variant must be one of 'lockup' | 'shield' | 'wordmark'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Logo'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<Logo> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='SectionHeading'] > JSXAttribute > JSXIdentifier[name!=/^(?:eyebrow|title|intro|align|theme|size|style|key|ref|className|style|children)$/]",
        "message": "<SectionHeading> doesn't accept that prop. Declared props: eyebrow, title, intro, align, theme, size, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='SectionHeading'] > JSXAttribute[name.name='align'] > Literal[value!=/^(?:left|center)$/]",
        "message": "<SectionHeading> align must be one of 'left' | 'center'."
      },
      {
        "selector": "JSXOpeningElement[name.name='SectionHeading'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<SectionHeading> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='SectionHeading'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:md|lg|xl)$/]",
        "message": "<SectionHeading> size must be one of 'md' | 'lg' | 'xl'."
      },
      {
        "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='ServiceCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:image|imageAlt|icon|title|children|linkLabel|href|style|key|ref|className|style|children)$/]",
        "message": "<ServiceCard> doesn't accept that prop. Declared props: image, imageAlt, icon, title, children, linkLabel, href, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='StatBlock'] > JSXAttribute > JSXIdentifier[name!=/^(?:value|label|sublabel|theme|accent|align|style|key|ref|className|style|children)$/]",
        "message": "<StatBlock> doesn't accept that prop. Declared props: value, label, sublabel, theme, accent, align, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='StatBlock'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<StatBlock> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='StatBlock'] > JSXAttribute[name.name='align'] > Literal[value!=/^(?:left|center)$/]",
        "message": "<StatBlock> align must be one of 'left' | 'center'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Testimonial'] > JSXAttribute > JSXIdentifier[name!=/^(?:quote|name|meta|rating|theme|style|key|ref|className|style|children)$/]",
        "message": "<Testimonial> doesn't accept that prop. Declared props: quote, name, meta, rating, theme, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Testimonial'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<Testimonial> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Textarea'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|id|placeholder|value|onChange|required|rows|hint|error|theme|style|key|ref|className|style|children)$/]",
        "message": "<Textarea> doesn't accept that prop. Declared props: label, id, placeholder, value, onChange, required, rows, hint, error, theme, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='Textarea'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<Textarea> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='ValueCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|title|children|theme|align|style|key|ref|className|style|children)$/]",
        "message": "<ValueCard> doesn't accept that prop. Declared props: icon, title, children, theme, align, style."
      },
      {
        "selector": "JSXOpeningElement[name.name='ValueCard'] > JSXAttribute[name.name='theme'] > Literal[value!=/^(?:dark|light)$/]",
        "message": "<ValueCard> theme must be one of 'dark' | 'light'."
      },
      {
        "selector": "JSXOpeningElement[name.name='ValueCard'] > JSXAttribute[name.name='align'] > Literal[value!=/^(?:left|center)$/]",
        "message": "<ValueCard> align must be one of 'left' | 'center'."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "Badge": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Card": {
        "replaces": []
      },
      "ContactMethod": {
        "replaces": []
      },
      "Divider": {
        "replaces": []
      },
      "Eyebrow": {
        "replaces": []
      },
      "Icon": {
        "replaces": []
      },
      "Input": {
        "replaces": []
      },
      "Logo": {
        "replaces": []
      },
      "SectionHeading": {
        "replaces": []
      },
      "SelectOption": {
        "replaces": []
      },
      "ServiceCard": {
        "replaces": []
      },
      "StatBlock": {
        "replaces": []
      },
      "Testimonial": {
        "replaces": []
      },
      "Textarea": {
        "replaces": []
      },
      "ValueCard": {
        "replaces": []
      }
    },
    "tokens": [
      "--accent",
      "--accent-hover",
      "--accent-press",
      "--accent-soft",
      "--border-brass",
      "--border-default",
      "--border-ink",
      "--border-strong",
      "--border-subtle",
      "--brass-100",
      "--brass-200",
      "--brass-300",
      "--brass-400",
      "--brass-50",
      "--brass-500",
      "--brass-600",
      "--brass-700",
      "--container-max",
      "--container-narrow",
      "--container-wide",
      "--danger-100",
      "--danger-600",
      "--dur-base",
      "--dur-fast",
      "--dur-slow",
      "--dur-slower",
      "--ease-in-out",
      "--ease-out",
      "--ease-standard",
      "--focus-ring",
      "--font-display",
      "--font-mono",
      "--font-sans",
      "--fw-bold",
      "--fw-extrabold",
      "--fw-light",
      "--fw-medium",
      "--fw-regular",
      "--fw-semibold",
      "--gutter",
      "--hairline",
      "--info-100",
      "--info-600",
      "--ink-500",
      "--ink-600",
      "--ink-700",
      "--ink-800",
      "--ink-900",
      "--ink-950",
      "--ivory",
      "--leading-normal",
      "--leading-relaxed",
      "--leading-snug",
      "--leading-tight",
      "--on-accent",
      "--paper",
      "--radius-circle",
      "--radius-lg",
      "--radius-md",
      "--radius-none",
      "--radius-pill",
      "--radius-sm",
      "--radius-xl",
      "--radius-xs",
      "--role-body-font",
      "--role-display-font",
      "--role-eyebrow-font",
      "--role-eyebrow-size",
      "--role-eyebrow-tracking",
      "--role-eyebrow-weight",
      "--role-heading-font",
      "--role-mono-font",
      "--section-y",
      "--shadow-brass",
      "--shadow-inset-hairline",
      "--shadow-lg",
      "--shadow-md",
      "--shadow-sm",
      "--shadow-xl",
      "--shadow-xs",
      "--slate-100",
      "--slate-200",
      "--slate-300",
      "--slate-400",
      "--slate-50",
      "--slate-500",
      "--slate-600",
      "--slate-700",
      "--space-0",
      "--space-1",
      "--space-10",
      "--space-11",
      "--space-12",
      "--space-2",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-7",
      "--space-8",
      "--space-9",
      "--success-100",
      "--success-600",
      "--surface-brass",
      "--surface-ink",
      "--surface-ink-soft",
      "--surface-page",
      "--surface-raised",
      "--surface-sunken",
      "--text-2xl",
      "--text-2xs",
      "--text-3xl",
      "--text-4xl",
      "--text-5xl",
      "--text-base",
      "--text-body",
      "--text-brand",
      "--text-faint",
      "--text-lg",
      "--text-md",
      "--text-muted",
      "--text-on-ink",
      "--text-on-ink-muted",
      "--text-sm",
      "--text-strong",
      "--text-xl",
      "--text-xs",
      "--tracking-normal",
      "--tracking-tight",
      "--tracking-tightest",
      "--tracking-wide",
      "--tracking-wider",
      "--tracking-widest",
      "--warning-100",
      "--warning-600",
      "--white"
    ],
    "tokenKinds": {
      "--ink-950": "color",
      "--ink-900": "color",
      "--ink-800": "color",
      "--ink-700": "color",
      "--ink-600": "color",
      "--ink-500": "color",
      "--slate-50": "color",
      "--slate-100": "color",
      "--slate-200": "color",
      "--slate-300": "color",
      "--slate-400": "color",
      "--slate-500": "color",
      "--slate-600": "color",
      "--slate-700": "color",
      "--brass-700": "color",
      "--brass-600": "color",
      "--brass-500": "color",
      "--brass-400": "color",
      "--brass-300": "color",
      "--brass-200": "color",
      "--brass-100": "color",
      "--brass-50": "color",
      "--ivory": "color",
      "--paper": "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",
      "--surface-page": "color",
      "--surface-raised": "color",
      "--surface-sunken": "color",
      "--surface-ink": "color",
      "--surface-ink-soft": "color",
      "--surface-brass": "color",
      "--text-strong": "font",
      "--text-body": "font",
      "--text-muted": "font",
      "--text-faint": "font",
      "--text-on-ink": "font",
      "--text-on-ink-muted": "font",
      "--text-brand": "font",
      "--accent": "color",
      "--accent-hover": "color",
      "--accent-press": "color",
      "--accent-soft": "color",
      "--on-accent": "color",
      "--border-subtle": "color",
      "--border-default": "color",
      "--border-strong": "color",
      "--border-ink": "color",
      "--border-brass": "color",
      "--hairline": "color",
      "--focus-ring": "color",
      "--font-display": "font",
      "--font-sans": "font",
      "--font-mono": "font",
      "--fw-light": "other",
      "--fw-regular": "other",
      "--fw-medium": "other",
      "--fw-semibold": "other",
      "--fw-bold": "other",
      "--fw-extrabold": "other",
      "--text-2xs": "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",
      "--text-5xl": "font",
      "--leading-tight": "font",
      "--leading-snug": "font",
      "--leading-normal": "font",
      "--leading-relaxed": "font",
      "--tracking-tightest": "font",
      "--tracking-tight": "font",
      "--tracking-normal": "font",
      "--tracking-wide": "font",
      "--tracking-wider": "font",
      "--tracking-widest": "font",
      "--role-eyebrow-font": "font",
      "--role-eyebrow-size": "spacing",
      "--role-eyebrow-tracking": "font",
      "--role-eyebrow-weight": "font",
      "--role-display-font": "font",
      "--role-heading-font": "font",
      "--role-body-font": "font",
      "--role-mono-font": "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-11": "spacing",
      "--space-12": "spacing",
      "--container-max": "spacing",
      "--container-wide": "spacing",
      "--container-narrow": "spacing",
      "--gutter": "color",
      "--section-y": "color",
      "--radius-none": "radius",
      "--radius-xs": "radius",
      "--radius-sm": "radius",
      "--radius-md": "radius",
      "--radius-lg": "radius",
      "--radius-xl": "radius",
      "--radius-pill": "radius",
      "--radius-circle": "radius",
      "--shadow-xs": "shadow",
      "--shadow-sm": "shadow",
      "--shadow-md": "shadow",
      "--shadow-lg": "shadow",
      "--shadow-xl": "shadow",
      "--shadow-brass": "shadow",
      "--shadow-inset-hairline": "shadow",
      "--ease-standard": "other",
      "--ease-out": "other",
      "--ease-in-out": "other",
      "--dur-fast": "other",
      "--dur-base": "other",
      "--dur-slow": "other",
      "--dur-slower": "other"
    },
    "fontFamilies": [
      "Cinzel",
      "Hanken Grotesk",
      "IBM Plex Mono"
    ]
  }
}