{
  "version": "1.0.0",
  "namespace": "ew",
  "themes": [
    "porcelain",
    "paper",
    "paper-dusk"
  ],
  "components": [
    {
      "name": "button",
      "selector": ".ew-button",
      "anatomy": "label, optional decorative icon",
      "variants": [
        "primary",
        "secondary",
        "quiet",
        "danger"
      ],
      "states": [
        "default",
        "hover",
        "focus-visible",
        "active",
        "disabled",
        "busy"
      ],
      "keyboard": "Enter or Space activates; disabled is not focusable."
    },
    {
      "name": "field",
      "selector": ".ew-field",
      "anatomy": "label, input, hint, error",
      "variants": [
        "text",
        "email",
        "date",
        "number",
        "textarea",
        "select"
      ],
      "states": [
        "empty",
        "filled",
        "focus-visible",
        "invalid",
        "disabled",
        "readonly"
      ],
      "keyboard": "Native input behavior; every label and description is associated."
    },
    {
      "name": "checkbox",
      "selector": ".ew-choice input[type=checkbox]",
      "anatomy": "input, visible label",
      "variants": [],
      "states": [
        "checked",
        "unchecked",
        "disabled",
        "focus-visible"
      ],
      "keyboard": "Space toggles."
    },
    {
      "name": "radio",
      "selector": ".ew-choice input[type=radio]",
      "anatomy": "fieldset, legend, grouped inputs",
      "variants": [],
      "states": [
        "checked",
        "unchecked",
        "disabled",
        "focus-visible"
      ],
      "keyboard": "Arrow keys select within the named group."
    },
    {
      "name": "switch",
      "selector": ".ew-choice input[role=switch]",
      "anatomy": "native checkbox, visible label",
      "variants": [],
      "states": [
        "on",
        "off",
        "disabled",
        "focus-visible"
      ],
      "keyboard": "Space toggles immediately applied setting."
    },
    {
      "name": "range",
      "selector": ".ew-range",
      "anatomy": "label, native range, output",
      "variants": [],
      "states": [
        "default",
        "focus-visible",
        "disabled"
      ],
      "keyboard": "Native arrows, Home and End."
    },
    {
      "name": "card",
      "selector": ".ew-card",
      "anatomy": "heading, content, actions",
      "variants": [],
      "states": [
        "default"
      ],
      "keyboard": "Static grouping; do not add tabindex without a reason."
    },
    {
      "name": "well",
      "selector": ".ew-well",
      "anatomy": "secondary content",
      "variants": [],
      "states": [
        "default"
      ],
      "keyboard": "Static grouping."
    },
    {
      "name": "badge",
      "selector": ".ew-badge",
      "anatomy": "text, optional symbol",
      "variants": [
        "neutral",
        "success",
        "warning",
        "danger",
        "info"
      ],
      "states": [
        "default"
      ],
      "keyboard": "Static status, not an action."
    },
    {
      "name": "alert",
      "selector": ".ew-alert",
      "anatomy": "symbol, heading, explanation, recovery",
      "variants": [
        "info",
        "success",
        "warning",
        "danger"
      ],
      "states": [
        "static",
        "announced"
      ],
      "keyboard": "Live region only for a newly occurring event."
    },
    {
      "name": "tabs",
      "selector": ".ew-tabs[data-ew-tabs]",
      "anatomy": "tablist, tabs, panels",
      "variants": [
        "horizontal",
        "vertical"
      ],
      "states": [
        "selected",
        "unselected",
        "focus-visible"
      ],
      "keyboard": "Roving focus; arrows, Home and End; RTL aware."
    },
    {
      "name": "breadcrumb",
      "selector": ".ew-breadcrumb",
      "anatomy": "ordered links, current page",
      "variants": [],
      "states": [
        "default",
        "current"
      ],
      "keyboard": "Ordinary Tab navigation."
    },
    {
      "name": "pagination",
      "selector": ".ew-pagination",
      "anatomy": "previous, current page, next",
      "variants": [],
      "states": [
        "default",
        "current",
        "disabled"
      ],
      "keyboard": "Tab and Enter; disable boundaries."
    },
    {
      "name": "steps",
      "selector": ".ew-steps",
      "anatomy": "ordered steps, current step",
      "variants": [],
      "states": [
        "complete",
        "current",
        "upcoming"
      ],
      "keyboard": "Static unless safe links are supplied."
    },
    {
      "name": "disclosure",
      "selector": ".ew-disclosure",
      "anatomy": "details, summary, content",
      "variants": [],
      "states": [
        "open",
        "closed",
        "focus-visible"
      ],
      "keyboard": "Enter or Space on summary."
    },
    {
      "name": "popover",
      "selector": ".ew-popover",
      "anatomy": "details, summary, panel",
      "variants": [
        "resource links"
      ],
      "states": [
        "open",
        "closed",
        "focus-visible"
      ],
      "keyboard": "Tab follows links; Escape and outside click close."
    },
    {
      "name": "contextual-help",
      "selector": ".ew-tooltip",
      "anatomy": "details summary, persistent help",
      "variants": [],
      "states": [
        "open",
        "closed"
      ],
      "keyboard": "Keyboard and touch disclosure; not hover-only."
    },
    {
      "name": "dialog",
      "selector": ".ew-dialog",
      "anatomy": "title, content, safe action, primary action",
      "variants": [
        "modal",
        "sheet"
      ],
      "states": [
        "closed",
        "open"
      ],
      "keyboard": "Native modal focus containment, Escape and trigger restoration."
    },
    {
      "name": "toast",
      "selector": ".ew-toast",
      "anatomy": "live text, dismiss button",
      "variants": [],
      "states": [
        "shown",
        "dismissed"
      ],
      "keyboard": "Dismiss button is focusable; no forced timeout."
    },
    {
      "name": "table",
      "selector": ".ew-table",
      "anatomy": "caption, headers, rows, cells",
      "variants": [
        "static",
        "sortable"
      ],
      "states": [
        "loading",
        "empty",
        "populated"
      ],
      "keyboard": "Normal reading order; sort via native button."
    },
    {
      "name": "progress",
      "selector": ".ew-progress",
      "anatomy": "native progress, label",
      "variants": [],
      "states": [
        "determinate",
        "indeterminate"
      ],
      "keyboard": "Status only; no tabindex."
    },
    {
      "name": "skeleton",
      "selector": ".ew-skeleton",
      "anatomy": "decorative placeholders, one loading label",
      "variants": [],
      "states": [
        "loading"
      ],
      "keyboard": "Hidden visual placeholders; one accessible loading message."
    },
    {
      "name": "spinner",
      "selector": ".ew-spinner",
      "anatomy": "decorative ring, persistent action label",
      "variants": [],
      "states": [
        "loading"
      ],
      "keyboard": "Never the only loading announcement."
    },
    {
      "name": "empty",
      "selector": ".ew-empty",
      "anatomy": "heading, explanation, next action",
      "variants": [],
      "states": [
        "empty"
      ],
      "keyboard": "One clear recovery action."
    },
    {
      "name": "avatar",
      "selector": ".ew-avatar",
      "anatomy": "initials or image, visible adjacent name",
      "variants": [],
      "states": [
        "default"
      ],
      "keyboard": "Decorative when name is already present."
    },
    {
      "name": "evidence",
      "selector": ".ew-evidence",
      "anatomy": "document icon, name, metadata, action",
      "variants": [
        "stacked",
        "inline"
      ],
      "states": [
        "missing",
        "attached",
        "invalid"
      ],
      "keyboard": "Action stacks below details in containers under 30rem."
    },
    {
      "name": "form-grid",
      "selector": ".ew-form-grid",
      "anatomy": "fields, grouped controls",
      "variants": [
        "one column",
        "two columns"
      ],
      "states": [
        "default"
      ],
      "keyboard": "DOM order is reading and keyboard order."
    }
  ]
}
