{
  "url": "https://m.flashscore.fr",
  "auditedAt": "2026-07-21T12:20:27.135Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "All 58 catalog checks received one conclusive outcome across four representative mobile templates.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered legacy mobile MPA with client advertising/consent scripts",
    "notes": "Public French live-score site. Four distinct templates audited; alternate sports and repeated standings templates were de-duplicated."
  },
  "evidenceUsed": [
    "screenshot",
    "dom+computed-styles",
    "evaluate-probe",
    "layout-metrics",
    "HAR",
    "trace",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "Lighthouse",
    "axe-core",
    "Modern Web Guidance 0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "light-dismiss-a-dialog",
    "fluid-scaling",
    "performance",
    "break-up-long-tasks",
    "optimize-image-priority",
    "improve-text-layout-and-legibility",
    "security",
    "privacy",
    "deprioritize-background-fetches"
  ],
  "config": {
    "loaded": false
  },
  "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 screenshot + computed styles",
      "evidence": "The default and prefers-color-scheme: dark screenshots are byte-identical (94,948 bytes), computed color-scheme is normal, and the white content/consent surfaces do not retint.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Reduced-motion probe matched the requested media condition and found zero active document animations.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "emulated screenshot + computed styles",
      "evidence": "Forced-colors screenshot preserved visible text, controls, borders and focus boundaries with system colors.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Navigation is conventional cross-document navigation with stable, fast server-rendered pages; no jarring intermediate state was observed in the core link journey.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No scroll-linked visual effect exists on the audited templates, so there is no scroll implementation to judge.",
      "reason": "No scroll-linked visual effect exists on the audited templates, so there is no scroll implementation to judge.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The audited mobile surface uses native links and scrolling, with no custom pointer/gesture handler fighting platform behaviour.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The compact page uses browser scrolling and persistent top navigation without a JS-driven sticky-header failure; no misleading scroll state was observed.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No tooltip, anchored menu or transient popover was exposed in the representative score journeys.",
      "reason": "No tooltip, anchored menu or transient popover was exposed in the representative score journeys.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Headings, green competition bars and underlined real links preserve clear location and destination cues through drill-down.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Mobile screenshots on home, hockey, match and standings all open with a 350px-wide modal covering the core scores. DOM evidence identifies DIV[role=dialog], not <dialog>.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/hockey-mobile.png",
        "evidence/match-mobile.png",
        "evidence/standings-mobile.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Mobile screenshots on home, hockey, match and standings all open with a 350px-wide modal covering the core scores. DOM evidence identifies DIV[role=dialog], not <dialog>.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/hockey-mobile.png",
        "evidence/match-mobile.png",
        "evidence/standings-mobile.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Underlying pages are dense, content-first score lists with minimal application framing once the separately reported consent wall is dismissed.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Layout on home, hockey and standings reported 390px scrollWidth and clientWidth, with 0px horizontal overflow.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Across three narrow templates, content intrinsically reflowed to 390px without clipping; no reused variable-width component failure was observed.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The modality probe measured most sport/date/score links at only 12px high and score links about 9.8x12px. Programmatic focus on the first link computed outline-style:none; Lighthouse target-size failed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/motion-focus.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The first content headings and links clearly identify Football, Aujourd’hui and Tous les matchs, with direct sport/date filters.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Mobile screenshots on home, hockey, match and standings all open with a 350px-wide modal covering the core scores. DOM evidence identifies DIV[role=dialog], not <dialog>.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/hockey-mobile.png",
        "evidence/match-mobile.png",
        "evidence/standings-mobile.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The score listing exposes Aujourd’hui/Hier/Demain, status filters and a visible RAFRAÎCHIR recovery action.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse + trace + HAR",
      "evidence": "Lighthouse lab LCP was 5.5s and TTI 8.0s. HAR captured 2.27MB/66 requests; 2.09MB and 56 requests were third-party, including 1.46MB of fonts. Render-blocking insight estimated 800ms savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Observed CLS was 0.069 on home and 0.069 on two alternate templates, below the 0.1 good threshold.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse + trace + HAR",
      "evidence": "Trace recorded zero long tasks and 0ms total blocking time; Lighthouse TBT was 41ms.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse + trace + HAR",
      "evidence": "Lighthouse lab LCP was 5.5s and TTI 8.0s. HAR captured 2.27MB/66 requests; 2.09MB and 56 requests were third-party, including 1.46MB of fonts. Render-blocking insight estimated 800ms savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse + trace + HAR",
      "evidence": "Lighthouse estimated 382KiB unused JavaScript and 14KiB unused CSS. HAR attributes large scripts to AdSense (190KB), Tag Manager (154KB), and a 139KB first-party vendor bundle.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core + Lighthouse + DOM probe",
      "evidence": "axe reported button-name (critical), color-contrast and frame-title (serious), heading-order and region violations. There are no main/nav/header landmarks, and Lighthouse accessibility scored 0.83.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe-home.json",
        "evidence/platform-probe.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "emulated screenshot + computed styles",
      "evidence": "axe reported button-name (critical), color-contrast and frame-title (serious), heading-order and region violations. There are no main/nav/header landmarks, and Lighthouse accessibility scored 0.83.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe-home.json",
        "evidence/platform-probe.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core + Lighthouse + DOM probe",
      "evidence": "axe reported button-name (critical), color-contrast and frame-title (serious), heading-order and region violations. There are no main/nav/header landmarks, and Lighthouse accessibility scored 0.83. The modality probe measured most sport/date/score links at only 12px high and score links about 9.8x12px. Programmatic focus on the first link computed outline-style:none; Lighthouse target-size failed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe-home.json",
        "evidence/platform-probe.json",
        "evidence/lighthouse-home.json",
        "evidence/motion-focus.json"
      ],
      "findingIds": [
        "F06",
        "F03"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Computed body font-size is 11px and link boxes are generally 12px high; the screenshots show dense underlined navigation and tightly packed score rows.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core + Lighthouse + DOM probe",
      "evidence": "The modality probe measured most sport/date/score links at only 12px high and score links about 9.8x12px. Programmatic focus on the first link computed outline-style:none; Lighthouse target-size failed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/motion-focus.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Lighthouse best-practices scored 1.0 and did not report runtime/console failures in the tested load.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The images primitive found 6/6 images without width/height and 5/6 without alt; Lighthouse unsized-images failed. Five are 1px blank GIFs, so they should be CSS decoration or explicitly empty-alt.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images-home.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Lighthouse estimated 382KiB unused JavaScript and 14KiB unused CSS. HAR attributes large scripts to AdSense (190KB), Tag Manager (154KB), and a 139KB first-party vendor bundle.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM + raw HTML discoverability + site signal fetches",
      "evidence": "Rendered and raw HTML both contain a descriptive French title and meta description.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "DOM + raw HTML discoverability + site signal fetches",
      "evidence": "The recon and platform probes enumerate dozens of match hrefs whose entire text is \"-\", \"1-0\", \"0-0\" or similar, without an accessible label naming the teams.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "DOM + raw HTML discoverability + site signal fetches",
      "evidence": "robots.txt says Sitemap: http://m.flashscore.fr/sitemap.xml, while fetching /sitemap.xml returned HTTP 404. robots also intentionally disallows /match/ and /classement/.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-signals.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "DOM + raw HTML discoverability + site signal fetches",
      "evidence": "Open Graph title, description, type and URL are present and agree with the visible football listing.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "headers/cookies/trackers + HAR",
      "evidence": "Headers evidence found no CSP, HSTS, nosniff, clickjacking defense, Referrer-Policy or Permissions-Policy. Cookies evidence found 5/5 cookies not Secure and SameSite=None, including three lasting 390-400 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers-home.json",
        "evidence/cookies-home.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "headers/cookies/trackers + HAR",
      "evidence": "Trackers evidence found 14 third-party origins and four known tracker domains. HAR recorded 56 third-party requests and 2.09MB third-party transfer versus 10 first-party requests; the consent copy lists 210 partners and precise geolocation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers-home.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No authentication flow or browser permission request was present on the audited mobile surface.",
      "reason": "No authentication flow or browser permission request was present on the audited mobile surface.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "headers/cookies/trackers + HAR",
      "evidence": "Headers evidence found no CSP, HSTS, nosniff, clickjacking defense, Referrer-Policy or Permissions-Policy. Cookies evidence found 5/5 cookies not Secure and SameSite=None, including three lasting 390-400 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers-home.json",
        "evidence/cookies-home.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Discoverability measured 92% raw/rendered word coverage, isJsShell:false, with title and description in server HTML.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Real href navigation to sport, match and standings templates loaded without clipped horizontal overlays at 390px.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The manifest is valid and display:standalone, but navigator.serviceWorker.getRegistrations() returned an empty list; core live data therefore has no observed offline/stale-data fallback.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-signals.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "medium",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The tested match route and refresh/date navigation returned rendered content rather than a blank shell; no broken state was observed in the exercised journey.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The document declares html lang=fr and content reading order is left-to-right as expected for French.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "French day labels, 24-hour match times and score conventions were consistently rendered across listing and standings templates.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "medium",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "No ambiguous zone-bearing event timestamp or DST-sensitive scheduling control was exposed; displayed local match times were internally consistent.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "The first view blocks the product behind consent choices describing personalized ads/content, audience research, development, 210 partners and precise geolocation. Reject is available, but the interruption repeats in clean sessions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No authored user-input form was present on the audited score, match or standings templates.",
      "reason": "No authored user-input form was present on the audited score, match or standings templates.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No authored address, payment, sign-in or sign-up input was present.",
      "reason": "No authored address, payment, sign-in or sign-up input was present.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No checkout, subscription or account-management flow was exposed on this mobile score surface.",
      "reason": "No checkout, subscription or account-management flow was exposed on this mobile score surface.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Only 13KB of image transfer was observed and no image was oversized relative to display; spacer-GIF semantics are separately reported under asset hygiene.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Trace found no long tasks and HAR showed no media/autoplay; background transfer was primarily attributable to the separately reported ad/privacy footprint.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "headers/cookies/trackers + HAR",
      "evidence": "Trackers evidence found 14 third-party origins and four known tracker domains. HAR recorded 56 third-party requests and 2.09MB third-party transfer versus 10 first-party requests; the consent copy lists 210 partners and precise geolocation. Lighthouse lab LCP was 5.5s and TTI 8.0s. HAR captured 2.27MB/66 requests; 2.09MB and 56 requests were third-party, including 1.46MB of fonts. Render-blocking insight estimated 800ms savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers-home.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-mobile.png",
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F12",
        "F04"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "The legacy mobile score reader exposes no declared agent-facing intent or transactional capability; emerging WebMCP support is treated as out of scope rather than a failure.",
      "reason": "The legacy mobile score reader exposes no declared agent-facing intent or transactional capability; emerging WebMCP support is treated as out of scope rather than a failure.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No summarisation or language-model task is part of the compact live-score experience, so on-device inference is not currently applicable.",
      "reason": "No summarisation or language-model task is part of the compact live-score experience, so on-device inference is not currently applicable.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "representative screenshots + DOM/evaluate/layout probes",
      "evidence": "Ten repeated full-page scroll cycles changed heap self size by only 18KB (0.10%) and nodes by 597 on independent fresh-load snapshots; no material retained growth was established.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/heap-comparison.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "heap baseline/post summaries",
      "evidence": "A fresh-load heap had 309,185 nodes and 18.25MB self size. Repeated scrolling grew only 0.10%, so no leak was established, but the bounded footprint remains high and the consent vendor UI adds hundreds of vendor headings to the DOM.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-comparison.json",
        "evidence/heap-baseline.heapsnapshot",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "heap baseline/post summaries",
      "evidence": "Post-scroll heap totals remained effectively flat versus baseline, with no evidence of unbounded accumulation; independent sessions make this medium confidence.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/heap-comparison.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "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": [
        "F02"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F03",
        "F07"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F05"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F12",
        "F04"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The legacy mobile score reader exposes no declared agent-facing intent or transactional capability; emerging WebMCP support is treated as out of scope rather than a failure. No summarisation or language-model task is part of the compact live-score experience, so on-device inference is not currently applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Football live-score listing and primary score-discovery journey; entry template, consent gate, navigation, responsive layout and load behaviour.",
      "url": "https://m.flashscore.fr/",
      "conditions": [
        "390x844 mobile",
        "default consent state",
        "dark scheme",
        "forced colors",
        "reduced motion",
        "keyboard focus",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "sport-listing",
      "description": "Hockey listing, representing alternate-sport list templates; audited to avoid silently treating football as the whole site.",
      "url": "https://m.flashscore.fr/hockey/",
      "conditions": [
        "390x844 mobile",
        "default consent state"
      ],
      "result": "issues"
    },
    {
      "id": "match-detail",
      "description": "Individual match detail, representing the core drill-down journey from a score link.",
      "url": "https://m.flashscore.fr/match/OQpbl1qK/",
      "conditions": [
        "390x844 mobile",
        "default consent state"
      ],
      "result": "issues"
    },
    {
      "id": "standings",
      "description": "Competition standings, representing dense tabular/ranking content. Other sports and standings sharing these templates were de-duplicated; account, checkout and authored forms were not present on the mobile surface.",
      "url": "https://m.flashscore.fr/classement/KOMy8oi5/rq3pu5Rb/",
      "conditions": [
        "390x844 mobile",
        "default consent state"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site is hard-coded to a light presentation and does not honor the system dark preference.",
      "evidence": "The default and prefers-color-scheme: dark screenshots are byte-identical (94,948 bytes), computed color-scheme is normal, and the white content/consent surfaces do not retint.",
      "suggestedFix": "Declare color-scheme: light dark and use prefers-color-scheme or light-dark() for page, text, link, border and consent-dialog tokens.",
      "effort": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dark.png"
      ]
    },
    {
      "id": "F02",
      "severity": "high",
      "confidence": "high",
      "summary": "A full-screen consent wall obscures scores on every representative route, and it is implemented as a custom div role=dialog rather than a native dialog.",
      "evidence": "Mobile screenshots on home, hockey, match and standings all open with a 350px-wide modal covering the core scores. DOM evidence identifies DIV[role=dialog], not <dialog>.",
      "suggestedFix": "Defer non-essential consent UI until necessary or use a compact content-first notice; implement the modal with <dialog>, explicit focus management and platform dismissal while keeping accept/reject equally easy.",
      "effort": "large",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/hockey-mobile.png",
        "evidence/match-mobile.png",
        "evidence/standings-mobile.png",
        "evidence/home-dom.json"
      ]
    },
    {
      "id": "F03",
      "severity": "high",
      "confidence": "high",
      "summary": "Core navigation and score links are far below mobile target-size guidance, and keyboard focus is not visibly styled.",
      "evidence": "The modality probe measured most sport/date/score links at only 12px high and score links about 9.8x12px. Programmatic focus on the first link computed outline-style:none; Lighthouse target-size failed.",
      "suggestedFix": "Give interactive rows and navigation links at least 44x44 CSS px hit areas or equivalent spacing, and add a clear :focus-visible ring with sufficient contrast.",
      "effort": "medium",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/motion-focus.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "id": "F04",
      "severity": "high",
      "confidence": "high",
      "summary": "Mobile loading is slow and resource delivery is dominated by fonts and advertising dependencies.",
      "evidence": "Lighthouse lab LCP was 5.5s and TTI 8.0s. HAR captured 2.27MB/66 requests; 2.09MB and 56 requests were third-party, including 1.46MB of fonts. Render-blocking insight estimated 800ms savings.",
      "suggestedFix": "Subset/self-host only required fonts, remove the oversized Google Symbols variants, defer advertising/consent code until after core scores, reduce dependency chains, and prioritize the actual LCP resource.",
      "effort": "large",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "id": "F05",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page ships substantial avoidable code for a compact text score listing.",
      "evidence": "Lighthouse estimated 382KiB unused JavaScript and 14KiB unused CSS. HAR attributes large scripts to AdSense (190KB), Tag Manager (154KB), and a 139KB first-party vendor bundle.",
      "suggestedFix": "Code-split by route and feature, load analytics/ads conditionally after consent, and eliminate duplicate or unused vendor code from the initial path.",
      "effort": "large",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F06",
      "severity": "high",
      "confidence": "high",
      "summary": "Automated accessibility testing found missing names, insufficient contrast, an untitled frame and broken heading/landmark structure.",
      "evidence": "axe reported button-name (critical), color-contrast and frame-title (serious), heading-order and region violations. There are no main/nav/header landmarks, and Lighthouse accessibility scored 0.83.",
      "suggestedFix": "Name every button and frame, repair contrast, use semantic header/nav/main landmarks, and make heading levels sequential; verify again with axe and a keyboard/screen-reader pass.",
      "effort": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/axe-home.json",
        "evidence/platform-probe.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "summary": "Core score content is rendered at an unusually small 11px, with 12px-high links that impair reading and scanning.",
      "evidence": "Computed body font-size is 11px and link boxes are generally 12px high; the screenshots show dense underlined navigation and tightly packed score rows.",
      "suggestedFix": "Increase base and score-row typography, line height and spacing using fluid type while retaining the compact information hierarchy.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "improve-text-layout-and-legibility",
      "guidanceCategory": "css",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "summary": "Images lack intrinsic dimensions and most decorative image elements have no alt policy.",
      "evidence": "The images primitive found 6/6 images without width/height and 5/6 without alt; Lighthouse unsized-images failed. Five are 1px blank GIFs, so they should be CSS decoration or explicitly empty-alt.",
      "suggestedFix": "Set width/height or aspect-ratio for content images; replace tracking/decorative spacer GIFs with CSS where possible and use alt=\"\" when they remain decorative.",
      "effort": "small",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/images-home.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "summary": "Many match links expose only a score or hyphen as link text, making destinations ambiguous to crawlers and assistive users.",
      "evidence": "The recon and platform probes enumerate dozens of match hrefs whose entire text is \"-\", \"1-0\", \"0-0\" or similar, without an accessible label naming the teams.",
      "suggestedFix": "Include team names in each anchor accessible name and visible row association, while retaining the score as supplemental text.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/recon.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "id": "F10",
      "severity": "medium",
      "confidence": "high",
      "summary": "Indexing signals are internally inconsistent: robots advertises an HTTP sitemap URL that returns 404 over HTTPS.",
      "evidence": "robots.txt says Sitemap: http://m.flashscore.fr/sitemap.xml, while fetching /sitemap.xml returned HTTP 404. robots also intentionally disallows /match/ and /classement/.",
      "suggestedFix": "Publish a valid HTTPS sitemap and reference it consistently from robots.txt; review whether blocking match and standings pages matches the intended public-search strategy.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/site-signals.json"
      ]
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "summary": "The main response lacks baseline browser security headers, and all observed cookies omit Secure.",
      "evidence": "Headers evidence found no CSP, HSTS, nosniff, clickjacking defense, Referrer-Policy or Permissions-Policy. Cookies evidence found 5/5 cookies not Secure and SameSite=None, including three lasting 390-400 days.",
      "suggestedFix": "Add HSTS, a restrictive CSP (including frame-ancestors), nosniff, Referrer-Policy and a minimal Permissions-Policy; mark HTTPS cookies Secure and use the least-permissive SameSite/lifetime compatible with their purpose.",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/headers-home.json",
        "evidence/cookies-home.json"
      ]
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "summary": "The default load has a disproportionate third-party tracking and advertising footprint.",
      "evidence": "Trackers evidence found 14 third-party origins and four known tracker domains. HAR recorded 56 third-party requests and 2.09MB third-party transfer versus 10 first-party requests; the consent copy lists 210 partners and precise geolocation.",
      "suggestedFix": "Minimize vendors and purposes, block analytics/advertising requests before affirmative consent, batch essential telemetry, and document a strict per-route third-party byte/request budget.",
      "effort": "large",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/trackers-home.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "summary": "The app-like live-score surface advertises a manifest but provides no registered service worker or tested offline fallback.",
      "evidence": "The manifest is valid and display:standalone, but navigator.serviceWorker.getRegistrations() returned an empty list; core live data therefore has no observed offline/stale-data fallback.",
      "suggestedFix": "Register a service worker, cache the shell and last-known scores, and show explicit stale/offline state with retry rather than presenting current-looking stale data.",
      "effort": "large",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/site-signals.json"
      ]
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent defaults create a nagging wall and propose unusually broad processing rather than a minimized choice.",
      "evidence": "The first view blocks the product behind consent choices describing personalized ads/content, audience research, development, 210 partners and precise geolocation. Reject is available, but the interruption repeats in clean sessions.",
      "suggestedFix": "Use privacy-preserving defaults, drastically reduce purposes/vendors, persist rejection reliably, and present optional personalization in context without blocking score access.",
      "effort": "large",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/recon.json"
      ]
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "medium",
      "summary": "The in-memory page footprint is unusually large for a server-rendered text score list.",
      "evidence": "A fresh-load heap had 309,185 nodes and 18.25MB self size. Repeated scrolling grew only 0.10%, so no leak was established, but the bounded footprint remains high and the consent vendor UI adds hundreds of vendor headings to the DOM.",
      "suggestedFix": "Do not materialize the full vendor preference tree until requested; virtualize or detach hidden lists, lazy-load consent detail, and profile retained DOM/JS after rejection.",
      "effort": "medium",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.flashscore.fr/",
      "artifacts": [
        "evidence/heap-comparison.json",
        "evidence/heap-baseline.heapsnapshot",
        "evidence/recon.json"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Replace the blocking consent/vendor experience with a minimized, privacy-preserving and semantic flow",
      "priority": 1,
      "findingIds": [
        "F02",
        "F12",
        "F14"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Add baseline security headers and secure cookie attributes",
      "priority": 2,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Cut initial third-party/font/script weight to restore good mobile LCP",
      "priority": 3,
      "findingIds": [
        "F04",
        "F05",
        "F12"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Repair names, landmarks, contrast, headings, focus and target sizes",
      "priority": 4,
      "findingIds": [
        "F03",
        "F06",
        "F07",
        "F09"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Add system dark mode tokens",
      "priority": 5,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Publish consistent HTTPS sitemap/indexing signals",
      "priority": 6,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Add an offline/stale score fallback",
      "priority": 7,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Reduce hidden consent DOM/heap footprint",
      "priority": 8,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Set image dimensions and decorative alt policy",
      "priority": 9,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    }
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Home at 390x844 with consent wall",
      "condition": "390x844 default",
      "findingIds": [
        "F01",
        "F02",
        "F07",
        "F12",
        "F14"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Home under dark preference remains light",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "Home under forced colors",
      "condition": "forced-colors: active",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/hockey-mobile.png",
      "caption": "Hockey listing template",
      "condition": "390x844",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/match-mobile.png",
      "caption": "Match detail template",
      "condition": "390x844",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/standings-mobile.png",
      "caption": "Standings template",
      "condition": "390x844",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered DOM and computed styles",
      "findingIds": [
        "F02",
        "F07"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/recon.json",
      "caption": "Route, metadata and consent-dialog recon",
      "findingIds": [
        "F09",
        "F14",
        "F15"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "Mobile overflow, CLS and long-task layout evidence",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Network archive",
      "findingIds": [
        "F04",
        "F12"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact HAR summary",
      "findingIds": [
        "F04",
        "F05",
        "F12"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools load trace",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact performance trace summary",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability-home.json",
      "caption": "Raw HTML versus rendered content",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-home-rendered.png",
      "caption": "Rendered browser view",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-home-crawler.png",
      "caption": "JavaScript-disabled crawler view",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "Lighthouse 13.4.1 report",
      "findingIds": [
        "F03",
        "F04",
        "F05",
        "F06",
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/axe-home.json",
      "caption": "axe-core accessibility results",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Document, semantic, target-size and CSS feature probe",
      "findingIds": [
        "F03",
        "F06",
        "F07",
        "F09"
      ]
    },
    {
      "type": "other",
      "path": "evidence/motion-focus.json",
      "caption": "Reduced-motion and keyboard-focus probe",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers-home.json",
      "caption": "Security response headers",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies-home.json",
      "caption": "Cookie flags and lifetimes",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers-home.json",
      "caption": "Third-party tracker origins",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images-home.json",
      "caption": "Image dimensions, format and alt audit",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/site-signals.json",
      "caption": "robots, sitemap, manifest and service-worker signals",
      "findingIds": [
        "F10",
        "F13"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Baseline heap snapshot",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.heapsnapshot",
      "caption": "Heap after ten repeated scroll cycles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/heap-comparison.json",
      "caption": "Readable heap comparison totals",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-search.json",
      "caption": "Pinned MWG search for every atomic check",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.json",
      "caption": "Full retrieved guidance used for findings",
      "findingIds": []
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 4,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T12-20-27-135Z"
}
