{
  "url": "https://www.promiedos.com.ar",
  "auditedAt": "2026-07-23T20:00:40.694Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Atomic coverage complete across 58 checks and four representative content archetypes plus a recovery route.",
  "page": {
    "appType": "hybrid",
    "framework": "Next.js",
    "notes": "Public Spanish football scores site. Home, league, game detail, calendar and 404 recovery were sampled. Team pages and contact/legal templates were not separately audited because league/game pages cover the data-rich archetypes and there was no transactional form."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "axe-core",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "accessibility",
    "accessible-error-announcement",
    "adapt-scrollbar-to-contrast-preferences",
    "agentic-forms",
    "agentic-javascript-tools",
    "anchor-positioning-tab-underline",
    "animated-select-picker",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "apply-webgl-shaders",
    "autofill-address-form",
    "autofill-highlight-inputs",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "batch-analytics-events",
    "brand-consistent-forms",
    "branded-select-styling",
    "break-up-long-tasks",
    "calculate-event-differentials",
    "calculate-total-foreground-time",
    "calculate-with-intrinsic-sizes",
    "capture-location-agnostic-data",
    "carousel-slide-effects",
    "carousel-snap-highlights",
    "child-state-based-styling",
    "complex-shapes",
    "component-specific-light-dark-theme",
    "conditional-async-dependencies",
    "consistent-cross-document-transitions",
    "content-based-styling",
    "coordinate-global-events",
    "cross-document-transitions",
    "css",
    "css-layout",
    "customize-scrollbar-color-and-thickness",
    "custom-select-picker-layouts",
    "dark-mode",
    "declarative-dialog-popover-control",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "design-token-reactivity",
    "detect-initial-visibility-state",
    "directional-navigation-transitions",
    "dynamic-sibling-animations",
    "dynamic-sibling-styling",
    "efficient-background-processing",
    "export-html-media-from-canvas",
    "expose-canvas-content-to-browser-features",
    "faster-spa-view-transitions",
    "flicker-free-client-side-ab-testing",
    "fluid-scaling",
    "format-human-readable-durations",
    "form-fields-automatically-fit-contents",
    "forms",
    "full-session-analytics",
    "group-element-transitions",
    "highlight-text-ranges",
    "html",
    "identify-heavy-scripts",
    "identify-inp-causes",
    "improve-next-page-load-performance",
    "improve-text-layout-and-legibility",
    "individual-transform-properties",
    "interactions-in-complex-layouts",
    "interactive-content-in-3d-scenes",
    "interactive-content-reveal",
    "interest-triggered-action-previews",
    "interest-triggered-tooltips",
    "language-detection",
    "language-model",
    "light-dismiss-a-dialog",
    "manage-recurring-intervals",
    "model-partial-time-concepts",
    "move-dom-element-without-losing-state",
    "navigation-drawer",
    "optimize-image-priority",
    "optimize-preload-priority",
    "optimize-script-priority",
    "overflow-clipping-control",
    "parallax-scroll-effects",
    "passkey-authentication",
    "passkey-conditional-create",
    "passkey-management",
    "passkey-reauthentication",
    "passkey-registration",
    "passkeys",
    "performance",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "persistent-top-layer-ui",
    "physics-based-easing",
    "platform-controls-dismiss-dialog",
    "position-aware-tooltips",
    "precise-text-alignment",
    "prevent-text-wrapping",
    "privacy",
    "pull-to-reveal",
    "reduce-style-repetition",
    "required-field-feedback",
    "resilient-context-menus-and-nested-dropdowns",
    "resolution-optimized-pseudo-elements",
    "rich-media-picker",
    "same-document-transitions",
    "schedule-tasks-by-priority",
    "scrollability-affordance-hints",
    "scroll-entry-exit-effects",
    "scroll-position-aware-elements",
    "scroll-progress-indicator",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "scrollytelling",
    "search-hidden-content",
    "security",
    "select-menu-interaction",
    "sequence-distributed-events",
    "shaped-cutouts",
    "shrinking-header-on-scroll",
    "size-aware-styling",
    "soft-edge-content-fade",
    "stabilize-reactive-state",
    "stack-drill-down",
    "style-parent-with-has",
    "summarizer",
    "support-global-calendar-systems",
    "swipe-to-remove",
    "translator",
    "validate-input-after-interaction",
    "visually-stable-font-fallbacks",
    "visually-stable-mixed-fonts",
    "visually-texture-content",
    "webmcp"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/404.png",
      "caption": "404"
    },
    {
      "type": "other",
      "path": "evidence/axe.json",
      "caption": "axe"
    },
    {
      "type": "dom",
      "path": "evidence/calendar-dom.json",
      "caption": "calendar dom"
    },
    {
      "type": "screenshot",
      "path": "evidence/calendar-mobile.png",
      "caption": "calendar mobile",
      "condition": "viewport: 360x800"
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies"
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "discoverability"
    },
    {
      "type": "dom",
      "path": "evidence/game-dom.json",
      "caption": "game dom"
    },
    {
      "type": "screenshot",
      "path": "evidence/game.png",
      "caption": "game"
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers"
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline"
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.json",
      "caption": "heap post scroll"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "condition": "prefers-color-scheme: dark"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop"
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom"
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "condition": "viewport: 360x800"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "condition": "viewport: 360x800"
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary"
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary"
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace"
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home"
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images"
    },
    {
      "type": "dom",
      "path": "evidence/league-dom.json",
      "caption": "league dom"
    },
    {
      "type": "screenshot",
      "path": "evidence/league.png",
      "caption": "league"
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "lighthouse summary"
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "lighthouse"
    },
    {
      "type": "other",
      "path": "evidence/modern-css-motion.json",
      "caption": "modern css motion"
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe"
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon"
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets"
    },
    {
      "type": "other",
      "path": "evidence/site-discovery.json",
      "caption": "site discovery"
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers"
    }
  ],
  "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": "a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.",
      "evidence": "Desktop screenshots under default and prefers-color-scheme: dark are pixel-identical (both 508,720 bytes) and remain fixed dark-green; the CSS probe found no color-scheme preference rule.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F-001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.",
      "evidence": "Under prefers-reduced-motion: reduce, matchMedia returned true, getAnimations() returned none, and no motion CSS was detected.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.",
      "evidence": "axe found two serious color-contrast failures in the consent UI and 14 more nodes requiring manual review.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/axe.json"
      ],
      "findingIds": [
        "F-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.",
      "evidence": "The CSS probe found no view-transition rules; navigation among home, league, game and calendar uses abrupt full state swaps.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No scroll-linked animation, gesture, tooltip or anchored overlay of this type exists on representative routes."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.",
      "evidence": "DOM/CSS and route walkthrough found conventional links, buttons and scrolling, with no custom drag or pointer gesture that fights native interaction.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.",
      "evidence": "The long scores feed has static chrome; CSS inspection found no scroll-state query or progress/position affordance.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-004"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No scroll-linked animation, gesture, tooltip or anchored overlay of this type exists on representative routes."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "issues",
      "confidence": "high",
      "method": "CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.",
      "evidence": "Screenshots and route walkthrough show no directional transition, target highlight or other cue when moving from fixture to league/game detail.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.",
      "evidence": "Fresh-load screenshots on home, league and game show a consent interstitial dimming and obscuring the primary scores content; on 360x800 it occupies almost the whole viewport.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/league.png",
        "evidence/game.png"
      ],
      "findingIds": [
        "F-006"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.",
      "evidence": "DOM probe found 0 dialog, 0 popover and 0 details elements while the full-screen consent overlay is implemented by injected div/button chrome.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-007"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.",
      "evidence": "After accounting for the consent overlay, screenshots show a content-dense scores layout with navigation and compact match cards rather than decorative framing.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.",
      "evidence": "At 360x800, layout measured scrollWidth 360, clientWidth 360 and horizontalOverflowPx 0; viewport meta is present.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.",
      "evidence": "CSS probe found no @container usage despite match cards and tables being reused across sidebars, league and game layouts.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-008"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.",
      "evidence": "The first focused link computed to outline none, and axe found 21 critical button-name failures, making keyboard and alternative-input operation unclear.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/axe.json"
      ],
      "findingIds": [
        "F-009"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.",
      "evidence": "The home H1 says PARTIDOS DE HOY and prominent real links lead directly to fixtures, leagues and games.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.",
      "evidence": "The core score-browsing journey is interrupted on every fresh route by a blocking consent wall; reject is not available at the same level as accept.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/league.png",
        "evidence/game.png"
      ],
      "findingIds": [
        "F-010"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.",
      "evidence": "A deliberately invalid route presents a clear “Página no encontrada” state and a direct link back to the homepage.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/404.png"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.",
      "evidence": "Lighthouse mobile lab score was 0.56 with simulated LCP 11,283 ms, FCP 4,046 ms and TBT 273 ms, despite the separate desktop trace being faster (LCP 1,605 ms).",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F-011"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.",
      "evidence": "Mobile layout observation measured CLS 0.0338 and Lighthouse measured 0, both inside the good range.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.",
      "evidence": "Lighthouse measured 273 ms TBT and 205 ms max potential FID; the first-party trace also recorded a 70 ms long task.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F-012"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.",
      "evidence": "HAR recorded parser-blocking local CSS plus two Google Fonts stylesheets and 207 KB of font transfer; Lighthouse simulated LCP was 11.3 s.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-013"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.",
      "evidence": "HAR recorded 894 KB of scripts; the three largest scripts were advertising/tag-manager resources totalling about 537 KB before other consent/ad code.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-014"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.",
      "evidence": "axe found 21 critical unnamed buttons and 2 critical images without alt; the image primitive independently found a missing-alt image.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/axe.json"
      ],
      "findingIds": [
        "F-015"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.",
      "evidence": "axe reported serious color-contrast failures, including consent FAQ/vendor UI.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/axe.json"
      ],
      "findingIds": [
        "F-016"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.",
      "evidence": "axe found a heading-order failure; the first programmatically focused link had no visible computed outline, while 21 buttons lacked names.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/axe.json"
      ],
      "findingIds": [
        "F-017"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.",
      "evidence": "Across desktop and mobile screenshots, core fixture text reflows without clipping and remains readable when not covered by consent.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.",
      "evidence": "The viewport permits normal scaling, the 360 px layout reflows with no horizontal overflow, and no essential video/audio content requiring captions was present.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.",
      "evidence": "Lighthouse captured a network console error: a team image endpoint returned HTTP 500.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-018"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.",
      "evidence": "Document has HTML doctype/UTF-8, but image audit found one missing dimension and 52 images over 2x displayed size.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F-019"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.",
      "evidence": "Lighthouse best-practices was 0.88; probes found no permission prompt on load or input paste-prevention surface, and no deprecated API evidence beyond the separately reported network error.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.",
      "evidence": "Homepage exposes a descriptive football-results title and a detailed meta description; league and game DOM captures also have specific titles.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.",
      "evidence": "Links and viewport pass, but /robots.txt returns the site’s HTML 404 page rather than robots directives, so crawler policy is malformed.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-020"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.",
      "evidence": "Homepage returned 200 and sitemap exists, but no canonical URL was present and /robots.txt incorrectly served an HTML 404 representation.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-021"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.",
      "evidence": "Probe found 0 JSON-LD blocks and no Open Graph metadata for this public sports-results page and its match/league entities.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-022"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.",
      "evidence": "HTTPS is used, but headers probe found no CSP or HSTS; all three observed first-party cookies lacked Secure and used SameSite=None.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-023"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.",
      "evidence": "Trackers probe found 11 third-party origins and Google Ads, GTM and DoubleClick; the consent copy says data may be shared with 210 partners and precise geolocation may be used.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F-024"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No authentication or permission-gated flow exists on the audited public routes."
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.",
      "evidence": "Headers probe found no frame protection, Referrer-Policy, Permissions-Policy, CSP/Trusted Types policy, HSTS or nosniff.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-025"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.",
      "evidence": "Discoverability comparison found only 16% of rendered content words in raw HTML; live results are largely unavailable to non-JS clients even though the shell is server-rendered.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "F-026"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.",
      "evidence": "Consent and route layouts remained within tested desktop/mobile viewports, and conventional route links preserved predictable browser navigation.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "This live sports-results service is intrinsically network-dependent; installability/offline capability was judged out of scope."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.",
      "evidence": "The representative invalid route renders an intentional recovery page with explanatory copy and a home link instead of a blank shell.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/404.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.",
      "evidence": "html lang is es and Spanish reading order is correct; no bidirectional content is part of this deliberately Spanish-language service.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.",
      "evidence": "Visible dates and day names are rendered in Spanish (for example “JUEVES 23 DE JULIO DE 2026”) and scores use locale-appropriate simple numerals.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "issues",
      "confidence": "high",
      "method": "source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.",
      "evidence": "Fixtures display bare times such as 23:30 without a visible time-zone label or user-zone explanation on a globally reachable sports site.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "findingIds": [
        "F-027"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.",
      "evidence": "The first-layer consent UI gives a one-click Accept/Consent action but no equivalent reject action; refusal requires entering Manage options, creating asymmetric friction.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/league.png",
        "evidence/game.png"
      ],
      "findingIds": [
        "F-028"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No form, checkout, account or commercial transaction flow exists on representative routes."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No form, checkout, account or commercial transaction flow exists on representative routes."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No form, checkout, account or commercial transaction flow exists on representative routes."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.",
      "evidence": "Image probe found 85 below-fold images without lazy loading and 52 assets more than 2x their displayed width; HAR recorded 251 image requests.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F-029"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.",
      "evidence": "HAR recorded 293 requests, including multiple analytics/ad calls and a 55 KB sound file on initial load before the user asks for audio.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-030"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.",
      "evidence": "HAR transferred 1.66 MB and trackers found 11 third-party origins; advertising/tag-manager scripts dominate the largest resources.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-031"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No declared agent-facing or on-device inference intent; the emerging opportunity is not penalised."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source inspection for built-in AI (language model / summariser) usage. The model chooses.",
      "evidence": "No applicable surface was present on the representative routes.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "reason": "No declared agent-facing or on-device inference intent; the emerging opportunity is not penalised."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.",
      "evidence": "After ten full-page down/up scroll cycles, heap grew only 449 KB (31.35 MB to 31.79 MB, 1.4%) and no Detached constructor appeared; no unbounded growth was observed in this bounded run.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.",
      "evidence": "Baseline heap contained 605,115 nodes and 31.35 MB self size for a scores page, disproportionate to its visual complexity and amplified by consent/ad technology.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ],
      "findingIds": [
        "F-032"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.",
      "evidence": "Neither baseline nor post-scroll heap summaries listed Detached constructors; the bounded 10-cycle run did not show detached-DOM accumulation.",
      "pathIds": [
        "home",
        "league",
        "game",
        "calendar"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-001",
        "F-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-004",
        "F-005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-006",
        "F-007"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-008",
        "F-009"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-010"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-011",
        "F-012",
        "F-013",
        "F-014"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-015",
        "F-016",
        "F-017"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-018",
        "F-019"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-020",
        "F-021",
        "F-022"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-023",
        "F-024",
        "F-025"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-026"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-027"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-028"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-029",
        "F-030",
        "F-031"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No agent-facing or on-device inference intent was declared for this public sports-results site; this emerging principle is judged out of scope."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-032"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary live-score browsing surface.",
      "url": "https://www.promiedos.com.ar/",
      "conditions": [
        "desktop",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "league",
      "description": "Representative competition listing/table archetype.",
      "url": "https://www.promiedos.com.ar/league/liga-profesional/hc",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "game",
      "description": "Representative match detail and core drill-down journey.",
      "url": "https://www.promiedos.com.ar/game/sarmiento-junin-vs-argentinos-juniors/egddecd",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "calendar",
      "description": "Representative schedule/calendar listing archetype.",
      "url": "https://www.promiedos.com.ar/calendario",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "recovery",
      "description": "Invalid route used to assess error recovery.",
      "url": "https://www.promiedos.com.ar/definitely-not-found",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F-001",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "severity": "low",
      "confidence": "high",
      "summary": "Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.",
      "evidence": "Desktop screenshots under default and prefers-color-scheme: dark are pixel-identical (both 508,720 bytes) and remain fixed dark-green; the CSS probe found no color-scheme preference rule.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Declare color-scheme and map surfaces/text through light-dark() or a prefers-color-scheme rule with tested contrast.",
      "effort": "medium"
    },
    {
      "id": "F-002",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "severity": "medium",
      "confidence": "high",
      "summary": "Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.",
      "evidence": "axe found two serious color-contrast failures in the consent UI and 14 more nodes requiring manual review.",
      "artifacts": [
        "evidence/axe.json"
      ],
      "suggestedFix": "Correct the reported foreground/background pairs to WCAG AA and test forced-colors/prefers-contrast.",
      "effort": "medium"
    },
    {
      "id": "F-003",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "severity": "medium",
      "confidence": "high",
      "summary": "State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.",
      "evidence": "The CSS probe found no view-transition rules; navigation among home, league, game and calendar uses abrupt full state swaps.",
      "artifacts": [],
      "suggestedFix": "Progressively enhance meaningful route/state changes with same- or cross-document View Transitions and reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "F-004",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "severity": "low",
      "confidence": "high",
      "summary": "Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.",
      "evidence": "The long scores feed has static chrome; CSS inspection found no scroll-state query or progress/position affordance.",
      "artifacts": [],
      "suggestedFix": "Add a lightweight scroll-state/progress affordance for long score feeds using CSS where supported.",
      "effort": "medium"
    },
    {
      "id": "F-005",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "directs-attention",
      "guidanceId": "directional-navigation-transitions",
      "severity": "low",
      "confidence": "high",
      "summary": "Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.",
      "evidence": "Screenshots and route walkthrough show no directional transition, target highlight or other cue when moving from fixture to league/game detail.",
      "artifacts": [],
      "suggestedFix": "Use directional transitions or target highlighting to preserve context between fixture, league and game views.",
      "effort": "medium"
    },
    {
      "id": "F-006",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "severity": "high",
      "confidence": "high",
      "summary": "No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.",
      "evidence": "Fresh-load screenshots on home, league and game show a consent interstitial dimming and obscuring the primary scores content; on 360x800 it occupies almost the whole viewport.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/league.png",
        "evidence/game.png"
      ],
      "suggestedFix": "Replace the blocking first-paint wall with a compact, non-obscuring choice surface where legally permitted, preserving access to core scores.",
      "effort": "medium"
    },
    {
      "id": "F-007",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "severity": "medium",
      "confidence": "high",
      "summary": "Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.",
      "evidence": "DOM probe found 0 dialog, 0 popover and 0 details elements while the full-screen consent overlay is implemented by injected div/button chrome.",
      "artifacts": [],
      "suggestedFix": "Use dialog semantics for the modal consent flow, with focus trapping, escape policy and explicit labelled actions.",
      "effort": "medium"
    },
    {
      "id": "F-008",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "severity": "low",
      "confidence": "high",
      "summary": "Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.",
      "evidence": "CSS probe found no @container usage despite match cards and tables being reused across sidebars, league and game layouts.",
      "artifacts": [],
      "suggestedFix": "Add container queries to reusable fixture/table modules so they adapt where embedded, not only at viewport breakpoints.",
      "effort": "medium"
    },
    {
      "id": "F-009",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "css",
      "severity": "medium",
      "confidence": "high",
      "summary": "Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.",
      "evidence": "The first focused link computed to outline none, and axe found 21 critical button-name failures, making keyboard and alternative-input operation unclear.",
      "artifacts": [
        "evidence/axe.json"
      ],
      "suggestedFix": "Give every icon button an accessible name and provide a strong :focus-visible indicator and adequate target size.",
      "effort": "medium"
    },
    {
      "id": "F-010",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "severity": "high",
      "confidence": "high",
      "summary": "The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.",
      "evidence": "The core score-browsing journey is interrupted on every fresh route by a blocking consent wall; reject is not available at the same level as accept.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/league.png",
        "evidence/game.png"
      ],
      "suggestedFix": "Provide equally prominent accept and reject controls and remember the choice so route navigation does not repeatedly block browsing.",
      "effort": "medium"
    },
    {
      "id": "F-011",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "identify-inp-causes",
      "severity": "high",
      "confidence": "high",
      "summary": "Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.",
      "evidence": "Lighthouse mobile lab score was 0.56 with simulated LCP 11,283 ms, FCP 4,046 ms and TBT 273 ms, despite the separate desktop trace being faster (LCP 1,605 ms).",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Profile mobile LCP and defer consent/ad work until core score content paints; validate against field CWV.",
      "effort": "large"
    },
    {
      "id": "F-012",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "severity": "medium",
      "confidence": "high",
      "summary": "The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.",
      "evidence": "Lighthouse measured 273 ms TBT and 205 ms max potential FID; the first-party trace also recorded a 70 ms long task.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Delay and chunk non-essential consent, analytics and ad initialization; keep tasks below 50 ms.",
      "effort": "medium"
    },
    {
      "id": "F-013",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "severity": "medium",
      "confidence": "high",
      "summary": "Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.",
      "evidence": "HAR recorded parser-blocking local CSS plus two Google Fonts stylesheets and 207 KB of font transfer; Lighthouse simulated LCP was 11.3 s.",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Self-host/subset fonts or reduce families/weights, preload only critical assets, and keep blocking CSS minimal.",
      "effort": "medium"
    },
    {
      "id": "F-014",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.",
      "evidence": "HAR recorded 894 KB of scripts; the three largest scripts were advertising/tag-manager resources totalling about 537 KB before other consent/ad code.",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Remove duplicate tag-manager loads and gate advertising/analytics bundles behind consent and viewport/user intent.",
      "effort": "medium"
    },
    {
      "id": "F-015",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.",
      "evidence": "axe found 21 critical unnamed buttons and 2 critical images without alt; the image primitive independently found a missing-alt image.",
      "artifacts": [
        "evidence/axe.json"
      ],
      "suggestedFix": "Add accessible names to all icon buttons and meaningful alt text, or empty alt for decorative images.",
      "effort": "medium"
    },
    {
      "id": "F-016",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Text and essential UI meet WCAG colour-contrast minimums against their background.",
      "evidence": "axe reported serious color-contrast failures, including consent FAQ/vendor UI.",
      "artifacts": [
        "evidence/axe.json"
      ],
      "suggestedFix": "Adjust failed color pairs to at least WCAG AA ratios in all consent and site states.",
      "effort": "medium"
    },
    {
      "id": "F-017",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "move-dom-element-without-losing-state",
      "severity": "medium",
      "confidence": "high",
      "summary": "Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.",
      "evidence": "axe found a heading-order failure; the first programmatically focused link had no visible computed outline, while 21 buttons lacked names.",
      "artifacts": [
        "evidence/axe.json"
      ],
      "suggestedFix": "Restore sequential headings and a visible :focus-visible style across all interactive controls.",
      "effort": "medium"
    },
    {
      "id": "F-018",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page loads without console errors or uncaught exceptions.",
      "evidence": "Lighthouse captured a network console error: a team image endpoint returned HTTP 500.",
      "artifacts": [],
      "suggestedFix": "Fix or gracefully fall back when team image endpoints return 500 so page load is error-free.",
      "effort": "medium"
    },
    {
      "id": "F-019",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "css",
      "severity": "medium",
      "confidence": "high",
      "summary": "Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)",
      "evidence": "Document has HTML doctype/UTF-8, but image audit found one missing dimension and 52 images over 2x displayed size.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Add intrinsic dimensions/aspect-ratio and serve size-appropriate image variants.",
      "effort": "medium"
    },
    {
      "id": "F-020",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.",
      "evidence": "Links and viewport pass, but /robots.txt returns the site’s HTML 404 page rather than robots directives, so crawler policy is malformed.",
      "artifacts": [],
      "suggestedFix": "Serve a valid text/plain /robots.txt with explicit crawler directives.",
      "effort": "small"
    },
    {
      "id": "F-021",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.",
      "evidence": "Homepage returned 200 and sitemap exists, but no canonical URL was present and /robots.txt incorrectly served an HTML 404 representation.",
      "artifacts": [],
      "suggestedFix": "Add route-specific canonicals and repair robots.txt while keeping sitemap URLs consistent.",
      "effort": "medium"
    },
    {
      "id": "F-022",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.",
      "evidence": "Probe found 0 JSON-LD blocks and no Open Graph metadata for this public sports-results page and its match/league entities.",
      "artifacts": [],
      "suggestedFix": "Add accurate Open Graph/Twitter metadata and schema.org SportsEvent/SportsOrganization JSON-LD where applicable.",
      "effort": "medium"
    },
    {
      "id": "F-023",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.",
      "evidence": "HTTPS is used, but headers probe found no CSP or HSTS; all three observed first-party cookies lacked Secure and used SameSite=None.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Set HSTS, a restrictive CSP and Secure/SameSite cookie attributes; avoid SameSite=None unless required.",
      "effort": "small"
    },
    {
      "id": "F-024",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "severity": "high",
      "confidence": "high",
      "summary": "No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.",
      "evidence": "Trackers probe found 11 third-party origins and Google Ads, GTM and DoubleClick; the consent copy says data may be shared with 210 partners and precise geolocation may be used.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Reduce vendors and measurements to the minimum, prevent non-essential requests before consent, and document purposes clearly.",
      "effort": "medium"
    },
    {
      "id": "F-025",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.",
      "evidence": "Headers probe found no frame protection, Referrer-Policy, Permissions-Policy, CSP/Trusted Types policy, HSTS or nosniff.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Deploy frame-ancestors, nosniff, Referrer-Policy and Permissions-Policy, then evaluate Trusted Types/origin isolation.",
      "effort": "small"
    },
    {
      "id": "F-026",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "flicker-free-client-side-ab-testing",
      "severity": "high",
      "confidence": "high",
      "summary": "Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.",
      "evidence": "Discoverability comparison found only 16% of rendered content words in raw HTML; live results are largely unavailable to non-JS clients even though the shell is server-rendered.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render the primary live fixture content and real links so core information remains useful without JavaScript.",
      "effort": "large"
    },
    {
      "id": "F-027",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-internationalised",
      "principleCheckId": "time-zone-correctness",
      "guidanceId": "coordinate-global-events",
      "severity": "medium",
      "confidence": "high",
      "summary": "Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.",
      "evidence": "Fixtures display bare times such as 23:30 without a visible time-zone label or user-zone explanation on a globally reachable sports site.",
      "artifacts": [],
      "suggestedFix": "Label the schedule timezone and offer locale-aware conversion using Intl.DateTimeFormat with timeZoneName.",
      "effort": "medium"
    },
    {
      "id": "F-028",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "search-hidden-content",
      "severity": "medium",
      "confidence": "high",
      "summary": "No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).",
      "evidence": "The first-layer consent UI gives a one-click Accept/Consent action but no equivalent reject action; refusal requires entering Manage options, creating asymmetric friction.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/league.png",
        "evidence/game.png"
      ],
      "suggestedFix": "Offer Reject all beside Accept all with equal prominence and make withdrawal as easy as consent.",
      "effort": "medium"
    },
    {
      "id": "F-029",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "severity": "medium",
      "confidence": "high",
      "summary": "Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.",
      "evidence": "Image probe found 85 below-fold images without lazy loading and 52 assets more than 2x their displayed width; HAR recorded 251 image requests.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Lazy-load below-fold images and request appropriately sized modern variants.",
      "effort": "medium"
    },
    {
      "id": "F-030",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "severity": "medium",
      "confidence": "high",
      "summary": "Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.",
      "evidence": "HAR recorded 293 requests, including multiple analytics/ad calls and a 55 KB sound file on initial load before the user asks for audio.",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Do not preload sound or ad/analytics work before intent/consent; consolidate and batch telemetry.",
      "effort": "medium"
    },
    {
      "id": "F-031",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deliver-optimized-decorative-images",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.",
      "evidence": "HAR transferred 1.66 MB and trackers found 11 third-party origins; advertising/tag-manager scripts dominate the largest resources.",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Set a third-party byte/request budget, remove duplicate tags and defer media/ad technology until it creates user value.",
      "effort": "medium"
    },
    {
      "id": "F-032",
      "pathId": "home",
      "url": "https://www.promiedos.com.ar/",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.",
      "evidence": "Baseline heap contained 605,115 nodes and 31.35 MB self size for a scores page, disproportionate to its visual complexity and amplified by consent/ad technology.",
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ],
      "suggestedFix": "Reduce DOM/object volume by virtualising long lists and deferring consent/ad vendor structures until needed.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T-001",
      "title": "Replace the blocking first-paint wall with a compact, non-obscuring choice surface where legally permitted, preserving access to core scores.",
      "priority": 1,
      "findingIds": [
        "F-006"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T-002",
      "title": "Provide equally prominent accept and reject controls and remember the choice so route navigation does not repeatedly block browsing.",
      "priority": 2,
      "findingIds": [
        "F-010"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T-003",
      "title": "Reduce vendors and measurements to the minimum, prevent non-essential requests before consent, and document purposes clearly.",
      "priority": 3,
      "findingIds": [
        "F-024"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T-004",
      "title": "Set HSTS, a restrictive CSP and Secure/SameSite cookie attributes; avoid SameSite=None unless required.",
      "priority": 4,
      "findingIds": [
        "F-023"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T-005",
      "title": "Add accessible names to all icon buttons and meaningful alt text, or empty alt for decorative images.",
      "priority": 5,
      "findingIds": [
        "F-015"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-006",
      "title": "Profile mobile LCP and defer consent/ad work until core score content paints; validate against field CWV.",
      "priority": 6,
      "findingIds": [
        "F-011"
      ],
      "guidanceId": "identify-inp-causes",
      "status": "open"
    },
    {
      "id": "T-007",
      "title": "Server-render the primary live fixture content and real links so core information remains useful without JavaScript.",
      "priority": 7,
      "findingIds": [
        "F-026"
      ],
      "guidanceId": "flicker-free-client-side-ab-testing",
      "status": "open"
    },
    {
      "id": "T-008",
      "title": "Offer Reject all beside Accept all with equal prominence and make withdrawal as easy as consent.",
      "priority": 8,
      "findingIds": [
        "F-028"
      ],
      "guidanceId": "search-hidden-content",
      "status": "open"
    },
    {
      "id": "T-009",
      "title": "Correct the reported foreground/background pairs to WCAG AA and test forced-colors/prefers-contrast.",
      "priority": 9,
      "findingIds": [
        "F-002"
      ],
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "status": "open"
    },
    {
      "id": "T-010",
      "title": "Progressively enhance meaningful route/state changes with same- or cross-document View Transitions and reduced-motion handling.",
      "priority": 10,
      "findingIds": [
        "F-003"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    },
    {
      "id": "T-011",
      "title": "Use dialog semantics for the modal consent flow, with focus trapping, escape policy and explicit labelled actions.",
      "priority": 11,
      "findingIds": [
        "F-007"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T-012",
      "title": "Give every icon button an accessible name and provide a strong :focus-visible indicator and adequate target size.",
      "priority": 12,
      "findingIds": [
        "F-009"
      ],
      "guidanceId": "css",
      "status": "open"
    },
    {
      "id": "T-013",
      "title": "Delay and chunk non-essential consent, analytics and ad initialization; keep tasks below 50 ms.",
      "priority": 13,
      "findingIds": [
        "F-012"
      ],
      "guidanceId": "break-up-long-tasks",
      "status": "open"
    },
    {
      "id": "T-014",
      "title": "Self-host/subset fonts or reduce families/weights, preload only critical assets, and keep blocking CSS minimal.",
      "priority": 14,
      "findingIds": [
        "F-013"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T-015",
      "title": "Remove duplicate tag-manager loads and gate advertising/analytics bundles behind consent and viewport/user intent.",
      "priority": 15,
      "findingIds": [
        "F-014"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T-016",
      "title": "Adjust failed color pairs to at least WCAG AA ratios in all consent and site states.",
      "priority": 16,
      "findingIds": [
        "F-016"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-017",
      "title": "Restore sequential headings and a visible :focus-visible style across all interactive controls.",
      "priority": 17,
      "findingIds": [
        "F-017"
      ],
      "guidanceId": "move-dom-element-without-losing-state",
      "status": "open"
    },
    {
      "id": "T-018",
      "title": "Fix or gracefully fall back when team image endpoints return 500 so page load is error-free.",
      "priority": 18,
      "findingIds": [
        "F-018"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-019",
      "title": "Add intrinsic dimensions/aspect-ratio and serve size-appropriate image variants.",
      "priority": 19,
      "findingIds": [
        "F-019"
      ],
      "guidanceId": "css",
      "status": "open"
    },
    {
      "id": "T-020",
      "title": "Serve a valid text/plain /robots.txt with explicit crawler directives.",
      "priority": 20,
      "findingIds": [
        "F-020"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-021",
      "title": "Add route-specific canonicals and repair robots.txt while keeping sitemap URLs consistent.",
      "priority": 21,
      "findingIds": [
        "F-021"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-022",
      "title": "Add accurate Open Graph/Twitter metadata and schema.org SportsEvent/SportsOrganization JSON-LD where applicable.",
      "priority": 22,
      "findingIds": [
        "F-022"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-023",
      "title": "Deploy frame-ancestors, nosniff, Referrer-Policy and Permissions-Policy, then evaluate Trusted Types/origin isolation.",
      "priority": 23,
      "findingIds": [
        "F-025"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T-024",
      "title": "Label the schedule timezone and offer locale-aware conversion using Intl.DateTimeFormat with timeZoneName.",
      "priority": 24,
      "findingIds": [
        "F-027"
      ],
      "guidanceId": "coordinate-global-events",
      "status": "open"
    },
    {
      "id": "T-025",
      "title": "Lazy-load below-fold images and request appropriately sized modern variants.",
      "priority": 25,
      "findingIds": [
        "F-029"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T-026",
      "title": "Do not preload sound or ad/analytics work before intent/consent; consolidate and batch telemetry.",
      "priority": 26,
      "findingIds": [
        "F-030"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T-027",
      "title": "Set a third-party byte/request budget, remove duplicate tags and defer media/ad technology until it creates user value.",
      "priority": 27,
      "findingIds": [
        "F-031"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T-028",
      "title": "Reduce DOM/object volume by virtualising long lists and deferring consent/ad vendor structures until needed.",
      "priority": 28,
      "findingIds": [
        "F-032"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T-029",
      "title": "Declare color-scheme and map surfaces/text through light-dark() or a prefers-color-scheme rule with tested contrast.",
      "priority": 29,
      "findingIds": [
        "F-001"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T-030",
      "title": "Add a lightweight scroll-state/progress affordance for long score feeds using CSS where supported.",
      "priority": 30,
      "findingIds": [
        "F-004"
      ],
      "guidanceId": "shrinking-header-on-scroll",
      "status": "open"
    },
    {
      "id": "T-031",
      "title": "Use directional transitions or target highlighting to preserve context between fixture, league and game views.",
      "priority": 31,
      "findingIds": [
        "F-005"
      ],
      "guidanceId": "directional-navigation-transitions",
      "status": "open"
    },
    {
      "id": "T-032",
      "title": "Add container queries to reusable fixture/table modules so they adapt where embedded, not only at viewport breakpoints.",
      "priority": 32,
      "findingIds": [
        "F-008"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-23T20-00-40-694Z"
}
