{
  "url": "https://www.goal.com",
  "auditedAt": "2026-07-19T17:09:41.428Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit of five representative Goal.com UK archetypes. Not covered: authenticated account settings, checkout, betting transactions, forums posting, external shop and video playback because they are separate or destructive/regulated flows.",
  "page": {
    "appType": "hybrid",
    "framework": "Next.js",
    "notes": "Server-rendered localized sports news site with client hydration, live scores, advertising and a consent platform."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "images",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "adapt-scrollbar-to-contrast-preferences",
    "accessibility",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "performance",
    "optimize-script-priority",
    "security",
    "privacy",
    "fluid-scaling",
    "deliver-optimized-decorative-images",
    "efficient-background-processing",
    "agentic-javascript-tools",
    "webmcp",
    "html"
  ],
  "config": {
    "loaded": false
  },
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-crawler.png",
      "caption": "article discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-rendered.png",
      "caption": "article discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/article-discoverability.json",
      "caption": "article discoverability",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/article-links.json",
      "caption": "article links",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-probe.json",
      "caption": "article probe",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article.png",
      "caption": "article",
      "findingIds": [
        "F01",
        "F02",
        "F16"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "discoverability",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/discovery.json",
      "caption": "discovery",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/error-mobile.png",
      "caption": "error mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/error-probe.json",
      "caption": "error probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F09"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.json",
      "caption": "heap post scroll",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.json",
      "caption": "heap post",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "home contrast",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F01",
        "F02",
        "F10"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "home layout mobile",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light.png",
      "caption": "home light",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-quality-probe.json",
      "caption": "home quality probe",
      "findingIds": [
        "F03",
        "F12",
        "F13",
        "F14",
        "F15",
        "F16",
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F07",
        "F08",
        "F18"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F07",
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home",
      "findingIds": [
        "F05",
        "F06",
        "F11",
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "reduced motion",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/scores-mobile.png",
      "caption": "scores mobile",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/scores-probe.json",
      "caption": "scores probe",
      "findingIds": [
        "F12",
        "F13",
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/team-probe.json",
      "caption": "team probe",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/team.png",
      "caption": "team",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F10",
        "F18"
      ]
    }
  ],
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated media screenshots and Runtime animation/computed-style probe",
      "evidence": "Dark and light emulation screenshots are byte-identical (660,976 bytes each); the DOM probe reports theme=\"dark\" and computed colorScheme=\"normal\".",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-light.png",
        "evidence/home-quality-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated media screenshots and Runtime animation/computed-style probe",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() still reported running pulse1 and pulse2 animations with 3,000 ms duration and unbounded iterations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Emulated media screenshots and Runtime animation/computed-style probe",
      "evidence": "Forced-colors/prefers-contrast screenshot retained readable controls and text; Lighthouse reported no color-contrast failures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-light.png",
        "evidence/reduced-motion.json",
        "evidence/home-contrast.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS feature probe plus route/mobile interaction review",
      "evidence": "CSS probe found view-transition rules on rendered routes; navigation links use real hrefs and preserve cross-document semantics.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS feature probe plus route/mobile interaction review",
      "evidence": "CSS probe found animation-timeline/scroll-timeline declarations, supporting off-main-thread scroll-linked effects.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS feature probe plus route/mobile interaction review",
      "evidence": "CSS probe found scroll-snap declarations and no physical-only layout dependency; mobile navigation remained usable.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "Rendered CSS feature probe and screenshots across scrollable templates",
      "evidence": "Rendered CSS contains scroll-position/timeline support and mobile screenshots show position-aware compact navigation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "medium",
      "method": "Rendered CSS feature probe and screenshots across scrollable templates",
      "evidence": "Rendered CSS contains anchor-name/position-anchor support; inspected navigation overlays did not visibly drift or clip.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Rendered CSS feature probe and screenshots across scrollable templates",
      "evidence": "View-transition, scroll-snap and visible section headings provide direct attention cues across article and score surfaces.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "First-load screenshots and semantic overlay DOM probe",
      "evidence": "Desktop article screenshot shows an 870×676 consent surface over dimmed editorial content; the mobile scores screenshot is entirely occupied by the same choice.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article.png",
        "evidence/scores-mobile.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "First-load screenshots and semantic overlay DOM probe",
      "evidence": "A blocking modal is visible in screenshots, but the rendered DOM probe found zero dialog elements, zero popovers and zero details elements.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/article.png",
        "evidence/home-quality-probe.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "First-load screenshots and semantic overlay DOM probe",
      "evidence": "Desktop article screenshot shows an 870×676 consent surface over dimmed editorial content; the mobile scores screenshot is entirely occupied by the same choice.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article.png",
        "evidence/scores-mobile.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "360×800 screenshots, layout metrics and target/focus probe",
      "evidence": "At 360×800, layout reported scrollWidth=clientWidth=360 with zero horizontal overflow and viewport metadata present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-mobile.png",
        "evidence/home-quality-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "360×800 screenshots, layout metrics and target/focus probe",
      "evidence": "Rendered CSS probe found @container rules and the home/scores/team templates reflowed into distinct mobile compositions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-mobile.png",
        "evidence/home-quality-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "360×800 screenshots, layout metrics and target/focus probe",
      "evidence": "The home probe counted 51 visible controls below 24 px in one dimension; the live-scores probe measured date/action buttons around 35.7×32 px and several icon buttons at 16×16 px.",
      "pathIds": [
        "scores"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/scores-probe.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Representative home/article/scores/team/error walkthrough",
      "evidence": "Home, article, scores and team screenshots/probes expose descriptive titles/headings and clear content destinations.",
      "pathIds": [
        "home",
        "article",
        "scores",
        "team",
        "error"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article.png",
        "evidence/scores-mobile.png",
        "evidence/team.png",
        "evidence/error-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Representative home/article/scores/team/error walkthrough",
      "evidence": "Desktop article screenshot shows an 870×676 consent surface over dimmed editorial content; the mobile scores screenshot is entirely occupied by the same choice.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article.png",
        "evidence/scores-mobile.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Representative home/article/scores/team/error walkthrough",
      "evidence": "The invalid-route journey rendered a clear Sorry message and a visible Homepage recovery action rather than a blank shell.",
      "pathIds": [
        "home",
        "article",
        "scores",
        "team",
        "error"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article.png",
        "evidence/scores-mobile.png",
        "evidence/team.png",
        "evidence/error-mobile.png"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse, DevTools trace, layout observer, HAR and image audit",
      "evidence": "Lighthouse measured LCP at 14.0 s (performance 47); the independent trace measured LCP at 4.87 s and FCP at 2.45 s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse, DevTools trace, layout observer, HAR and image audit",
      "evidence": "Layout observer measured CLS 0.0098 and Lighthouse CLS 0.008, both in the good range.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse, DevTools trace, layout observer, HAR and image audit",
      "evidence": "Lighthouse reported 410 ms TBT; the trace found three long tasks, 206 ms TBT and a longest task of 208.87 ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse, DevTools trace, layout observer, HAR and image audit",
      "evidence": "HAR captured 145 requests and 2.62 MB transferred, including 62 scripts (1.10 MB), 52 images (1.15 MB), and at least nine parser-inserted VeryHigh-priority stylesheets confirmed by DOM CSS links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse, DevTools trace, layout observer, HAR and image audit",
      "evidence": "HAR captured 145 requests and 2.62 MB transferred, including 62 scripts (1.10 MB), 52 images (1.15 MB), and at least nine parser-inserted VeryHigh-priority stylesheets confirmed by DOM CSS links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus semantic, focus, target, image and zoom probes",
      "evidence": "Lighthouse failed button-name (4 elements) and link-name (2 elements); the scores probe found multiple 16–35 px buttons with empty text and null/empty aria-label.",
      "pathIds": [
        "scores"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/scores-probe.json",
        "evidence/home-quality-probe.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility plus semantic, focus, target, image and zoom probes",
      "evidence": "Lighthouse color-contrast audit passed and forced-colors screenshot retained legible text and controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-quality-probe.json",
        "evidence/scores-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus semantic, focus, target, image and zoom probes",
      "evidence": "DOM quality probe found zero H1 elements on the homepage, while article, team, and scores templates each expose one descriptive H1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/article-probe.json",
        "evidence/team-probe.json",
        "evidence/scores-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility plus semantic, focus, target, image and zoom probes",
      "evidence": "Article screenshot shows readable line lengths and hierarchy; narrow screenshots reflow without clipping or horizontal overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-quality-probe.json",
        "evidence/scores-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus semantic, focus, target, image and zoom probes",
      "evidence": "The homepage viewport is width=device-width, initial-scale=1, maximum-scale=1; target probes found 51 sub-24 px controls despite mobile layout itself having no overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-layout-mobile.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices and DOM/assets inspection",
      "evidence": "Lighthouse errors-in-console audit failed with 28 recorded items.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices and DOM/assets inspection",
      "evidence": "The images primitive found 63 of 100 images without width/height, 28 oversized images, 99 legacy-format URLs, and 2 images without responsive sources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse best-practices and DOM/assets inspection",
      "evidence": "Lighthouse BFCache audit passed; no geolocation/notification prompt appeared on load and the page used a valid modern document.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/images.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata probes, robots inspection and raw/rendered discoverability comparison",
      "evidence": "Home, article, scores and team probes all found descriptive titles and meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata probes, robots inspection and raw/rendered discoverability comparison",
      "evidence": "Real href links, viewport metadata, indexable robots policy and robots.txt Allow were directly observed; Lighthouse SEO was 92.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata probes, robots inspection and raw/rendered discoverability comparison",
      "evidence": "Canonical, 70 hreflang links, HTTP 200 and non-noindex robots signals were present; robots.txt points to localized sitemaps.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata probes, robots inspection and raw/rendered discoverability comparison",
      "evidence": "Article probe found JSON-LD plus Open Graph; team probe found four JSON-LD blocks; metadata matched visible content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets, HAR and platform probes",
      "evidence": "Headers primitive found no Strict-Transport-Security header; CSP script-src allows both unsafe-inline and unsafe-eval.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets, HAR and platform probes",
      "evidence": "Consent copy names 252 technology partners; network evidence found six third-party origins, while the only observed cookie used SameSite=None for 365 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets, HAR and platform probes",
      "evidence": "No permission prompt or password form appeared on audited public paths; permissions policy disables geolocation/camera/microphone by default.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets, HAR and platform probes",
      "evidence": "Headers primitive found no Strict-Transport-Security header; CSP script-src allows both unsafe-inline and unsafe-eval.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "No-JS discoverability, platform/manifest probe and deliberate 404 journey",
      "evidence": "Raw-vs-rendered comparison found 77% homepage and 95% article content coverage without JavaScript; neither is a JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/error-mobile.png",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "No-JS discoverability, platform/manifest probe and deliberate 404 journey",
      "evidence": "Mobile navigation, article and scores surfaces rendered without clipped overlays outside the separately identified consent wall.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/error-mobile.png",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "No-JS discoverability, platform/manifest probe and deliberate 404 journey",
      "evidence": "DOM links site.webmanifest, but the platform probe found zero service-worker registrations and could not parse a manifest payload.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "No-JS discoverability, platform/manifest probe and deliberate 404 journey",
      "evidence": "The deliberate invalid route displayed an explicit 404 recovery page with a Homepage link.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/error-mobile.png",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "medium",
      "method": "lang/dir/hreflang/logical CSS and localized-route inspection",
      "evidence": "html lang=en-GB, dir=ltr, 70 hreflang links and logical CSS properties were observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "lang/dir/hreflang/logical CSS and localized-route inspection",
      "evidence": "Localized /en-gb routing and relative time labels were rendered without hand-formatted ambiguous numeric dates on sampled paths.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "medium",
      "method": "lang/dir/hreflang/logical CSS and localized-route inspection",
      "evidence": "Sampled content uses relative times and locale-specific routes; no ambiguous stored local timestamp was exposed in the audited paths.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-recon.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Consent/commercial screenshots and public-flow form inspection",
      "evidence": "Load screenshots show two primary choices: accept personalized advertising for free or “Reject & Pay”; no free reject-all control is visible despite 252 technology partners.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article.png",
        "evidence/scores-mobile.png"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative-path applicability review",
      "evidence": "No authored form submission is part of the representative public news, article, score, team or error journeys; the consent UI is a separate vendor flow already judged for deceptive design.",
      "reason": "No authored form submission is part of the representative public news, article, score, team or error journeys; the consent UI is a separate vendor flow already judged for deceptive design.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative-path applicability review",
      "evidence": "No address, payment, sign-in or sign-up input flow was present in the representative public journeys, so autocomplete assistance is not applicable to these paths.",
      "reason": "No address, payment, sign-in or sign-up input flow was present in the representative public journeys, so autocomplete assistance is not applicable to these paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Consent/commercial screenshots and public-flow form inspection",
      "evidence": "Load screenshots show two primary choices: accept personalized advertising for free or “Reject & Pay”; no free reject-all control is visible despite 252 technology partners.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article.png",
        "evidence/scores-mobile.png"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "HAR, image, trace and tracker evidence",
      "evidence": "The images primitive found 63 of 100 images without width/height, 28 oversized images, 99 legacy-format URLs, and 2 images without responsive sources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR, image, trace and tracker evidence",
      "evidence": "Lighthouse reported 410 ms TBT; the trace found three long tasks, 206 ms TBT and a longest task of 208.87 ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR, image, trace and tracker evidence",
      "evidence": "HAR measured 2.62 MB across 145 requests; consent JS alone was about 95 KB, with six third-party origins and 12 consent-host requests.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "issues",
      "confidence": "high",
      "method": "Discoverability and DOM/platform capability inspection",
      "evidence": "Discoverability is strong (77% homepage, 95% article) and metadata is rich, but DOM/platform probes expose no WebMCP or agent-tool registration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/home-quality-probe.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative-path applicability review",
      "evidence": "The audited pages publish server-rendered editorial/scores content and expose no private user-authored summarisation task where on-device inference would materially improve privacy or latency.",
      "reason": "The audited pages publish server-rendered editorial/scores content and expose no private user-authored summarisation task where on-device inference would materially improve privacy or latency.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Heap baseline and post-scroll summary comparison",
      "evidence": "After ten repeated full-feed scroll cycles, heap self-size was 34,284,616 bytes versus baseline 34,317,717 bytes and node count fell from 563,460 to 561,138.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Heap baseline and post-scroll summary comparison",
      "evidence": "Baseline heap self-size was 34.3 MB on the data-rich scores page, proportionate to the rendered feed and stable after exercise.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Heap baseline and post-scroll summary comparison",
      "evidence": "No Detached* constructor appeared among the retained top constructors and total nodes decreased after repeated scrolling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03",
        "F04"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F16"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13",
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F08"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F08",
        "F06",
        "F18"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Localized homepage and primary news-discovery surface; represents the global shell, navigation, cards, consent and advertising.",
      "url": "https://www.goal.com/en-gb",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark/light",
        "prefers-reduced-motion: reduce",
        "forced-colors: active"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Current long-form/list article; represents editorial reading, article metadata and server rendering.",
      "url": "https://www.goal.com/en-gb/lists/battles-decide-2026-world-cup-final-spain-argentina-lamine-yamal-lionel-messi/blt953d562a23bf325f",
      "conditions": [
        "desktop",
        "JavaScript disabled crawler comparison"
      ],
      "result": "issues"
    },
    {
      "id": "scores",
      "description": "Live scores surface; represents the primary interactive sports-data journey and repeated scrolling.",
      "url": "https://www.goal.com/en-gb/live-scores",
      "conditions": [
        "viewport: 360x800",
        "heap baseline and repeated scroll"
      ],
      "result": "issues"
    },
    {
      "id": "team",
      "description": "Arsenal team overview; represents entity/detail pages with standings and news.",
      "url": "https://www.goal.com/en-gb/team/arsenal/4dsgumo7d4zupm2ugsvm4zm4d",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "error",
      "description": "Deliberately invalid route; represents HTTP/navigation failure recovery.",
      "url": "https://www.goal.com/en-gb/this-route-does-not-exist-audit",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "critical",
      "confidence": "high",
      "pathId": "article",
      "url": "https://www.goal.com/en-gb/lists/battles-decide-2026-world-cup-final-spain-argentina-lamine-yamal-lionel-messi/blt953d562a23bf325f",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "summary": "A full-page consent/pay wall obscures the primary article before any interaction.",
      "evidence": "Desktop article screenshot shows an 870×676 consent surface over dimmed editorial content; the mobile scores screenshot is entirely occupied by the same choice.",
      "artifacts": [
        "evidence/article.png",
        "evidence/scores-mobile.png",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Keep core content visible and offer a compact, dismissible consent choice with equally prominent accept and reject controls; use a semantic dialog only when true modality is required.",
      "effort": "medium"
    },
    {
      "id": "F02",
      "severity": "high",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "summary": "The consent flow presents “Accept All & Continue” as the only free path; rejection is coupled to a £3.49 monthly payment.",
      "evidence": "Load screenshots show two primary choices: accept personalized advertising for free or “Reject & Pay”; no free reject-all control is visible despite 252 technology partners.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article.png",
        "evidence/scores-mobile.png"
      ],
      "suggestedFix": "Provide a free, equally prominent reject-all option and move the optional ad-free subscription into a separate, clearly described purchase flow.",
      "effort": "medium"
    },
    {
      "id": "F03",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "summary": "The site forces its stored dark theme instead of following the system light/dark preference on first visit.",
      "evidence": "Dark and light emulation screenshots are byte-identical (660,976 bytes each); the DOM probe reports theme=\"dark\" and computed colorScheme=\"normal\".",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-light.png",
        "evidence/home-quality-probe.json"
      ],
      "suggestedFix": "Default to prefers-color-scheme, declare color-scheme: light dark, and only override it after an explicit user theme choice.",
      "effort": "small"
    },
    {
      "id": "F04",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Indefinite pulse animations continue when reduced motion is requested.",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() still reported running pulse1 and pulse2 animations with 3,000 ms duration and unbounded iterations.",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "suggestedFix": "Disable non-essential pulsing and auto-motion inside @media (prefers-reduced-motion: reduce), retaining only instant state changes.",
      "effort": "small"
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "summary": "The homepage misses the good LCP range by a wide margin.",
      "evidence": "Lighthouse measured LCP at 14.0 s (performance 47); the independent trace measured LCP at 4.87 s and FCP at 2.45 s.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "suggestedFix": "Prioritize the LCP image/content, reduce document latency and competing work, and verify LCP below 2.5 s on mobile.",
      "effort": "large"
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "summary": "Startup JavaScript blocks the main thread.",
      "evidence": "Lighthouse reported 410 ms TBT; the trace found three long tasks, 206 ms TBT and a longest task of 208.87 ms.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Profile the long tasks, split work below 50 ms, defer non-critical hydration/ads, and schedule low-priority work after the main content.",
      "effort": "large"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "summary": "The initial load has a large fragmented critical path.",
      "evidence": "HAR captured 145 requests and 2.62 MB transferred, including 62 scripts (1.10 MB), 52 images (1.15 MB), and at least nine parser-inserted VeryHigh-priority stylesheets confirmed by DOM CSS links.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Consolidate and inline only critical CSS, defer non-critical styles/scripts, reduce initial route chunks, and gate consent/ad code until needed.",
      "effort": "large"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "summary": "Image delivery is frequently oversized or lacks intrinsic dimensions.",
      "evidence": "The images primitive found 63 of 100 images without width/height, 28 oversized images, 99 legacy-format URLs, and 2 images without responsive sources.",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Emit intrinsic dimensions and responsive srcset/sizes, request display-appropriate CDN widths, and negotiate AVIF/WebP while preserving fallbacks.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "Transport is HTTPS, but HSTS is absent and CSP allows unsafe script execution.",
      "evidence": "Headers primitive found no Strict-Transport-Security header; CSP script-src allows both unsafe-inline and unsafe-eval.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Deploy HSTS after subdomain readiness and migrate scripts to nonces/hashes so unsafe-inline and unsafe-eval can be removed.",
      "effort": "large"
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "summary": "The default experience exposes a large partner/third-party surface before a humane consent choice.",
      "evidence": "Consent copy names 252 technology partners; network evidence found six third-party origins, while the only observed cookie used SameSite=None for 365 days.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Minimize partners and pre-consent calls, document necessity per vendor, shorten cookie lifetime, and only load optional analytics/ads after freely given consent.",
      "effort": "large"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "The homepage emits numerous browser console errors.",
      "evidence": "Lighthouse errors-in-console audit failed with 28 recorded items.",
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Triage and remove the production console errors, beginning with failed requests and uncaught application/third-party exceptions.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "pathId": "scores",
      "url": "https://www.goal.com/en-gb/live-scores",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Icon-only controls and links lack accessible names.",
      "evidence": "Lighthouse failed button-name (4 elements) and link-name (2 elements); the scores probe found multiple 16–35 px buttons with empty text and null/empty aria-label.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/scores-probe.json",
        "evidence/home-quality-probe.json"
      ],
      "suggestedFix": "Give every icon control a stable accessible name using visible text or aria-label, and ensure linked card images inherit the story title.",
      "effort": "small"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "The homepage has no H1 and begins its content hierarchy at H2/H3.",
      "evidence": "DOM quality probe found zero H1 elements on the homepage, while article, team, and scores templates each expose one descriptive H1.",
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/article-probe.json",
        "evidence/team-probe.json",
        "evidence/scores-probe.json"
      ],
      "suggestedFix": "Add a single descriptive homepage H1, visually integrated with the lead section, and preserve a logical nested heading order.",
      "effort": "small"
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "pathId": "scores",
      "url": "https://www.goal.com/en-gb/live-scores",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Many interactive targets are below comfortable touch size.",
      "evidence": "The home probe counted 51 visible controls below 24 px in one dimension; the live-scores probe measured date/action buttons around 35.7×32 px and several icon buttons at 16×16 px.",
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/scores-probe.json"
      ],
      "suggestedFix": "Expand interactive hit areas to at least 44×44 CSS px where space permits, without enlarging icons, and retain visible :focus-visible styling.",
      "effort": "medium"
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "summary": "The viewport policy limits user zoom and combines with undersized targets.",
      "evidence": "The homepage viewport is width=device-width, initial-scale=1, maximum-scale=1; target probes found 51 sub-24 px controls despite mobile layout itself having no overflow.",
      "artifacts": [
        "evidence/home-quality-probe.json",
        "evidence/home-layout-mobile.json"
      ],
      "suggestedFix": "Remove maximum-scale=1 and verify 200–400% zoom/reflow while increasing target hit areas.",
      "effort": "small"
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "html",
      "summary": "The modal consent surface is not represented by native dialog/popover semantics in the inspected document.",
      "evidence": "A blocking modal is visible in screenshots, but the rendered DOM probe found zero dialog elements, zero popovers and zero details elements.",
      "artifacts": [
        "evidence/article.png",
        "evidence/home-quality-probe.json"
      ],
      "suggestedFix": "Use a native dialog with correctly managed focus for true modality, or a non-modal disclosure when consent need not block reading.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "The site advertises a web manifest but no active service worker or usable manifest payload was observed.",
      "evidence": "DOM links site.webmanifest, but the platform probe found zero service-worker registrations and could not parse a manifest payload.",
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "If app-like installation is intentional, serve a valid manifest and register a small service worker with an offline reading/error fallback; otherwise remove misleading install signals.",
      "effort": "medium"
    },
    {
      "id": "F18",
      "severity": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "summary": "Third-party and consent code consumes a material portion of an already heavy initial load.",
      "evidence": "HAR measured 2.62 MB across 145 requests; consent JS alone was about 95 KB, with six third-party origins and 12 consent-host requests.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Set per-route third-party budgets, defer optional vendors until consent and interaction, and remove partners that do not provide measurable user value.",
      "effort": "large"
    },
    {
      "id": "F19",
      "severity": "low",
      "confidence": "high",
      "pathId": "home",
      "url": "https://www.goal.com/en-gb",
      "principleId": "be-agent-ready",
      "principleCheckId": "structured-agent-capabilities",
      "guidanceId": "agentic-javascript-tools",
      "guidanceCategory": "ai",
      "summary": "Editorial and live-score capabilities are machine-readable as HTML but are not exposed as structured agent tools.",
      "evidence": "Discoverability is strong (77% homepage, 95% article) and metadata is rich, but DOM/platform probes expose no WebMCP or agent-tool registration.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/home-quality-probe.json"
      ],
      "suggestedFix": "Treat this as an emerging opportunity: expose read-only score lookup/search tools with explicit schemas and safe authorization boundaries.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Replace pay-or-track blocking consent with a free, symmetric and dismissible choice",
      "priority": 1,
      "findingIds": [
        "F01",
        "F02",
        "F10",
        "F16"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Bring LCP below 2.5 s by shrinking and reprioritising the initial route",
      "priority": 2,
      "findingIds": [
        "F05",
        "F06",
        "F07"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Restore accessible names, target sizes, heading hierarchy and zoom",
      "priority": 3,
      "findingIds": [
        "F12",
        "F13",
        "F14",
        "F15"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Harden transport policy with HSTS and nonce/hash-based CSP",
      "priority": 4,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Optimize responsive images and set a third-party transfer budget",
      "priority": 5,
      "findingIds": [
        "F08",
        "F18"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Follow system theme and remove non-essential motion under reduced-motion",
      "priority": 6,
      "findingIds": [
        "F03",
        "F04"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Eliminate production console errors",
      "priority": 7,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Clarify PWA intent and add offline fallback or remove install signals",
      "priority": 8,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Explore safe read-only WebMCP tools for scores and search",
      "priority": 9,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "agentic-javascript-tools",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-19T17-09-41-428Z"
}
