{
  "url": "https://www.chess.com",
  "auditedAt": "2026-07-21T19:06:49.354Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete public logged-out audit. Registration was bot-challenged, so the accessible login route represented account entry; paid/account-internal and authenticated gameplay were not covered.",
  "page": {
    "appType": "hybrid",
    "framework": "Server-rendered multi-route application with client-side interactive surfaces",
    "notes": "Large public chess application. Representative logged-out routes cover landing, gameplay, puzzles, learning, authentication, and HTTP error recovery."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "lighthouse",
    "heap-summary"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "light-dismiss-a-dialog",
    "performance",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "security",
    "privacy",
    "passkeys",
    "flicker-free-client-side-ab-testing",
    "efficient-background-processing",
    "manage-recurring-intervals"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "404 probe"
    },
    {
      "type": "screenshot",
      "path": "evidence/404.png",
      "caption": "404"
    },
    {
      "type": "layout",
      "path": "evidence/computer-mobile-layout.json",
      "caption": "computer mobile layout"
    },
    {
      "type": "screenshot",
      "path": "evidence/computer.png",
      "caption": "computer"
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/css-feature-counts.txt",
      "caption": "css feature counts"
    },
    {
      "type": "other",
      "path": "evidence/dom-a11y-probe.json",
      "caption": "dom a11y probe",
      "findingIds": [
        "F05",
        "F06",
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-issues.md",
      "caption": "guidance issues"
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "guidance retrieved"
    },
    {
      "type": "other",
      "path": "evidence/guidance-search.json",
      "caption": "guidance search"
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability"
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "home high contrast"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light.png",
      "caption": "home light",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F10",
        "F11",
        "F16",
        "F20"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F09"
      ]
    },
    {
      "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",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/learn-discoverability-crawler.png",
      "caption": "learn discoverability crawler",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/learn-discoverability-rendered.png",
      "caption": "learn discoverability rendered",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/learn-discoverability.json",
      "caption": "learn discoverability",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/learn.png",
      "caption": "learn"
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-details.json",
      "caption": "lighthouse details",
      "findingIds": [
        "F05",
        "F07",
        "F13"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home"
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-summary.json",
      "caption": "lighthouse summary",
      "findingIds": [
        "F09",
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-invalid.json",
      "caption": "login invalid"
    },
    {
      "type": "other",
      "path": "evidence/login-probe.json",
      "caption": "login probe",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/login.png",
      "caption": "login"
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe"
    },
    {
      "type": "other",
      "path": "evidence/preferences.json",
      "caption": "preferences",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/puzzle-flow-after.png",
      "caption": "puzzle flow after"
    },
    {
      "type": "other",
      "path": "evidence/puzzle-flow.json",
      "caption": "puzzle flow"
    },
    {
      "type": "heap",
      "path": "evidence/puzzles-heap-baseline.heapsnapshot",
      "caption": "puzzles heap baseline"
    },
    {
      "type": "heap",
      "path": "evidence/puzzles-heap-post.heapsnapshot",
      "caption": "puzzles heap post",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/puzzles-probe.json",
      "caption": "puzzles probe",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/puzzles.png",
      "caption": "puzzles",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon"
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "reduced motion",
      "findingIds": [
        "F04",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/register-probe.json",
      "caption": "register probe"
    },
    {
      "type": "screenshot",
      "path": "evidence/register.png",
      "caption": "register"
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets"
    },
    {
      "type": "other",
      "path": "evidence/site-global-probe.json",
      "caption": "site global probe",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F16"
      ]
    }
  ],
  "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": "Compared screenshots under emulated light and dark preferences and inspected computed color-scheme.",
      "evidence": "Light and dark captures are byte-identical; the root remains dark and computed color-scheme is dark under both preferences.",
      "findingIds": [
        "F03"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.png",
        "evidence/home-dark.png",
        "evidence/preferences.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated prefers-reduced-motion: reduce and probed animations/media playback.",
      "evidence": "The hero video retained autoplay=true and was actively playing at 5.15s with reduced motion requested.",
      "findingIds": [
        "F04"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Captured forced-colors: active plus prefers-contrast: more.",
      "evidence": "Text, controls, borders, and all three consent actions remain visible in forced colors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-high-contrast.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "low",
      "method": "Inspected public navigation links and captured destination states.",
      "evidence": "Primary navigation performs ordinary full-document route changes and no View Transition use was observed in the accessible styles or DOM.",
      "findingIds": [
        "F22"
      ],
      "pathIds": [
        "home",
        "puzzles",
        "learn"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected the tested routes for scroll-linked storytelling, parallax, and reveal behavior.",
      "evidence": "No scroll-linked animation surface was present on the representative logged-out routes, so there is no scroll animation implementation to judge.",
      "reason": "No scroll-linked animation surface was present on the representative logged-out routes, so there is no scroll animation implementation to judge.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Exercised the logged-out puzzle and computer-board surfaces.",
      "evidence": "The tested primary interactions are chess-square selection and buttons, not custom pull, swipe, carousel, or overscroll gestures requiring this technique.",
      "reason": "The tested primary interactions are chess-square selection and buttons, not custom pull, swipe, carousel, or overscroll gestures requiring this technique.",
      "pathIds": [
        "puzzles",
        "computer"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "low",
      "method": "Compared desktop and mobile page screenshots and inspected navigation landmarks.",
      "evidence": "Navigation remains compact and available while page content receives the majority of the viewport; no harmful static overlaying chrome was observed.",
      "pathIds": [
        "home",
        "home-mobile"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected open dialogs and tested navigation surfaces near viewport edges.",
      "evidence": "No tooltip or anchor-attached popover was exposed in the representative logged-out paths; the overlays encountered were modal dialogs, not anchored UI.",
      "reason": "No tooltip or anchor-attached popover was exposed in the representative logged-out paths; the overlays encountered were modal dialogs, not anchored UI.",
      "pathIds": [
        "home",
        "puzzles"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Captured the puzzle entry state and completed its introductory step.",
      "evidence": "The active Puzzles section, board, centered introduction, and single “Ok” action clearly cue where attention moved.",
      "pathIds": [
        "puzzles"
      ],
      "artifacts": [
        "evidence/puzzles.png",
        "evidence/puzzle-flow-after.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Captured first-load screenshots across homepage and puzzle routes.",
      "evidence": "A consent wall occupies nearly the full viewport on every fresh load; on Puzzles it appears simultaneously with a second introductory modal and obscures the task.",
      "findingIds": [
        "F01",
        "F02"
      ],
      "pathIds": [
        "home",
        "home-mobile",
        "puzzles"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/puzzles.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected overlay DOM and exercised dismiss controls.",
      "evidence": "The puzzle introduction uses native <dialog>; consent exposes role=dialog and explicit Accept, Reject All, and Privacy Settings controls, and both can be dismissed.",
      "pathIds": [
        "home",
        "puzzles"
      ],
      "artifacts": [
        "evidence/puzzles-probe.json",
        "evidence/puzzle-flow.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Visually reviewed homepage, Learn, and post-dismissal puzzle states.",
      "evidence": "After interruption dismissal, content and the chess board dominate the viewport; navigation chrome is compact and visually subordinate.",
      "pathIds": [
        "home",
        "learn",
        "puzzles"
      ],
      "artifacts": [
        "evidence/learn.png",
        "evidence/puzzle-flow-after.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Ran layout metrics at 360x800 on homepage and computer board.",
      "evidence": "Both routes report scrollWidth=clientWidth=360, horizontalOverflowPx=0, and a viewport meta tag.",
      "pathIds": [
        "home-mobile",
        "computer"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/computer-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "low",
      "method": "Compared shared navigation, content cards, and game surfaces at desktop and mobile widths.",
      "evidence": "Shared components recompose to the available space and the board stays within its container on both tested routes; cross-origin stylesheet rules limited direct @container inspection.",
      "pathIds": [
        "home",
        "home-mobile",
        "computer"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/computer-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Measured rendered control targets and inspected keyboard-relevant controls.",
      "evidence": "Multiple footer links render only 18px high, below a comfortable touch target; the mobile menu control is also unnamed.",
      "findingIds": [
        "F06"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/dom-a11y-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Reviewed first viewport headings and calls to action on homepage, Learn, and Puzzles.",
      "evidence": "The homepage names the service and exposes Get Started, Lesson, Bot, Puzzle, and Watch actions; each destination has a specific title and task.",
      "pathIds": [
        "home",
        "learn",
        "puzzles"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/learn.png",
        "evidence/puzzles.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Dismissed the two first-load dialogs and entered the logged-out puzzle board.",
      "evidence": "After selecting Ok and Reject All, the puzzle board is present and ready without requiring an account.",
      "pathIds": [
        "puzzles"
      ],
      "artifacts": [
        "evidence/puzzle-flow.json",
        "evidence/puzzle-flow-after.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Requested a nonexistent route and inspected the result.",
      "evidence": "The site returns a branded “404 Page not found” state with a clear Return Home recovery link.",
      "pathIds": [
        "error-404"
      ],
      "artifacts": [
        "evidence/404.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse and a DevTools performance trace.",
      "evidence": "Lighthouse measured LCP 4.6s and TBT 260ms; the independent trace measured LCP 3.09s. Both exceed the good LCP threshold.",
      "findingIds": [
        "F09"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Observed layout shifts on homepage and computer board.",
      "evidence": "Homepage CLS was 0 and the computer route accumulated only 0.0013 CLS, with no horizontal overflow.",
      "pathIds": [
        "home",
        "computer"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/computer-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Used Lighthouse main-thread diagnostics and trace long tasks.",
      "evidence": "Lighthouse reports 2.6s of main-thread work and 260ms TBT; the trace also observed a 51.4ms long task.",
      "findingIds": [
        "F09"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Captured HAR, inspected parser-inserted stylesheets, and corroborated with Lighthouse.",
      "evidence": "The load transfers 4,044,788 bytes across 159 requests and 28 stylesheets; Lighthouse estimates 910ms render-blocking savings and flags cache/LCP discovery.",
      "findingIds": [
        "F10"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Reviewed Lighthouse code diagnostics and HAR resource composition.",
      "evidence": "Lighthouse estimates 1,167KiB unused JavaScript and 31KiB unused CSS; the HAR records 89 script requests totaling 2.71MB.",
      "findingIds": [
        "F11"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse accessibility audits and a DOM control-name probe.",
      "evidence": "The mobile navigation expand button has no accessible name; the DOM probe found two unlabeled mobile toolbar buttons.",
      "findingIds": [
        "F05"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/dom-a11y-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse color-contrast audit.",
      "evidence": "Consent Accept and Reject buttons use white text on #81b64c at 2.4:1, below the required 4.5:1 for their text size.",
      "findingIds": [
        "F07"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected heading/landmark structure and Lighthouse accessibility output.",
      "evidence": "The DOM begins with duplicate Search H2 headings before the sole H1, and Puzzles exposes duplicate H1s, weakening a logical outline.",
      "findingIds": [
        "F08"
      ],
      "pathIds": [
        "home",
        "puzzles"
      ],
      "artifacts": [
        "evidence/dom-a11y-probe.json",
        "evidence/puzzles-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Visually inspected text at desktop, mobile, Learn, login, and forced-color conditions.",
      "evidence": "Body text remains readable without clipping; lines reflow on mobile and forced-color text stays visible.",
      "pathIds": [
        "home",
        "home-mobile",
        "learn",
        "login"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-high-contrast.png",
        "evidence/learn.png",
        "evidence/login.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected viewport policy, narrow reflow, media, and target dimensions.",
      "evidence": "Reflow succeeds without horizontal overflow, but multiple footer targets are only 18px high, so target sizing remains deficient.",
      "findingIds": [
        "F06"
      ],
      "pathIds": [
        "home-mobile"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/dom-a11y-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Ran Lighthouse console-error audit.",
      "evidence": "The browser-errors audit passed with no logged console errors or uncaught exceptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected doctype/charset and ran image/Lighthouse asset audits.",
      "evidence": "Document basics pass, but one image lacks complete dimensions, eight are oversized, and six lack responsive srcset; Lighthouse also flags unsized images.",
      "findingIds": [
        "F12"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse best-practices/Inspector Issues diagnostics.",
      "evidence": "Chrome reports unresolved cookie issues in the Issues panel; the best-practices score is 0.77.",
      "findingIds": [
        "F13"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected rendered and raw metadata on homepage and Learn.",
      "evidence": "Both routes preserve descriptive titles, H1s, and meta descriptions in raw HTML.",
      "pathIds": [
        "home",
        "learn"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/learn-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected anchor hrefs, viewport metadata, robots.txt, and Lighthouse SEO.",
      "evidence": "Navigation uses real hrefs, viewport metadata is present, robots.txt is valid, and Lighthouse SEO scored 1.0.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/site-global-probe.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected canonical, hreflang, HTTP status, robots, and sitemap declaration.",
      "evidence": "Homepage returned 200 with canonical https://www.chess.com/; robots permits public routes and declares sitemapindex.xml; Lighthouse hreflang/robots audits pass.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/site-global-probe.json",
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected social-preview metadata and visible content.",
      "evidence": "Open Graph and Twitter title, description, URL, and large image accurately describe the public homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Ran headers and cookies primitives.",
      "evidence": "HTTPS, HSTS, nosniff, and frame protection are present, but CSP only restricts frame-ancestors and six cookies lack Secure.",
      "findingIds": [
        "F14",
        "F15"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Captured HAR and enumerated trackers/third-party origins.",
      "evidence": "Fresh load contacts seven third-party origins, loads consent/vendor infrastructure, and transfers 4.0MB; Sentry is identified as a known tracking/telemetry origin.",
      "findingIds": [
        "F16"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected the login flow, autocomplete attributes, page text, and auth markup.",
      "evidence": "Login supports passwords and federated identity but exposes no passkey/WebAuthn option; no permission prompt fired on load.",
      "findingIds": [
        "F17"
      ],
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected main-document security headers and cookie posture.",
      "evidence": "Referrer-Policy and Permissions-Policy are absent, CSP provides no script-src/Trusted Types defense, and SameSite=None cookies are set.",
      "findingIds": [
        "F14",
        "F15"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Compared browser-rendered and no-JavaScript crawler views.",
      "evidence": "The Learn route exposes only 6% of rendered content without JavaScript and is classified as a JS shell; its crawler screenshot is essentially blank content chrome.",
      "findingIds": [
        "F18"
      ],
      "pathIds": [
        "learn"
      ],
      "artifacts": [
        "evidence/learn-discoverability.json",
        "evidence/learn-discoverability-crawler.png",
        "evidence/learn-discoverability-rendered.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Exercised dialogs and inspected edge behavior at desktop/mobile sizes.",
      "evidence": "Dialogs remain visible and dismissible, puzzle state proceeds after dismissal, and no overflow or blank runtime state appeared.",
      "pathIds": [
        "home",
        "home-mobile",
        "puzzles"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/puzzle-flow.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Fetched the web app manifest and checked active service-worker control.",
      "evidence": "A valid standalone manifest exists, but the page has no service-worker controller, so this app-like site lacks an observed offline fallback.",
      "findingIds": [
        "F19"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-global-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Requested a nonexistent HTTP route.",
      "evidence": "The 404 state is explicit and offers a Return Home action rather than a blank shell.",
      "pathIds": [
        "error-404"
      ],
      "artifacts": [
        "evidence/404.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected root language/direction and language controls.",
      "evidence": "The document declares lang=en-US and dir=ltr and exposes a Change Language control.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/puzzles-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "low",
      "method": "Inspected representative rendered pages and locale controls.",
      "evidence": "The tested English locale presents localized text and a language switcher; no malformed hand-built date, number, or currency formatting appeared.",
      "pathIds": [
        "home",
        "learn",
        "puzzles"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Reviewed the representative homepage, learning, puzzle, and login paths for time-sensitive data.",
      "evidence": "The audited states do not display scheduled times or time-zone-sensitive event data, so time-zone arithmetic is not applicable to these paths.",
      "reason": "The audited states do not display scheduled times or time-zone-sensitive event data, so time-zone arithmetic is not applicable to these paths.",
      "pathIds": [
        "home",
        "learn",
        "puzzles",
        "login"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Reviewed consent, login, and puzzle entry states.",
      "evidence": "Consent offers equally prominent Accept and Reject All actions; login exposes recovery and sign-up links without disguised commitments.",
      "pathIds": [
        "home",
        "login"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/login.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Submitted the empty login form after rejecting consent.",
      "evidence": "Required fields use native validation messages and the page adds a visible “Please complete the security check to continue” recovery message.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-invalid.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected login field labels and autocomplete tokens.",
      "evidence": "Visible username/email and password controls have accessible names and use email/current-password autocomplete; Remember me is explicitly labelled.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Reviewed the accessible logged-out account entry surface.",
      "evidence": "Login clearly separates password and federated options, includes Forgot Password, and labels sign-up as a separate next step without hidden pricing.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login.png",
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Ran image audit and reviewed HAR image delivery.",
      "evidence": "Eight images are oversized, six lack srcset, and Lighthouse estimates 142KiB image-delivery savings.",
      "findingIds": [
        "F12"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Reviewed network composition and Lighthouse code-usage diagnostics.",
      "evidence": "The initial logged-out page ships 89 scripts while Lighthouse estimates 1,167KiB unused JavaScript, indicating avoidable work.",
      "findingIds": [
        "F11"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Captured HAR and probed media under reduced motion.",
      "evidence": "The 4.0MB load includes a 450KB autoplay hero video and substantial consent/third-party code before user action.",
      "findingIds": [
        "F20"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/reduced-motion.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected rendered DOM, forms, and exposed browser capabilities for agent tool registration.",
      "evidence": "Agent-facing tool exposure is emerging and Chess.com does not declare an intent to expose gameplay/account actions to agents; absence is treated as an opportunity, not a failure.",
      "reason": "Agent-facing tool exposure is emerging and Chess.com does not declare an intent to expose gameplay/account actions to agents; absence is treated as an opportunity, not a failure.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected public page scripts/capability probes for built-in AI surfaces.",
      "evidence": "No user-facing summarization or language-model task exists on the audited paths, so on-device inference is not applicable.",
      "reason": "No user-facing summarization or language-model task exists on the audited paths, so on-device inference is not applicable.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "low",
      "method": "Compared heap summaries before and after ten puzzle settings open/close attempts.",
      "evidence": "Heap self size rose only 322,955 bytes (0.24%) and node count 12,219 (0.62%), which is bounded under this short repeated interaction.",
      "pathIds": [
        "puzzles"
      ],
      "artifacts": [
        "evidence/puzzles-heap-baseline.heapsnapshot",
        "evidence/puzzles-heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "Captured a V8 heap summary on the interactive puzzle page.",
      "evidence": "The post-interaction footprint is 135,736,202 self-size bytes across 1,977,075 nodes, high for a single logged-out puzzle surface.",
      "findingIds": [
        "F21"
      ],
      "pathIds": [
        "puzzles"
      ],
      "artifacts": [
        "evidence/puzzles-heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "low",
      "method": "Compared heap type/constructor summaries before and after repeated interaction.",
      "evidence": "No Detached* constructor appears among dominant retained constructors and total growth stayed below 1%; no accumulation signal was observed in this bounded run.",
      "pathIds": [
        "puzzles"
      ],
      "artifacts": [
        "evidence/puzzles-heap-baseline.heapsnapshot",
        "evidence/puzzles-heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03",
        "F04"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10",
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F07",
        "F08",
        "F06"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F12",
        "F11",
        "F20"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Agent-facing tool exposure is emerging and Chess.com does not declare an intent to expose gameplay/account actions to agents; absence is treated as an opportunity, not a failure. No user-facing summarization or language-model task exists on the audited paths, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Public landing page and global navigation; represents marketing/content shell and global privacy UI.",
      "url": "https://www.chess.com/",
      "conditions": [
        "desktop",
        "prefers-color-scheme light/dark",
        "prefers-reduced-motion reduce",
        "forced-colors active"
      ],
      "result": "issues"
    },
    {
      "id": "home-mobile",
      "description": "Landing page at 360x800; represents narrow reflow and touch layout.",
      "url": "https://www.chess.com/",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "computer",
      "description": "Play against computer; represents interactive game-board layout.",
      "url": "https://www.chess.com/play/computer",
      "conditions": [
        "desktop",
        "viewport 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "puzzles",
      "description": "Logged-out puzzle journey; represents board interaction, onboarding dialogs, and repeated settings interaction.",
      "url": "https://www.chess.com/puzzles",
      "conditions": [
        "desktop",
        "10 repeated interactions"
      ],
      "result": "issues"
    },
    {
      "id": "learn",
      "description": "Learning index; represents content/listing discoverability and no-JavaScript resilience.",
      "url": "https://www.chess.com/learn",
      "conditions": [
        "browser rendered",
        "crawler/no JavaScript"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Login route; represents authentication, form assistance, invalid submission, and recovery.",
      "url": "https://www.chess.com/login_and_go",
      "conditions": [
        "desktop",
        "empty invalid submission"
      ],
      "result": "issues"
    },
    {
      "id": "error-404",
      "description": "Nonexistent route; represents HTTP error and recovery state.",
      "url": "https://www.chess.com/definitely-not-a-real-page-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    },
    {
      "id": "register",
      "description": "Registration route was sampled but Cloudflare bot verification blocked the form; login was used as the representative account-entry form. Authenticated, paid, account-management, live-game, and checkout surfaces remain outside this logged-out representative set.",
      "url": "https://www.chess.com/register",
      "conditions": [
        "desktop"
      ],
      "result": "failed"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent obscures the homepage on every fresh visit.",
      "evidence": "Desktop and mobile first-load screenshots show the consent panel occupying nearly the entire usable viewport before core content.",
      "suggestedFix": "Use a compact, non-blocking consent surface for optional processing; keep Reject All immediately available and defer non-essential vendors until a choice.",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "pathId": "home",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "id": "F02",
      "severity": "high",
      "confidence": "high",
      "summary": "Puzzles stacks two blocking dialogs at once.",
      "evidence": "The Puzzles screenshot shows a centered introduction dialog while the consent dialog simultaneously spans the bottom and dims the board.",
      "suggestedFix": "Sequence onboarding only after consent is resolved, or remove the redundant onboarding interruption and let users begin directly.",
      "effort": "small",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "pathId": "puzzles",
      "artifacts": [
        "evidence/puzzles.png"
      ]
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "summary": "Theme does not follow the system color preference.",
      "evidence": "Emulated light and dark screenshots are identical and the root remains color-scheme: dark.",
      "suggestedFix": "Declare supported color schemes and map tokens through prefers-color-scheme/light-dark(), while preserving an explicit user override.",
      "effort": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "pathId": "home",
      "artifacts": [
        "evidence/home-light.png",
        "evidence/home-dark.png",
        "evidence/preferences.json"
      ]
    },
    {
      "id": "F04",
      "severity": "medium",
      "confidence": "high",
      "summary": "Autoplay hero media continues under reduced motion.",
      "evidence": "With prefers-reduced-motion: reduce, the video is autoplaying and not paused at 5.15 seconds.",
      "suggestedFix": "Disable autoplay or replace moving hero media with a static poster under reduced motion, with an explicit play control.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "pathId": "home",
      "artifacts": [
        "evidence/reduced-motion.json"
      ]
    },
    {
      "id": "F05",
      "severity": "medium",
      "confidence": "high",
      "summary": "Mobile menu controls lack accessible names.",
      "evidence": "Lighthouse identifies the mobile toolbar expand button, and the DOM probe finds two unlabeled toolbar buttons.",
      "suggestedFix": "Add concise aria-label values such as “Open menu” and “Close menu”, preserving button semantics.",
      "effort": "trivial",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "pathId": "home",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/dom-a11y-probe.json"
      ]
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several tap targets are too short.",
      "evidence": "DOM measurement finds footer links with rendered target heights of 18px and a vendor button at 20.8px.",
      "suggestedFix": "Increase the clickable area to at least 24px, preferably 44 CSS px, using padding without shrinking visible spacing.",
      "effort": "small",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "pathId": "home",
      "artifacts": [
        "evidence/dom-a11y-probe.json"
      ]
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "summary": "Consent action text fails color contrast.",
      "evidence": "Lighthouse computes 2.4:1 for white text on #81b64c for both Accept and Reject All, below 4.5:1.",
      "suggestedFix": "Darken the green button background or use a darker text color so normal-size labels reach 4.5:1.",
      "effort": "trivial",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "pathId": "home",
      "artifacts": [
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "id": "F08",
      "severity": "low",
      "confidence": "high",
      "summary": "Heading outlines contain duplicates and pre-H1 headings.",
      "evidence": "Homepage DOM has two Search H2 elements before its H1; Puzzles exposes two H1 elements.",
      "suggestedFix": "Keep one page H1, hide inactive duplicate UI from the accessibility tree, and place Search labels in an appropriate landmark rather than heading rank.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "pathId": "home",
      "artifacts": [
        "evidence/dom-a11y-probe.json",
        "evidence/puzzles-probe.json"
      ]
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "summary": "Largest Contentful Paint is slow and main-thread work is elevated.",
      "evidence": "Lighthouse reports LCP 4.6s, TBT 260ms, and 2.6s main-thread work; trace LCP is 3.09s.",
      "suggestedFix": "Prioritize the LCP candidate, defer non-critical consent/configuration bundles, and split post-load work into prioritized tasks.",
      "effort": "large",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "pathId": "home",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "summary": "Initial delivery is heavy and render-blocking.",
      "evidence": "HAR records 159 requests, 4.04MB transferred, 28 stylesheets, and 89 scripts; Lighthouse estimates 910ms render-blocking savings.",
      "suggestedFix": "Inline only critical CSS, consolidate/defer route CSS, preload only the true LCP resource, and postpone non-essential vendor scripts.",
      "effort": "large",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "pathId": "home",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage ships substantial unused JavaScript.",
      "evidence": "Lighthouse estimates 1,167KiB unused JavaScript and 31KiB unused CSS; scripts account for 2.71MB transferred.",
      "suggestedFix": "Use route/component code splitting and conditional async loading for consent, monitoring, and features not needed for the logged-out first view.",
      "effort": "large",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "pathId": "home",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F12",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image sizing and responsive delivery are incomplete.",
      "evidence": "Image audit finds one missing dimension, eight oversized assets, and six images without srcset; Lighthouse estimates 142KiB savings.",
      "suggestedFix": "Set intrinsic width/height, generate srcset/sizes variants, and select image dimensions close to rendered size.",
      "effort": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "pathId": "home",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "id": "F13",
      "severity": "low",
      "confidence": "high",
      "summary": "Chrome reports unresolved Inspector Issues.",
      "evidence": "Lighthouse best-practices is 0.77 and records cookie-related Issues panel entries.",
      "suggestedFix": "Resolve the reported cookie posture and rerun DevTools Issues/Lighthouse until no browser issues remain.",
      "effort": "small",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "security",
      "pathId": "home",
      "artifacts": [
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "summary": "The response lacks a complete browser defense policy.",
      "evidence": "CSP is only “frame-ancestors self”; Referrer-Policy and Permissions-Policy are absent, though HSTS/nosniff/frame protection pass.",
      "suggestedFix": "Deploy a nonce/hash-based CSP covering scripts and other resource types, plus explicit Referrer-Policy and least-privilege Permissions-Policy.",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "pathId": "home",
      "artifacts": [
        "evidence/headers.json"
      ]
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "summary": "Six first-party cookies omit Secure.",
      "evidence": "Cookie audit marks me, ATTRIBUTION_V1, visitorid, and OptanonConsent among six cookies without Secure; SameSite=None also appears.",
      "suggestedFix": "Mark all HTTPS cookies Secure, review SameSite=None necessity, and keep session/auth-like values HttpOnly.",
      "effort": "small",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "pathId": "home",
      "artifacts": [
        "evidence/cookies.json"
      ]
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "summary": "Fresh load has a broad third-party/consent footprint.",
      "evidence": "Tracker scan sees seven third-party origins including Sentry; consent/vendor resources are among the largest and slowest requests.",
      "suggestedFix": "Block optional analytics and vendor requests until consent, minimize vendor list/config downloads, and batch necessary telemetry.",
      "effort": "large",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "pathId": "home",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "summary": "Authentication offers no phishing-resistant passkey path.",
      "evidence": "Login markup and visible text provide password and federated providers but no passkey or WebAuthn option.",
      "suggestedFix": "Add passkey registration and sign-in, including conditional mediation where supported, while retaining existing recovery methods.",
      "effort": "large",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "pathId": "login",
      "artifacts": [
        "evidence/login-probe.json"
      ]
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "Learn is effectively empty without JavaScript.",
      "evidence": "Discoverability reports 6% raw-content coverage and classifies /learn as a JS shell; the crawler screenshot contains only navigation chrome.",
      "suggestedFix": "Server-render the lesson categories and primary links, then hydrate enhancements so core learning content remains useful without JavaScript.",
      "effort": "large",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "flicker-free-client-side-ab-testing",
      "pathId": "learn",
      "artifacts": [
        "evidence/learn-discoverability.json",
        "evidence/learn-discoverability-crawler.png",
        "evidence/learn-discoverability-rendered.png"
      ]
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "The app manifest has no observed offline service-worker control.",
      "evidence": "manifest.json defines standalone installability, but navigator.serviceWorker.controller is false.",
      "suggestedFix": "Add a conservative service worker with an offline shell/fallback and cache only stable, privacy-safe core assets.",
      "effort": "large",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "performance",
      "pathId": "home",
      "artifacts": [
        "evidence/site-global-probe.json"
      ]
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "summary": "Autoplay media and vendor payload inflate the initial resource budget.",
      "evidence": "A 450KB hero WebM is fetched and autoplayed before interaction; total transfer is 4.04MB.",
      "suggestedFix": "Use a static poster by default, load/play video after intent or when visible, and defer consent/vendor payloads until required.",
      "effort": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "pathId": "home",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/reduced-motion.json"
      ]
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "medium",
      "summary": "The logged-out puzzle heap is large.",
      "evidence": "Post-interaction heap summary contains 1,977,075 nodes and 135,736,202 self-size bytes, despite small growth during the repeated action.",
      "suggestedFix": "Profile dominant native/code allocations, unload route-only modules and canvas resources, and set a memory budget for the puzzle surface.",
      "effort": "large",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "manage-recurring-intervals",
      "pathId": "puzzles",
      "artifacts": [
        "evidence/puzzles-heap-post.heapsnapshot"
      ]
    },
    {
      "id": "F22",
      "severity": "low",
      "confidence": "low",
      "summary": "Primary route changes do not provide continuity.",
      "evidence": "Public nav uses ordinary destination links and no View Transition integration was observed across the captured homepage, Learn, and Puzzles states.",
      "suggestedFix": "Add cross-document view transitions for same-origin navigation, respecting reduced motion and keeping transitions subtle.",
      "effort": "medium",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "performance",
      "pathId": "home",
      "artifacts": [
        "evidence/home-dom.json"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Remove or sequence first-load blocking dialogs",
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "priority": 1,
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Cut LCP, render-blocking CSS, and initial JavaScript",
      "findingIds": [
        "F09",
        "F10",
        "F11"
      ],
      "guidanceId": "performance",
      "priority": 2,
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Strengthen CSP, browser policies, and cookie flags",
      "findingIds": [
        "F14",
        "F15"
      ],
      "guidanceId": "security",
      "priority": 3,
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Server-render the Learn route core content",
      "findingIds": [
        "F18"
      ],
      "guidanceId": "flicker-free-client-side-ab-testing",
      "priority": 4,
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Fix accessible names, contrast, targets, and headings",
      "findingIds": [
        "F05",
        "F06",
        "F07",
        "F08"
      ],
      "guidanceId": "accessibility",
      "priority": 5,
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Minimize third-party and autoplay resource use",
      "findingIds": [
        "F16",
        "F20"
      ],
      "guidanceId": "privacy",
      "priority": 6,
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Optimize responsive images and dimensions",
      "findingIds": [
        "F12"
      ],
      "guidanceId": "optimize-image-priority",
      "priority": 7,
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Add passkey authentication",
      "findingIds": [
        "F17"
      ],
      "guidanceId": "passkeys",
      "priority": 8,
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Respect system theme and reduced-motion preferences",
      "findingIds": [
        "F03",
        "F04"
      ],
      "guidanceId": "dark-mode",
      "priority": 9,
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Add an offline fallback and reduce puzzle heap",
      "findingIds": [
        "F19",
        "F21"
      ],
      "guidanceId": "performance",
      "priority": 10,
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Add subtle route View Transitions",
      "findingIds": [
        "F22"
      ],
      "guidanceId": "performance",
      "priority": 11,
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Clear remaining browser Inspector Issues",
      "findingIds": [
        "F13"
      ],
      "guidanceId": "security",
      "priority": 12,
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1500,
    "pathCount": 8,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T19-06-49-354Z"
}
