{
  "plugins": [
    "react",
    "import"
  ],
  "rules": {
    "react/forbid-elements": [
      "warn",
      {
        "forbid": []
      }
    ],
    "no-restricted-imports": [
      "warn",
      {
        "patterns": [
          {
            "group": [
              "components/brand/**",
              "components/cards/**",
              "components/core/**",
              "components/navigation/**",
              "ui_kits/wiggleverse-www/**"
            ],
            "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*(?!['\\\"]?(?:Space Grotesk|Inter|Fraunces))/i]",
        "message": "Font not provided by the design system. Available: Space Grotesk, Inter, Fraunces."
      },
      {
        "selector": "JSXOpeningElement[name.name='BrandLockup'] > JSXAttribute > JSXIdentifier[name!=/^(?:variant|size|href|showWordmark|assetBase|key|ref|className|style|children)$/]",
        "message": "<BrandLockup> doesn't accept that prop. Declared props: variant, size, href, showWordmark, assetBase."
      },
      {
        "selector": "JSXOpeningElement[name.name='BrandLockup'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|footer|onLight)$/]",
        "message": "<BrandLockup> variant must be one of 'primary' | 'footer' | 'onLight'."
      },
      {
        "selector": "JSXOpeningElement[name.name='BuildCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:tag|title|children|key|ref|className|style|children)$/]",
        "message": "<BuildCard> doesn't accept that prop. Declared props: tag, title, children."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|href|onLight|disabled|type|onClick|key|ref|className|style|children)$/]",
        "message": "<Button> doesn't accept that prop. Declared props: children, variant, href, onLight, disabled, type, onClick."
      },
      {
        "selector": "JSXOpeningElement[name.name='Button'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:primary|ghost)$/]",
        "message": "<Button> variant must be one of 'primary' | 'ghost'."
      },
      {
        "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='Callout'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|onLight|key|ref|className|style|children)$/]",
        "message": "<Callout> doesn't accept that prop. Declared props: children, onLight."
      },
      {
        "selector": "JSXOpeningElement[name.name='Eyebrow'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|onLight|as|key|ref|className|style|children)$/]",
        "message": "<Eyebrow> doesn't accept that prop. Declared props: children, onLight, as."
      },
      {
        "selector": "JSXOpeningElement[name.name='Notice'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|key|ref|className|style|children)$/]",
        "message": "<Notice> doesn't accept that prop. Declared props: children."
      },
      {
        "selector": "JSXOpeningElement[name.name='PathCard'] > JSXAttribute > JSXIdentifier[name!=/^(?:icon|title|children|href|first|key|ref|className|style|children)$/]",
        "message": "<PathCard> doesn't accept that prop. Declared props: icon, title, children, href, first."
      },
      {
        "selector": "JSXOpeningElement[name.name='FooterColumn'] > JSXAttribute > JSXIdentifier[name!=/^(?:heading|links|key|ref|className|style|children)$/]",
        "message": "<FooterColumn> doesn't accept that prop. Declared props: heading, links."
      },
      {
        "selector": "JSXOpeningElement[name.name='NavLink'] > JSXAttribute > JSXIdentifier[name!=/^(?:label|href|cta|key|ref|className|style|children)$/]",
        "message": "<NavLink> doesn't accept that prop. Declared props: label, href, cta."
      },
      {
        "selector": "JSXOpeningElement[name.name='Soul'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|size|tone|onLight|as|key|ref|className|style|children)$/]",
        "message": "<Soul> doesn't accept that prop. Declared props: children, size, tone, onLight, as."
      },
      {
        "selector": "JSXOpeningElement[name.name='Soul'] > JSXAttribute[name.name='size'] > Literal[value!=/^(?:sm|md|lg)$/]",
        "message": "<Soul> size must be one of 'sm' | 'md' | 'lg'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Soul'] > JSXAttribute[name.name='tone'] > Literal[value!=/^(?:gold|plain|lilac)$/]",
        "message": "<Soul> tone must be one of 'gold' | 'plain' | 'lilac'."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute > JSXIdentifier[name!=/^(?:children|variant|onLight|key|ref|className|style|children)$/]",
        "message": "<Tag> doesn't accept that prop. Declared props: children, variant, onLight."
      },
      {
        "selector": "JSXOpeningElement[name.name='Tag'] > JSXAttribute[name.name='variant'] > Literal[value!=/^(?:live|soon)$/]",
        "message": "<Tag> variant must be one of 'live' | 'soon'."
      }
    ]
  },
  "overrides": [
    {
      "files": [
        "**/index.js"
      ],
      "rules": {
        "no-restricted-imports": "off"
      }
    }
  ],
  "x-omelette": {
    "components": {
      "BrandLockup": {
        "replaces": []
      },
      "BuildCard": {
        "replaces": []
      },
      "Button": {
        "replaces": []
      },
      "Callout": {
        "replaces": []
      },
      "Eyebrow": {
        "replaces": []
      },
      "Notice": {
        "replaces": []
      },
      "PathCard": {
        "replaces": []
      },
      "FooterColumn": {
        "replaces": []
      },
      "NavLink": {
        "replaces": []
      },
      "Soul": {
        "replaces": []
      },
      "Tag": {
        "replaces": []
      }
    },
    "tokens": [
      "--accent",
      "--accent-on-light",
      "--border-card",
      "--border-card-w",
      "--border-hair",
      "--border-soft",
      "--border-strong",
      "--btn-border-w",
      "--cta",
      "--cta-hover",
      "--cta-text",
      "--dur-fast",
      "--dur-mid",
      "--ease",
      "--focus-ring",
      "--font-body",
      "--font-display",
      "--font-soul",
      "--glass-blur",
      "--glass-sky",
      "--leading-body",
      "--leading-tight",
      "--lift-1",
      "--lift-3",
      "--measure-lead",
      "--measure-prose",
      "--page-hero-pad",
      "--radius-card",
      "--radius-mark",
      "--radius-panel",
      "--radius-pill",
      "--radius-sm",
      "--section-pad",
      "--shadow-none",
      "--shadow-soft",
      "--space-0",
      "--space-1",
      "--space-10",
      "--space-12",
      "--space-2",
      "--space-3",
      "--space-4",
      "--space-5",
      "--space-6",
      "--space-8",
      "--surface-card-light",
      "--surface-footer",
      "--surface-paper",
      "--surface-raised",
      "--surface-raised-hi",
      "--surface-sky",
      "--text-body",
      "--text-eyebrow",
      "--text-fine",
      "--text-h1",
      "--text-h2",
      "--text-h3",
      "--text-lead",
      "--text-on-dark",
      "--text-on-dark-mute",
      "--text-on-dark-soft",
      "--text-on-light",
      "--text-on-light-soft",
      "--text-small",
      "--text-soul",
      "--text-tag",
      "--tracking-display",
      "--tracking-eyebrow",
      "--tracking-notice",
      "--tracking-tag",
      "--weight-bold",
      "--weight-medium",
      "--weight-regular",
      "--weight-semibold",
      "--weight-soul",
      "--wrap-gutter",
      "--wrap-max",
      "--wv-font-body",
      "--wv-font-display",
      "--wv-font-human",
      "--wv-gold",
      "--wv-gold-28",
      "--wv-gold-40",
      "--wv-gold-hi",
      "--wv-gold-ink",
      "--wv-gold-ink-soft",
      "--wv-indigo",
      "--wv-indigo-2",
      "--wv-ink",
      "--wv-lilac",
      "--wv-lilac-08",
      "--wv-lilac-12",
      "--wv-lilac-16",
      "--wv-lilac-18",
      "--wv-lilac-32",
      "--wv-midnight",
      "--wv-night",
      "--wv-paper",
      "--wv-starlight",
      "--wv-starlight-55",
      "--wv-starlight-60",
      "--wv-starlight-78",
      "--wv-starlight-85",
      "--wv-violet"
    ],
    "tokenKinds": {
      "--wv-midnight": "color",
      "--wv-indigo": "color",
      "--wv-indigo-2": "color",
      "--wv-lilac": "color",
      "--wv-violet": "color",
      "--wv-gold": "color",
      "--wv-gold-hi": "color",
      "--wv-starlight": "color",
      "--wv-paper": "color",
      "--wv-ink": "color",
      "--wv-night": "color",
      "--wv-gold-ink": "color",
      "--wv-gold-ink-soft": "color",
      "--wv-lilac-08": "color",
      "--wv-lilac-12": "color",
      "--wv-lilac-16": "color",
      "--wv-lilac-18": "color",
      "--wv-lilac-32": "color",
      "--wv-gold-28": "color",
      "--wv-gold-40": "color",
      "--wv-starlight-85": "color",
      "--wv-starlight-78": "color",
      "--wv-starlight-60": "color",
      "--wv-starlight-55": "color",
      "--surface-sky": "color",
      "--surface-raised": "color",
      "--surface-raised-hi": "color",
      "--surface-paper": "color",
      "--surface-card-light": "color",
      "--surface-footer": "color",
      "--text-on-dark": "font",
      "--text-on-dark-soft": "font",
      "--text-on-dark-mute": "font",
      "--text-on-light": "font",
      "--text-on-light-soft": "font",
      "--accent": "color",
      "--accent-on-light": "color",
      "--cta": "color",
      "--cta-hover": "color",
      "--cta-text": "font",
      "--border-soft": "color",
      "--border-card": "color",
      "--border-strong": "color",
      "--focus-ring": "color",
      "--wv-font-display": "font",
      "--wv-font-body": "font",
      "--wv-font-human": "font",
      "--font-display": "font",
      "--font-body": "font",
      "--font-soul": "font",
      "--weight-regular": "font",
      "--weight-medium": "font",
      "--weight-semibold": "font",
      "--weight-bold": "font",
      "--weight-soul": "font",
      "--text-h1": "font",
      "--text-h2": "font",
      "--text-h3": "font",
      "--text-lead": "font",
      "--text-soul": "font",
      "--text-body": "font",
      "--text-small": "font",
      "--text-fine": "font",
      "--text-eyebrow": "font",
      "--text-tag": "font",
      "--leading-tight": "font",
      "--leading-body": "font",
      "--tracking-display": "font",
      "--tracking-eyebrow": "font",
      "--tracking-tag": "font",
      "--tracking-notice": "font",
      "--measure-lead": "spacing",
      "--measure-prose": "spacing",
      "--space-0": "spacing",
      "--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",
      "--section-pad": "spacing",
      "--page-hero-pad": "spacing",
      "--wrap-max": "spacing",
      "--wrap-gutter": "spacing",
      "--radius-card": "radius",
      "--radius-panel": "radius",
      "--radius-sm": "radius",
      "--radius-pill": "radius",
      "--radius-mark": "radius",
      "--border-hair": "spacing",
      "--border-card-w": "spacing",
      "--btn-border-w": "spacing",
      "--shadow-none": "shadow",
      "--shadow-soft": "shadow",
      "--lift-1": "other",
      "--lift-3": "other",
      "--glass-sky": "color",
      "--glass-blur": "spacing",
      "--ease": "other",
      "--dur-fast": "other",
      "--dur-mid": "other"
    },
    "fontFamilies": [
      "Fraunces",
      "Inter",
      "Space Grotesk"
    ]
  }
}