{
  "target": "/Users/stanbouchet/astro-a11y/examples/static-site/dist",
  "mode": "learning",
  "generatedAt": "2026-04-19T12:02:04.910Z",
  "issues": [
    {
      "id": "document-title",
      "rgaa": "8.5",
      "page": "http://127.0.0.1:56615/contact/",
      "severity": "major",
      "title": "Document has no title",
      "why": "A meaningful page title helps users understand where they are.",
      "howToFix": "Ensure each page has a descriptive title element.",
      "nodes": [
        {
          "target": "html",
          "html": "<html><head>\n  <meta charset=\"utf-8\">\n  <title></title>\n</head>\n<body>\n  <main>\n    <h1>Contact</h1>\n    <form>\n      <input type=\"email\" id=\"email\">\n      <button type=\"submit\">Send</button>\n    </form>\n  </main>\n\n\n</body></html>",
          "failureSummary": "Fix any of the following:\n  Document does not have a non-empty <title> element"
        }
      ],
      "help": "Documents must have <title> element to aid in navigation",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/document-title?application=playwright",
      "mode": "learning",
      "before": "<title></title>",
      "after": "<title>Contact – Example Company</title>"
    },
    {
      "id": "html-has-lang",
      "rgaa": "8.3",
      "page": "http://127.0.0.1:56615/contact/",
      "severity": "major",
      "title": "HTML element has no lang attribute",
      "why": "Assistive technologies need the page language to pronounce content correctly.",
      "howToFix": "Set the lang attribute on the root html element.",
      "nodes": [
        {
          "target": "html",
          "html": "<html><head>\n  <meta charset=\"utf-8\">\n  <title></title>\n</head>\n<body>\n  <main>\n    <h1>Contact</h1>\n    <form>\n      <input type=\"email\" id=\"email\">\n      <button type=\"submit\">Send</button>\n    </form>\n  </main>\n\n\n</body></html>",
          "failureSummary": "Fix any of the following:\n  The <html> element does not have a lang attribute"
        }
      ],
      "help": "<html> element must have a lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/html-has-lang?application=playwright",
      "mode": "learning",
      "before": "<html>",
      "after": "<html lang=\"fr\">"
    },
    {
      "id": "label",
      "rgaa": "11.1",
      "page": "http://127.0.0.1:56615/contact/",
      "severity": "critical",
      "title": "Form control is missing a label",
      "why": "Form fields without labels are difficult or impossible to understand with assistive technologies.",
      "howToFix": "Associate a visible or programmatic label with each form control.",
      "nodes": [
        {
          "target": "#email",
          "html": "<input type=\"email\" id=\"email\">",
          "failureSummary": "Fix any of the following:\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element has no placeholder attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
        }
      ],
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/label?application=playwright",
      "mode": "learning",
      "before": "<input id=\"email\" type=\"email\">",
      "after": "<label for=\"email\">Email</label><input id=\"email\" type=\"email\">"
    },
    {
      "id": "button-name",
      "rgaa": "11.9",
      "page": "http://127.0.0.1:56615/",
      "severity": "critical",
      "title": "Button has no accessible name",
      "why": "Assistive technologies cannot announce the purpose of the button.",
      "howToFix": "Add visible text, aria-label, or an accessible name linked to the button.",
      "nodes": [
        {
          "target": "button",
          "html": "<button type=\"button\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><circle cx=\"10\" cy=\"10\" r=\"8\"></circle></svg></button>",
          "failureSummary": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
        }
      ],
      "help": "Buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/button-name?application=playwright",
      "mode": "learning",
      "before": "<button><svg aria-hidden=\"true\"></svg></button>",
      "after": "<button aria-label=\"Close dialog\"><svg aria-hidden=\"true\"></svg></button>"
    },
    {
      "id": "color-contrast",
      "rgaa": "3.2",
      "page": "http://127.0.0.1:56615/",
      "severity": "major",
      "title": "Insufficient color contrast",
      "why": "Low contrast makes text difficult to read for many users, including people with low vision.",
      "howToFix": "Increase the contrast ratio between foreground and background colors.",
      "nodes": [
        {
          "target": ".muted",
          "html": "<p class=\"muted\">This paragraph has intentionally poor contrast.</p>",
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 1.24 (foreground color: #888888, background color: #999999, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
        }
      ],
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright",
      "mode": "learning",
      "before": ".muted { color: #777; background: #888; }",
      "after": ".muted { color: #1f2937; background: #ffffff; }"
    },
    {
      "id": "frame-title",
      "rgaa": "2.1",
      "page": "http://127.0.0.1:56615/",
      "severity": "major",
      "title": "Iframe has no title",
      "why": "Users need a clear title to understand embedded content.",
      "howToFix": "Add a concise and meaningful title attribute to the iframe.",
      "nodes": [
        {
          "target": "iframe",
          "html": "<iframe src=\"https://example.com/embed\"></iframe>",
          "failureSummary": "Fix any of the following:\n  Element has no title attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
        }
      ],
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/frame-title?application=playwright",
      "mode": "learning",
      "before": "<iframe src=\"https://example.com/embed\"></iframe>",
      "after": "<iframe src=\"https://example.com/embed\" title=\"Video player\"></iframe>"
    },
    {
      "id": "image-alt",
      "rgaa": "1.1",
      "page": "http://127.0.0.1:56615/",
      "severity": "major",
      "title": "Alternative text missing on image",
      "why": "Screen reader users cannot understand the purpose of the image.",
      "howToFix": "Add a meaningful alt attribute, or alt=\"\" for decorative images.",
      "nodes": [
        {
          "target": "img",
          "html": "<img src=\"/logo.png\">",
          "failureSummary": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
        }
      ],
      "help": "Images must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.11/image-alt?application=playwright",
      "mode": "learning",
      "before": "<img src=\"/team.jpg\">",
      "after": "<img src=\"/team.jpg\" alt=\"Team gathered in the Lyon office\">"
    }
  ],
  "routes": [
    "/contact/",
    "/"
  ],
  "summary": {
    "pagesScanned": 2,
    "issuesBySeverity": {
      "critical": 2,
      "major": 5,
      "minor": 0,
      "info": 0
    },
    "failed": true
  }
}