{
  "schema_version": "1.0.0",
  "generated_at": "2026-06-01T21:38:49.263Z",
  "generator": "scripts/generate-accessibility-report.ts",
  "target_base_url": "https://staging.fyper.cc",
  "axe_core_version": "4.11.0",
  "axe_puppeteer_version": "4.11.3",
  "wcag_target": "WCAG 2.1 Level AA",
  "pages": [
    {
      "path": "/",
      "url": "https://staging.fyper.cc/",
      "scanned_at": "2026-06-01T21:36:51.767Z",
      "status": "navigation_error",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": [],
      "error": "Navigation timeout of 20000 ms exceeded"
    },
    {
      "path": "/login",
      "url": "https://staging.fyper.cc/login",
      "scanned_at": "2026-06-01T21:37:12.604Z",
      "status": "ok",
      "totals": {
        "violations": 3,
        "critical": 0,
        "serious": 0,
        "moderate": 3,
        "minor": 0
      },
      "violations": [
        {
          "id": "landmark-one-main",
          "impact": "moderate",
          "description": "Ensure the document has a main landmark",
          "help": "Document should have one main landmark",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/landmark-one-main?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 1,
          "nodes": [
            {
              "selector": "html",
              "html_snippet": "<html lang=\"en\" style=\"--vh: 8px;\">"
            }
          ],
          "remediation": "Ensure each page exposes exactly one <main> landmark."
        },
        {
          "id": "meta-viewport",
          "impact": "moderate",
          "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
          "help": "Zooming and scaling must not be disabled",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/meta-viewport?application=axe-puppeteer",
          "wcag_criteria": [
            "wcag2aa",
            "wcag144"
          ],
          "node_count": 1,
          "nodes": [
            {
              "selector": "meta[name=\"viewport\"]",
              "html_snippet": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover\">"
            }
          ],
          "remediation": "Resolve violation by following axe-core guidance: Zooming and scaling must not be disabled"
        },
        {
          "id": "region",
          "impact": "moderate",
          "description": "Ensure all page content is contained by landmarks",
          "help": "All page content should be contained by landmarks",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/region?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 7,
          "nodes": [
            {
              "selector": ".max-w-\\[420px\\] > .text-center.space-y-2",
              "html_snippet": "<div class=\"text-center space-y-2\">"
            },
            {
              "selector": ".space-y-2:nth-child(1) > label",
              "html_snippet": "<label class=\"peer-disabled:cursor-not-allowed peer-disabled:opacity-70 motion-safe:transition-colors motion-safe:duration-150 text-foreground text-[14px] font-semibold\"><span>Email</span></label>"
            },
            {
              "selector": "input[type=\"email\"]",
              "html_snippet": "<input type=\"email\" class=\"flex w-full rounded-...\" placeholder=\"your@email.com\" autocomplete=\"email\" value=\"\">"
            }
          ],
          "remediation": "Wrap all top-level content in semantic landmark regions (main, nav, header, footer)."
        }
      ]
    },
    {
      "path": "/signup",
      "url": "https://staging.fyper.cc/signup",
      "scanned_at": "2026-06-01T21:37:29.664Z",
      "status": "ok",
      "totals": {
        "violations": 3,
        "critical": 0,
        "serious": 0,
        "moderate": 3,
        "minor": 0
      },
      "violations": [
        {
          "id": "landmark-one-main",
          "impact": "moderate",
          "description": "Ensure the document has a main landmark",
          "help": "Document should have one main landmark",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/landmark-one-main?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 1,
          "nodes": [
            {
              "selector": "html",
              "html_snippet": "<html lang=\"en\" style=\"--vh: 8px;\">"
            }
          ],
          "remediation": "Ensure each page exposes exactly one <main> landmark."
        },
        {
          "id": "meta-viewport",
          "impact": "moderate",
          "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
          "help": "Zooming and scaling must not be disabled",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/meta-viewport?application=axe-puppeteer",
          "wcag_criteria": [
            "wcag2aa",
            "wcag144"
          ],
          "node_count": 1,
          "nodes": [
            {
              "selector": "meta[name=\"viewport\"]",
              "html_snippet": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover\">"
            }
          ],
          "remediation": "Resolve violation by following axe-core guidance: Zooming and scaling must not be disabled"
        },
        {
          "id": "region",
          "impact": "moderate",
          "description": "Ensure all page content is contained by landmarks",
          "help": "All page content should be contained by landmarks",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/region?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 12,
          "nodes": [
            {
              "selector": ".text-center.space-y-2",
              "html_snippet": "<div class=\"text-center space-y-2\">"
            },
            {
              "selector": ".space-y-2:nth-child(1) > label",
              "html_snippet": "<label class=\"peer-disabled:cursor-not-allowed peer-disabled:opacity-70 motion-safe:transition-colors motion-safe:duration-150 text-foreground text-[14px] font-semibold\"><span>Email</span></label>"
            },
            {
              "selector": "input[type=\"email\"]",
              "html_snippet": "<input type=\"email\" class=\"flex w-full rounded-...\" placeholder=\"your@email.com\" autocomplete=\"email\" value=\"\">"
            }
          ],
          "remediation": "Wrap all top-level content in semantic landmark regions (main, nav, header, footer)."
        }
      ]
    },
    {
      "path": "/pricing",
      "url": "https://staging.fyper.cc/pricing",
      "scanned_at": "2026-06-01T21:37:47.161Z",
      "status": "ok",
      "totals": {
        "violations": 5,
        "critical": 0,
        "serious": 1,
        "moderate": 4,
        "minor": 0
      },
      "violations": [
        {
          "id": "color-contrast",
          "impact": "serious",
          "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
          "help": "Elements must meet minimum color contrast ratio thresholds",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=axe-puppeteer",
          "wcag_criteria": [
            "wcag2aa",
            "wcag143"
          ],
          "node_count": 1,
          "nodes": [
            {
              "selector": ".text-\\[10px\\]",
              "html_snippet": "<span class=\"text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-green-500/15 text-green-700 dark:text-green-400\">Save 31%</span>"
            }
          ],
          "remediation": "Increase the contrast ratio between text and background to at least 4.5:1 (3:1 for large text). Update the design tokens or component theme accordingly."
        },
        {
          "id": "heading-order",
          "impact": "moderate",
          "description": "Ensure the order of headings is semantically correct",
          "help": "Heading levels should only increase by one",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/heading-order?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 1,
          "nodes": [
            {
              "selector": "div[data-testid=\"pricing-tier-free\"] > .mb-4 > h3",
              "html_snippet": "<h3 class=\"text-[20px] font-bold\">Free</h3>"
            }
          ],
          "remediation": "Resolve violation by following axe-core guidance: Heading levels should only increase by one"
        },
        {
          "id": "landmark-one-main",
          "impact": "moderate",
          "description": "Ensure the document has a main landmark",
          "help": "Document should have one main landmark",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/landmark-one-main?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 1,
          "nodes": [
            {
              "selector": "html",
              "html_snippet": "<html lang=\"en\" style=\"--vh: 8px;\">"
            }
          ],
          "remediation": "Ensure each page exposes exactly one <main> landmark."
        },
        {
          "id": "meta-viewport",
          "impact": "moderate",
          "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
          "help": "Zooming and scaling must not be disabled",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/meta-viewport?application=axe-puppeteer",
          "wcag_criteria": [
            "wcag2aa",
            "wcag144"
          ],
          "node_count": 1,
          "nodes": [
            {
              "selector": "meta[name=\"viewport\"]",
              "html_snippet": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover\">"
            }
          ],
          "remediation": "Resolve violation by following axe-core guidance: Zooming and scaling must not be disabled"
        },
        {
          "id": "region",
          "impact": "moderate",
          "description": "Ensure all page content is contained by landmarks",
          "help": "All page content should be contained by landmarks",
          "help_url": "https://dequeuniversity.com/rules/axe/4.11/region?application=axe-puppeteer",
          "wcag_criteria": [],
          "node_count": 21,
          "nodes": [
            {
              "selector": ".space-y-4.mb-8.text-center",
              "html_snippet": "<div class=\"text-center space-y-4 mb-8\"><h1 class=\"text-[36px] font-bold tracking-tight\">Simple, transparent pricing</h1><p class=\"text-[18px] text-muted-foreground max-w-lg mx-auto\">Start free, upgrade when you're ready. No hidden fees.</p"
            },
            {
              "selector": ".mb-10",
              "html_snippet": "<div class=\"flex justify-center mb-10\" data-testid=\"billing-cycle-toggle\">"
            },
            {
              "selector": "div[data-testid=\"pricing-tier-free\"] > .mb-4 > h3",
              "html_snippet": "<h3 class=\"text-[20px] font-bold\">Free</h3>"
            }
          ],
          "remediation": "Wrap all top-level content in semantic landmark regions (main, nav, header, footer)."
        }
      ]
    },
    {
      "path": "/terms",
      "url": "https://staging.fyper.cc/terms",
      "scanned_at": "2026-06-01T21:38:09.144Z",
      "status": "ok",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": []
    },
    {
      "path": "/privacy",
      "url": "https://staging.fyper.cc/privacy",
      "scanned_at": "2026-06-01T21:38:16.347Z",
      "status": "ok",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": []
    },
    {
      "path": "/accessibility",
      "url": "https://staging.fyper.cc/accessibility",
      "scanned_at": "2026-06-01T21:38:22.201Z",
      "status": "ok",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": []
    },
    {
      "path": "/sub-processors",
      "url": "https://staging.fyper.cc/sub-processors",
      "scanned_at": "2026-06-01T21:38:28.166Z",
      "status": "ok",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": []
    },
    {
      "path": "/dpa",
      "url": "https://staging.fyper.cc/dpa",
      "scanned_at": "2026-06-01T21:38:34.350Z",
      "status": "ok",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": []
    },
    {
      "path": "/security",
      "url": "https://staging.fyper.cc/security",
      "scanned_at": "2026-06-01T21:38:40.259Z",
      "status": "ok",
      "totals": {
        "violations": 0,
        "critical": 0,
        "serious": 0,
        "moderate": 0,
        "minor": 0
      },
      "violations": []
    }
  ],
  "totals": {
    "pages_scanned": 10,
    "pages_with_errors": 1,
    "violations": 11,
    "critical": 0,
    "serious": 1,
    "moderate": 10,
    "minor": 0
  },
  "notes": [
    "Violations are reported as detected by axe-core static analysis; some may be false positives in dynamic regions.",
    "A formal manual audit by a professional accessibility-audit firm has not been commissioned (pending input).",
    "Remediation hints are generic; per-violation triage should consult the linked help_url."
  ]
}
