{
  "url": "https://www.flashscore.mobi",
  "auditedAt": "2026-07-19T20:45:00.000Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit of five representative paths and all 58 registered checks.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered HTML with deferred JavaScript and Google ad/consent integrations",
    "notes": "A mobile-first live-score MPA. Public content is mostly server-rendered; consent and advertising inject substantial client UI."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "lighthouse",
    "axe-core",
    "heap-summary",
    "robots/sitemap/manifest fetch"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-content-dark.png",
      "caption": "home content dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-probe.json",
      "caption": "preferences probe",
      "findingIds": [
        "F01",
        "F03"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "lighthouse summary",
      "findingIds": [
        "F02",
        "F16"
      ]
    },
    {
      "type": "other",
      "path": "evidence/axe.json",
      "caption": "axe",
      "findingIds": [
        "F02",
        "F12",
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/match-recon.json",
      "caption": "match recon",
      "findingIds": [
        "F17",
        "F23"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-content.png",
      "caption": "home content",
      "findingIds": [
        "F04",
        "F05",
        "F14"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout.json",
      "caption": "home layout",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "other",
      "path": "evidence/standings-recon.json",
      "caption": "standings recon",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon",
      "findingIds": [
        "F06",
        "F19"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/match-layout-320.json",
      "caption": "match layout 320",
      "findingIds": [
        "F07",
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/accessibility-probe.json",
      "caption": "accessibility probe",
      "findingIds": [
        "F08",
        "F13",
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/error-state.json",
      "caption": "error state",
      "findingIds": [
        "F09"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F11",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "lighthouse",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "discoverability",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "discoverability rendered",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/manifest.json",
      "caption": "manifest",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/pwa-probe.json",
      "caption": "pwa probe",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.json",
      "caption": "heap post",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-diff.json",
      "caption": "heap diff",
      "findingIds": []
    }
  ],
  "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 prefers-color-scheme: dark screenshot and computed-style probe",
      "evidence": "Under dark preference, body remained rgb(255,255,255), color-scheme was normal, and no dark-theme CSS response was detected.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-content-dark.png",
        "evidence/preferences-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "getAnimations() under prefers-reduced-motion: reduce",
      "evidence": "The preference matched and document.getAnimations() returned no animations, so there was no non-essential motion to suppress.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "prefers-contrast: more computed-style probe plus axe/Lighthouse contrast audits",
      "evidence": "The contrast preference matched but the page exposed no contrast adaptation; Lighthouse and axe found color-contrast failures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-probe.json",
        "evidence/lighthouse-summary.json",
        "evidence/axe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "CSS/platform probe and representative MPA navigation review",
      "evidence": "No view-transition CSS or API use was found; navigating listing to detail uses abrupt full-document swaps.",
      "pathIds": [
        "home",
        "match-detail"
      ],
      "artifacts": [
        "evidence/preferences-probe.json",
        "evidence/match-recon.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "The audited templates contain no parallax, scrollytelling, reveal, or other scroll-linked motion to implement.",
      "reason": "The audited templates contain no parallax, scrollytelling, reveal, or other scroll-linked motion to implement."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "The audited experience exposes conventional links and tables, with no swipe, pull, carousel, or gesture-driven control.",
      "reason": "The audited experience exposes conventional links and tables, with no swipe, pull, carousel, or gesture-driven control."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "medium",
      "method": "Long-page screenshots and CSS probe",
      "evidence": "The 7,499px results feed has no sticky position-aware navigation, shrinking header, or progress/scrollability cue; CSS contains no scroll-state treatment.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-content.png",
        "evidence/home-layout.json",
        "evidence/preferences-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No site-owned tooltip, popover, or anchored menu was present on the representative templates.",
      "reason": "No site-owned tooltip, popover, or anchored menu was present on the representative templates."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Visual and DOM review across listing, match, and standings templates",
      "evidence": "Breadcrumb-like green section headers, current filters in bold/red, score links, tabs, Back, and Top links provide explicit orientation and next steps.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-content.png",
        "evidence/match-recon.json",
        "evidence/standings-recon.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Fresh-load mobile and desktop screenshots, then refusal interaction",
      "evidence": "A full-viewport consent modal obscures the scores on every fresh profile; after refusal a second “How your data is used” overlay and bottom discovery panel still cover the feed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png",
        "evidence/home-content.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "DOM inspection of overlays",
      "evidence": "Consent surfaces are role=dialog DIVs rather than native dialog/popover primitives; four dialog-like DIVs are present, with large hidden preference/vendor DOM trees.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile/desktop visual review after consent dismissal",
      "evidence": "The underlying product is a compact, content-dense scores list with little decorative application chrome.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-content.png",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Layout primitive at 390px and 320px on representative templates",
      "evidence": "Home has no overflow at 390px, but match detail at a 320px visual viewport used a 370px layout viewport and reported 50px horizontal overflow.",
      "pathIds": [
        "home",
        "match-detail"
      ],
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/match-layout-320.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "medium",
      "method": "CSS feature probe and cross-viewport visual review",
      "evidence": "The simple single-column score rows resize intrinsically at the principal 390px mobile condition; no reused multi-context component required container-specific behavior.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-probe.json",
        "evidence/home-content.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Keyboard focus walk and target-rectangle probe",
      "evidence": "Browser focus outlines were visible, but 409 of 412 interactive targets were under 24px in at least one dimension; primary sport/filter links are about 12px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/accessibility-probe.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport screenshots and heading/link review",
      "evidence": "The page immediately identifies sport/date/filter state and exposes live scores, score links, standings, and refresh controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-content.png",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Listing-to-detail and standings walkthrough",
      "evidence": "A score link resolves to a complete match summary with lineups/stats/commentary/H2H links, and standings resolve to a complete data table without an account wall.",
      "pathIds": [
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/match-recon.json",
        "evidence/standings-recon.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "medium",
      "method": "Invalid-route recovery probe",
      "evidence": "The invalid route displays a generic try-later error with a home link, but has no HTTP-specific explanation, retry action, search, or preserved context.",
      "pathIds": [
        "error-state"
      ],
      "artifacts": [
        "evidence/error-state.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile DevTools trace, layout observer, and Lighthouse corroboration",
      "evidence": "Mobile trace measured LCP 4.49s; layout measured CLS 0.092 on home and 0.170 on 320px match detail, outside the good CLS threshold on detail.",
      "pathIds": [
        "home",
        "match-detail"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout.json",
        "evidence/match-layout-320.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Layout-shift observers on home and match detail",
      "evidence": "Two late shifts produced CLS 0.092 on home and two produced CLS 0.170 on match detail. All 39 inspected images also lacked explicit dimensions.",
      "pathIds": [
        "home",
        "match-detail"
      ],
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/match-layout-320.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F10",
        "F15"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Trace and long-task observers",
      "evidence": "The 10.3s trace and layout observers recorded zero long tasks and 0ms total blocking time.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary confirmed against live script attributes",
      "evidence": "The page transferred 835KB over 40 requests; 30 requests and 652KB were third-party. Scripts were deferred/async, but the stylesheet and a 49KB Google font were blocking candidates, and ad/consent scripts dominated weight.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/platform-probe.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "HAR weight review and Lighthouse diagnostics",
      "evidence": "About 735KB of 835KB transferred was script, dominated by advertising, tag-manager, analytics, and consent code; Lighthouse also reported missing source maps for a large first-party bundle.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core and Lighthouse accessibility audits",
      "evidence": "axe found a critical unnamed .toggle-btn and an untitled iframe; the page also lacked a main landmark and content regions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core and Lighthouse contrast audits",
      "evidence": "Both independent audits reported insufficient foreground/background contrast.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "axe heading/landmark audit and keyboard focus walk",
      "evidence": "The content page has no H1 or main landmark and axe found heading-order and region failures. Focus is visible, but structure does not support efficient assistive navigation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/accessibility-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Computed typography and screenshot review",
      "evidence": "Body text computes to 11px, with dense 12px-high rows and low-contrast grey event metadata, making the long scores feed cramped.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/accessibility-probe.json",
        "evidence/home-content.png"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Narrow reflow layout and target-size probe",
      "evidence": "At 320px the match template overflows by 50px, and 409 of 412 targets are smaller than 24px in at least one dimension.",
      "pathIds": [
        "home",
        "match-detail"
      ],
      "artifacts": [
        "evidence/match-layout-320.json",
        "evidence/accessibility-probe.json"
      ],
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "medium",
      "method": "Lighthouse best-practices console audit",
      "evidence": "Lighthouse did not report an errors-in-console failure during load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "DOM, image primitive, and Lighthouse asset audits",
      "evidence": "Doctype and UTF-8 are valid, but all 39 images lack width/height attributes; 38 blank GIF markers lack alt and Lighthouse reported low-resolution image delivery.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "medium",
      "method": "Lighthouse best-practices and platform probe",
      "evidence": "Lighthouse reported missing source maps for large first-party JavaScript; seven advertising/consent iframes also have empty titles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "Metadata inspection on home, match, and standings",
      "evidence": "Home and standings have descriptive metadata, but match detail reuses the generic homepage description instead of describing France 4–6 England.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/match-recon.json",
        "evidence/standings-recon.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Raw/rendered discoverability diff and DOM link/viewport inspection",
      "evidence": "Core links use real href values, viewport metadata is present, and 94% of rendered content words are in raw server HTML.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "robots.txt, sitemap request, canonical and metadata inspection",
      "evidence": "robots.txt advertises an HTTP sitemap URL that returned 404 and disallows /match/ and /standings/ for general crawlers, limiting indexability of core public detail templates.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/robots.txt",
        "evidence/sitemap.xml",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "medium",
      "method": "JSON-LD and Open Graph inspection",
      "evidence": "No JSON-LD was present for live scores/SportsEvent entities, and og:image points to the site root rather than an image.",
      "pathIds": [
        "home",
        "match-detail"
      ],
      "artifacts": [
        "evidence/recon.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Headers and cookie primitives",
      "evidence": "HTTPS is used, but CSP, HSTS, nosniff, framing protection, Referrer-Policy, and Permissions-Policy are absent. Five cookies are not Secure and use SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Tracker primitive, HAR, and consent-copy review",
      "evidence": "The load contacted 12 third-party origins including four known trackers; 30 requests and 652KB were third-party, while the consent UI states data may be shared with 210 partners and precise geolocation used.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "medium",
      "method": "Load behavior, DOM and script inspection",
      "evidence": "No browser permission prompt or authentication surface appeared on load; passkeys are not applicable to the unauthenticated scores journey.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Security-header and cookie inspection",
      "evidence": "No HSTS, frame-ancestors/X-Frame-Options, Referrer-Policy, or Permissions-Policy was delivered; long-lived analytics/consent cookies use SameSite=None without Secure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML vs rendered DOM and crawler screenshot",
      "evidence": "Raw HTML returned 200 and contained 94% of rendered content words; the crawler screenshot shows the live score list without JavaScript.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png",
        "evidence/discoverability-rendered.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Representative overlay, listing, match, and table review",
      "evidence": "Core content is server-rendered and links remain functional; the consent dialog stays inside the mobile viewport and can be refused.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/match-recon.json",
        "evidence/standings-recon.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Manifest fetch and service-worker registration probe",
      "evidence": "A standalone manifest with icons exists, but navigator.serviceWorker.getRegistrations() returned no registrations, so this app-like live-score site has no offline fallback.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/manifest.json",
        "evidence/pwa-probe.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "medium",
      "method": "Invalid-route failure-state probe",
      "evidence": "A failed route shows only “requested page can’t be displayed, try again later” plus home; it does not distinguish not-found/network states or offer retry/search/context recovery.",
      "pathIds": [
        "error-state"
      ],
      "artifacts": [
        "evidence/error-state.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "medium",
      "method": "HTML/CSS feature inspection",
      "evidence": "html lang=en is correct for visible copy, but the CSS probe found no logical properties and the fixed 370px minimum suggests weak writing-mode/translation resilience.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/preferences-probe.json",
        "evidence/match-layout-320.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "issues",
      "confidence": "medium",
      "method": "Rendered score/date inspection",
      "evidence": "Match detail renders “18.07.2026 23:00” without locale context or a locale-selectable format, despite covering global events.",
      "pathIds": [
        "match-detail"
      ],
      "artifacts": [
        "evidence/match-recon.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "issues",
      "confidence": "medium",
      "method": "Rendered event-time inspection",
      "evidence": "Event time is shown as 23:00 without a time-zone label or indication that it is localized, making global event timing ambiguous.",
      "pathIds": [
        "match-detail"
      ],
      "artifacts": [
        "evidence/match-recon.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "medium",
      "method": "Consent, advertising, and betting visual review",
      "evidence": "Consent and refusal are equally prominent; ads and odds are labeled, and gambling support/18+ text is present. The large vendor footprint is reported separately as privacy/noise, not deceptive wording.",
      "pathIds": [
        "home",
        "sport-listing",
        "match-detail",
        "standings"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/match-recon.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No user-authored form or validation journey exists on the representative scores, match, and standings templates.",
      "reason": "No user-authored form or validation journey exists on the representative scores, match, and standings templates."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No address, payment, sign-in, sign-up, or other user-entry fields exist in the representative product flow.",
      "reason": "No address, payment, sign-in, sign-up, or other user-entry fields exist in the representative product flow."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Match/odds and footer content review",
      "evidence": "Betting links are visibly labeled as odds/Bet now, identify the provider, and the page includes Gamble Responsibly, Gambling Therapy, and 18+ notices; no account or subscription flow is hosted here.",
      "pathIds": [
        "match-detail"
      ],
      "artifacts": [
        "evidence/match-recon.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Image primitive and HAR review",
      "evidence": "All 39 images are PNG/GIF, none use a modern format, all lack dimensions, and 38 below-fold markers are not lazy-loaded. Absolute image bytes are small, but delivery is avoidably dated.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "Trace and long-task observers",
      "evidence": "No long task or ongoing main-thread blocking was recorded; the content architecture is mostly server-rendered and lightweight at runtime.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR third-party byte attribution and tracker inventory",
      "evidence": "Third parties account for 652KB of 835KB and 30 of 40 requests, mostly ads, consent, tag manager, analytics, and a large external font, disproportionate to the small text scores page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F11",
        "F21"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No declared agent-facing or transactional capability is in scope; the emerging WebMCP opportunity is not treated as a failure for this read-only scores site.",
      "reason": "No declared agent-facing or transactional capability is in scope; the emerging WebMCP opportunity is not treated as a failure for this read-only scores site."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No summarisation or language-model feature is part of the observed core task, so on-device inference is not applicable.",
      "reason": "No summarisation or language-model feature is part of the observed core task, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Heap summary before and after 10 consent Learn-more open/close repetitions",
      "evidence": "Post-interaction heap was only 92KB (0.48%) above baseline with 781 additional nodes and no constructor-sized monotonic growth signal, providing no evidence of an unbounded leak.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post.json",
        "evidence/heap-diff.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Heap summary totals judged against page purpose",
      "evidence": "Baseline retained heap was 19.3MB across 326k nodes; script-heavy consent/advertising code is non-trivial but the footprint remained bounded in the repeated interaction sample.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-diff.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Before/after heap constructor comparison",
      "evidence": "The top-constructor diff showed no Detached* constructor growth and only 0.48% total growth after ten disclosure cycles; no accumulating listener/timer signature was observed in available summaries.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post.json",
        "evidence/heap-diff.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F15",
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F02",
        "F13",
        "F14",
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22",
        "F09"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F15",
        "F11",
        "F21"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No declared agent-facing or transactional capability is in scope; the emerging WebMCP opportunity is not treated as a failure for this read-only scores site. No summarisation or language-model feature is part of the observed core task, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage/live scores listing: primary score-discovery journey and shared global shell.",
      "url": "https://www.flashscore.mobi/",
      "conditions": [
        "390x844",
        "1440x900",
        "dark preference",
        "reduced-motion preference",
        "contrast preference",
        "keyboard focus",
        "consent refusal"
      ],
      "result": "issues"
    },
    {
      "id": "sport-listing",
      "description": "Hockey listing: representative alternate sport template; de-duplicates other sport listings.",
      "url": "https://www.flashscore.mobi/hockey/",
      "conditions": [
        "390x844"
      ],
      "result": "issues"
    },
    {
      "id": "match-detail",
      "description": "Finished France–England match: representative event detail, tabs, timeline, odds, and narrow reflow.",
      "url": "https://www.flashscore.mobi/match/b9l0F3Bj/",
      "conditions": [
        "390x844",
        "320x700"
      ],
      "result": "issues"
    },
    {
      "id": "standings",
      "description": "NPL Northern NSW standings: representative structured table/detail template.",
      "url": "https://www.flashscore.mobi/standings/vTGYcJ1T/ddEdaaCc/",
      "conditions": [
        "390x844"
      ],
      "result": "issues"
    },
    {
      "id": "error-state",
      "description": "Invalid URL: representative recovery/failure state.",
      "url": "https://www.flashscore.mobi/this-path-does-not-exist-audit",
      "conditions": [
        "390x844"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "Hard-coded light theme ignores dark preference",
      "evidence": "The dark-mode probe kept a white body and normal color-scheme.",
      "suggestedFix": "Declare color-scheme and supply preference-driven dark surface/text tokens.",
      "guidanceId": "dark-mode",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "artifacts": [
        "evidence/home-content-dark.png",
        "evidence/preferences-probe.json"
      ]
    },
    {
      "id": "F02",
      "severity": "high",
      "confidence": "high",
      "summary": "Contrast is insufficient and does not adapt to user preference",
      "evidence": "Axe/Lighthouse report contrast failures and prefers-contrast caused no adaptation.",
      "suggestedFix": "Meet WCAG contrast ratios and add forced-colors/prefers-contrast-safe styles.",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "effort": "medium",
      "principleId": "be-inclusive",
      "artifacts": [
        "evidence/axe.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "summary": "Route changes are abrupt full-document swaps",
      "evidence": "No View Transition styles were found for listing-to-detail navigation.",
      "suggestedFix": "Add progressive cross-document View Transitions with reduced-motion handling.",
      "guidanceId": "cross-document-transitions",
      "effort": "small",
      "principleId": "implement-natural-interactions",
      "artifacts": [
        "evidence/preferences-probe.json"
      ]
    },
    {
      "id": "F04",
      "severity": "medium",
      "confidence": "high",
      "summary": "Long result feeds lack scroll-aware orientation",
      "evidence": "A 7,499px feed has no sticky current filter/header or scroll-position affordance.",
      "suggestedFix": "Keep compact context/filter chrome visible or add a lightweight scroll-position cue.",
      "guidanceId": "shrinking-header-on-scroll",
      "effort": "medium",
      "principleId": "provide-guided-navigation",
      "artifacts": [
        "evidence/home-content.png",
        "evidence/home-layout.json"
      ]
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "summary": "Privacy and discovery overlays repeatedly obscure the core scores",
      "evidence": "Fresh loads are fully covered by consent; after refusal another notice and discovery panel cover content.",
      "suggestedFix": "Minimise the consent interruption, suppress secondary promotional overlays after refusal, and preserve immediate access to scores.",
      "guidanceId": "light-dismiss-a-dialog",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-content.png"
      ]
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "summary": "Dialog-like UI is built from role=dialog DIVs",
      "evidence": "DOM inspection found four custom dialog DIVs and a large hidden vendor tree.",
      "suggestedFix": "Use native dialog/popover primitives with declarative dismissal and lazy-mount detailed vendor content.",
      "guidanceId": "declarative-dialog-popover-control",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "summary": "Match detail overflows narrow mobile viewports",
      "evidence": "At a 320px viewport, layout width was 370px with 50px horizontal overflow.",
      "suggestedFix": "Remove fixed minimum widths and use intrinsic/fluid sizing so detail content reflows at 320px and zoom.",
      "guidanceId": "fluid-scaling",
      "effort": "medium",
      "principleId": "adapt-to-the-form-factor",
      "artifacts": [
        "evidence/match-layout-320.json"
      ]
    },
    {
      "id": "F08",
      "severity": "high",
      "confidence": "high",
      "summary": "Almost every interactive target is too small for touch",
      "evidence": "409 of 412 targets were under 24px in at least one dimension; many links are only 12px high.",
      "suggestedFix": "Increase link hit areas toward 44 CSS px while retaining visible keyboard focus.",
      "guidanceId": "accessibility",
      "effort": "medium",
      "principleId": "adapt-to-the-form-factor",
      "artifacts": [
        "evidence/accessibility-probe.json"
      ]
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "summary": "Failure states are generic and weakly recoverable",
      "evidence": "The invalid route offers only a generic try-later message and home link.",
      "suggestedFix": "Distinguish not-found/network errors and offer retry, search, back, and preserved context.",
      "guidanceId": "persistent-toast-notifications",
      "effort": "small",
      "principleId": "support-core-task-success",
      "artifacts": [
        "evidence/error-state.json"
      ]
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "summary": "Mobile loading is slow and visually unstable",
      "evidence": "Trace LCP was 4.49s; CLS reached 0.092 on home and 0.170 on match detail.",
      "suggestedFix": "Reserve all late content space, remove banner-induced shifts, and prioritize the actual LCP path.",
      "guidanceId": "performance",
      "effort": "medium",
      "principleId": "be-fast-and-stable",
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/match-layout-320.json"
      ]
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party JavaScript dominates a small text page",
      "evidence": "30/40 requests and 652KB/835KB were third-party; script totaled 735KB.",
      "suggestedFix": "Defer non-essential ads/analytics until consent or intent, reduce vendors, and trim duplicate tag/consent code.",
      "guidanceId": "conditional-async-dependencies",
      "effort": "large",
      "principleId": "be-fast-and-stable",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ]
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "summary": "Controls and frames lack accessible names",
      "evidence": "Axe found a critical unnamed toggle and an untitled iframe.",
      "suggestedFix": "Name every button and iframe, and remove decorative frames from the accessibility tree.",
      "guidanceId": "accessibility",
      "effort": "small",
      "principleId": "be-inclusive",
      "artifacts": [
        "evidence/axe.json"
      ]
    },
    {
      "id": "F13",
      "severity": "high",
      "confidence": "high",
      "summary": "Document structure lacks an H1 and main landmark",
      "evidence": "Axe found no main landmark, no content H1, heading-order errors, and uncontained regions.",
      "suggestedFix": "Add one descriptive H1, main/nav/footer landmarks, and a sequential heading hierarchy.",
      "guidanceId": "accessibility",
      "effort": "small",
      "principleId": "be-inclusive",
      "artifacts": [
        "evidence/axe.json",
        "evidence/accessibility-probe.json"
      ]
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "summary": "Core score text is cramped at 11px",
      "evidence": "Computed body text is 11px and result rows are about 12px high.",
      "suggestedFix": "Raise the base type size/line-height and improve spacing while preserving the dense score format.",
      "guidanceId": "improve-text-layout-and-legibility",
      "effort": "small",
      "principleId": "be-inclusive",
      "artifacts": [
        "evidence/home-content.png",
        "evidence/accessibility-probe.json"
      ]
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image markup and formats are dated",
      "evidence": "All 39 images lack dimensions; all are PNG/GIF and 38 decorative blank GIFs lack alt.",
      "suggestedFix": "Replace spacer GIFs with CSS, add intrinsic dimensions, empty alt for decorative images, and modern formats where useful.",
      "guidanceId": "optimize-image-priority",
      "effort": "medium",
      "principleId": "follow-best-practices",
      "artifacts": [
        "evidence/images.json"
      ]
    },
    {
      "id": "F16",
      "severity": "low",
      "confidence": "high",
      "summary": "Production bundles lack source maps and ad frames lack titles",
      "evidence": "Lighthouse flagged missing source maps; platform probe found seven untitled iframes.",
      "suggestedFix": "Publish protected production source maps and ensure injected frames are titled or hidden appropriately.",
      "guidanceId": "html",
      "effort": "small",
      "principleId": "follow-best-practices",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "summary": "Match pages reuse generic metadata",
      "evidence": "The France–England detail has a match title but the generic homepage description.",
      "suggestedFix": "Generate unique match descriptions and share metadata from visible event data.",
      "guidanceId": "html",
      "effort": "small",
      "principleId": "be-discoverable",
      "artifacts": [
        "evidence/match-recon.json"
      ]
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "Core detail pages are blocked and the advertised sitemap is broken",
      "evidence": "robots disallows /match/ and /standings/ and its HTTP sitemap URL returns 404.",
      "suggestedFix": "Publish a working HTTPS sitemap and align robots/canonicals with intended public detail indexing.",
      "guidanceId": "html",
      "effort": "small",
      "principleId": "be-discoverable",
      "artifacts": [
        "evidence/robots.txt",
        "evidence/sitemap.xml"
      ]
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "Sports entities lack structured/share metadata",
      "evidence": "No JSON-LD exists and og:image points to the site root.",
      "suggestedFix": "Add accurate SportsEvent/Organization JSON-LD and valid Open Graph images for shareable pages.",
      "guidanceId": "html",
      "effort": "medium",
      "principleId": "be-discoverable",
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "id": "F20",
      "severity": "high",
      "confidence": "high",
      "summary": "Transport defenses and cookie flags are missing",
      "evidence": "CSP, HSTS, nosniff, clickjacking, referrer and permissions policies are absent; five cookies lack Secure.",
      "suggestedFix": "Deploy a restrictive CSP, HSTS, nosniff, frame protection, referrer/permissions policies, and Secure appropriate SameSite cookies.",
      "guidanceId": "security",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ]
    },
    {
      "id": "F21",
      "severity": "high",
      "confidence": "high",
      "summary": "Tracking and partner footprint is excessive",
      "evidence": "Twelve third-party origins and four known trackers load; consent names 210 partners and precise geolocation.",
      "suggestedFix": "Minimise partners and collection, gate trackers on consent, shorten retention, and avoid precise location unless explicitly needed.",
      "guidanceId": "privacy",
      "effort": "large",
      "principleId": "be-private-and-secure",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "summary": "Installable presentation has no offline fallback",
      "evidence": "A standalone manifest is present but no service worker registration exists.",
      "suggestedFix": "Either provide a small service worker/offline shell for saved results or remove the unsupported installable promise.",
      "guidanceId": "conditional-async-dependencies",
      "effort": "medium",
      "principleId": "be-resilient",
      "artifacts": [
        "evidence/manifest.json",
        "evidence/pwa-probe.json"
      ]
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "summary": "Global event times are locale and time-zone ambiguous",
      "evidence": "Match dates use a fixed 18.07.2026 23:00 form with no zone; CSS lacks logical-property evidence.",
      "suggestedFix": "Format dates with Intl, label/convert time zones, and migrate layout spacing to logical properties.",
      "guidanceId": "coordinate-global-events",
      "effort": "medium",
      "principleId": "be-internationalised",
      "artifacts": [
        "evidence/match-recon.json"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Minimise partners and collection, gate trackers on consent, shorten retention, and avoid precise location unless explicitly needed.",
      "priority": 1,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Deploy a restrictive CSP, HSTS, nosniff, frame protection, referrer/permissions policies, and Secure appropriate SameSite cookies.",
      "priority": 2,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Defer non-essential ads/analytics until consent or intent, reduce vendors, and trim duplicate tag/consent code.",
      "priority": 3,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Reserve all late content space, remove banner-induced shifts, and prioritize the actual LCP path.",
      "priority": 4,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Remove fixed minimum widths and use intrinsic/fluid sizing so detail content reflows at 320px and zoom.",
      "priority": 5,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Increase link hit areas toward 44 CSS px while retaining visible keyboard focus.",
      "priority": 6,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Name every button and iframe, and remove decorative frames from the accessibility tree.",
      "priority": 7,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Add one descriptive H1, main/nav/footer landmarks, and a sequential heading hierarchy.",
      "priority": 8,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Raise the base type size/line-height and improve spacing while preserving the dense score format.",
      "priority": 9,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "improve-text-layout-and-legibility",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Meet WCAG contrast ratios and add forced-colors/prefers-contrast-safe styles.",
      "priority": 10,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Minimise the consent interruption, suppress secondary promotional overlays after refusal, and preserve immediate access to scores.",
      "priority": 11,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Publish a working HTTPS sitemap and align robots/canonicals with intended public detail indexing.",
      "priority": 12,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Either provide a small service worker/offline shell for saved results or remove the unsupported installable promise.",
      "priority": 13,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Format dates with Intl, label/convert time zones, and migrate layout spacing to logical properties.",
      "priority": 14,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "coordinate-global-events",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Use native dialog/popover primitives with declarative dismissal and lazy-mount detailed vendor content.",
      "priority": 15,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Distinguish not-found/network errors and offer retry, search, back, and preserved context.",
      "priority": 16,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Replace spacer GIFs with CSS, add intrinsic dimensions, empty alt for decorative images, and modern formats where useful.",
      "priority": 17,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Generate unique match descriptions and share metadata from visible event data.",
      "priority": 18,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Add accurate SportsEvent/Organization JSON-LD and valid Open Graph images for shareable pages.",
      "priority": 19,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Keep compact context/filter chrome visible or add a lightweight scroll-position cue.",
      "priority": 20,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "shrinking-header-on-scroll",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Declare color-scheme and supply preference-driven dark surface/text tokens.",
      "priority": 21,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T22",
      "title": "Publish protected production source maps and ensure injected frames are titled or hidden appropriately.",
      "priority": 22,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T23",
      "title": "Add progressive cross-document View Transitions with reduced-motion handling.",
      "priority": 23,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "cross-document-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-19T20-35-09-570Z"
}
