{
  "url": "https://cardgames.io",
  "auditedAt": "2026-07-17T21:36:22.272Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Atomic coverage complete: 58/58 checks judged across five representative paths.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered HTML with jQuery/game scripts",
    "notes": "Public multilingual card-game catalog and app-like game templates. Covered homepage, single-player, multiplayer, personalization, and 404; did not cover all games because they reuse shared templates, nor multiplayer matchmaking completion or the hidden report submission."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "directional-navigation-transitions",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "forms",
    "optimize-script-priority",
    "identify-heavy-scripts",
    "html",
    "search-hidden-content",
    "security",
    "privacy",
    "performance",
    "css",
    "efficient-background-processing",
    "move-dom-element-without-losing-state"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home",
      "findingIds": [
        "F05",
        "F18",
        "F23"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "mobile",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "contrast",
      "findingIds": [
        "F03",
        "F12"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/solitaire-desktop.png",
      "caption": "sol",
      "findingIds": [
        "F04",
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/solitaire-mobile.png",
      "caption": "solm",
      "findingIds": [
        "F05",
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/hearts-desktop.png",
      "caption": "hearts",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/avatars-desktop.png",
      "caption": "avatars",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "layout",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/solitaire-mobile-layout.json",
      "caption": "sollayout",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lh",
      "findingIds": [
        "F08",
        "F10",
        "F11"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-solitaire.json",
      "caption": "lhsol",
      "findingIds": [
        "F03",
        "F10",
        "F11",
        "F12",
        "F13",
        "F14"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "har",
      "findingIds": [
        "F09"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-summary.json",
      "caption": "hars",
      "findingIds": [
        "F09",
        "F10",
        "F18",
        "F23"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "trace",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "traces",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F17",
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability-home.json",
      "caption": "disc",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability-solitaire.json",
      "caption": "discsol",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/interaction-a11y-probe.json",
      "caption": "probe",
      "findingIds": [
        "F06",
        "F08",
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-css-probe.json",
      "caption": "prefs",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform",
      "findingIds": [
        "F02",
        "F20",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/modern-css-forms.json",
      "caption": "modern",
      "findingIds": [
        "F04",
        "F06",
        "F21",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/runtime-capabilities.json",
      "caption": "runtime",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/indexing.json",
      "caption": "indexing",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "notfound",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap1",
      "findingIds": [
        "F24"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-menu.json",
      "caption": "heap2",
      "findingIds": [
        "F24"
      ]
    }
  ],
  "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": "media-emulated screenshot and computed CSS/animation probe",
      "evidence": "The dark-emulated screenshot is visually unchanged from the normal capture; the computed root color-scheme is normal and the CSS probe found no prefers-color-scheme rule.",
      "findingIds": [
        "F01"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-high-contrast.png",
        "evidence/preferences-css-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "media-emulated screenshot and computed CSS/animation probe",
      "evidence": "Under prefers-reduced-motion: reduce the stylesheet probe found no reduced-motion rule, while the page loads fireworks effects and exposes confetti/holiday-effect settings.",
      "findingIds": [
        "F02"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-high-contrast.png",
        "evidence/preferences-css-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "media-emulated screenshot and computed CSS/animation probe",
      "evidence": "The prefers-contrast screenshot remains visually unchanged; Lighthouse reports contrast failures including 2.19:1 themed links and 4.42:1 consent action text.",
      "findingIds": [
        "F03"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-high-contrast.png",
        "evidence/preferences-css-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "DOM/CSS signal inspection plus representative state/navigation review",
      "evidence": "DOM/CSS inspection found no view-transition usage, while primary actions and full-page game links replace state without directional continuity.",
      "findingIds": [
        "F04"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/modern-css-forms.json",
        "evidence/solitaire-desktop.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/CSS signal inspection plus representative state/navigation review",
      "evidence": "No scroll-linked animation or scrollytelling surface was present on the representative templates.",
      "reason": "No scroll-linked animation or scrollytelling surface was present on the representative templates."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/CSS signal inspection plus representative state/navigation review",
      "evidence": "No swipe, pull, carousel, or gesture-driven primary interaction was present; card moves are click/tap game actions.",
      "reason": "No swipe, pull, carousel, or gesture-driven primary interaction was present; card moves are click/tap game actions."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "desktop/mobile screenshots, DOM landmarks, and invalid-route journey",
      "evidence": "Desktop/mobile screenshots and DOM inspection show persistent, compact navigation without a scroll-dependent orientation failure; the long page remains navigable.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/solitaire-desktop.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "desktop/mobile screenshots, DOM landmarks, and invalid-route journey",
      "evidence": "No tooltip, anchored popover, or edge-positioned menu requiring anchor positioning was found.",
      "reason": "No tooltip, anchored popover, or edge-positioned menu requiring anchor positioning was found."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "desktop/mobile screenshots, DOM landmarks, and invalid-route journey",
      "evidence": "Game titles, board framing, persistent top links, and the tested 404 page provide visible orientation and next destinations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/solitaire-desktop.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "first-load screenshots and semantic overlay DOM probe",
      "evidence": "Desktop and 360 px screenshots show an opaque modal over the primary content before interaction; on mobile it consumes nearly the full viewport.",
      "findingIds": [
        "F05"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/modern-css-forms.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "first-load screenshots and semantic overlay DOM probe",
      "evidence": "DOM inspection found zero dialog, popover, or details elements but two role=dialog custom divs, including the blocking consent UI.",
      "findingIds": [
        "F06"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/modern-css-forms.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "first-load screenshots and semantic overlay DOM probe",
      "evidence": "After accounting for the separately reported consent wall, screenshots show the board/catalog as the dominant surface with compact persistent navigation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/modern-css-forms.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "360x800 layout metrics, screenshots, Lighthouse and focus/target probe",
      "evidence": "Layout at 360x800 reports scrollWidth=clientWidth=360 and zero overflow on home and Solitaire, with viewport meta present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/solitaire-mobile-layout.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "360x800 layout metrics, screenshots, Lighthouse and focus/target probe",
      "evidence": "Desktop/mobile screenshots show catalog, board, navigation, and consent components reflow to their available width without clipping.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/solitaire-mobile-layout.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "360x800 layout metrics, screenshots, Lighthouse and focus/target probe",
      "evidence": "Lighthouse identifies the 40x32 mobile-menu button with no accessible name and multiple social links only 17 px high; keyboard focus itself is visible when present.",
      "findingIds": [
        "F08"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/solitaire-mobile-layout.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "representative homepage/game/settings/404 walkthrough",
      "evidence": "Titles, game catalog labels, visible boards, and game controls clearly communicate the purpose and next action on all representative paths.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/solitaire-desktop.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "representative homepage/game/settings/404 walkthrough",
      "evidence": "Every representative game screenshot shows the consent wall covering the board and controls on first visit, adding a required detour before play.",
      "findingIds": [
        "F07"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/solitaire-desktop.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "representative homepage/game/settings/404 walkthrough",
      "evidence": "The invalid-route probe renders a descriptive PAGE NOT FOUND state, apology, and extensive recovery links; game pages expose pause/restart/status controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/solitaire-desktop.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "pass",
      "confidence": "high",
      "method": "trace summary, mobile layout observers, HAR summary, and Lighthouse",
      "evidence": "Trace gives LCP 1.06 s and TBT 18.79 ms; Lighthouse gives LCP 1.7-1.9 s, CLS 0, TBT 120-140 ms and performance 0.96.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "trace summary, mobile layout observers, HAR summary, and Lighthouse",
      "evidence": "Mobile layouts report CLS 0.00032 on home and 0 on Solitaire with no horizontal overflow; Lighthouse CLS is 0.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "trace summary, mobile layout observers, HAR summary, and Lighthouse",
      "evidence": "Trace records one 68.79 ms long task and 18.79 ms TBT; Lighthouse TBT remains 120-140 ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "trace summary, mobile layout observers, HAR summary, and Lighthouse",
      "evidence": "HAR: 89 requests and 1,854,791 transferred bytes; 19 third-party requests transfer 701,861 bytes, including 403 KB from the CMP and 299 KB from Google tags.",
      "findingIds": [
        "F09"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "trace summary, mobile layout observers, HAR summary, and Lighthouse",
      "evidence": "The two Google tag scripts alone transfer about 299 KB, the CMP SDK about 127 KB, and Lighthouse interactive time is 9.2-10.0 s despite good paint metrics.",
      "findingIds": [
        "F10"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus DOM heading/landmark/focus/target probe",
      "evidence": "Lighthouse button-name fails on button#mobile-menu on both homepage and Solitaire; it has no text, aria-label, aria-labelledby, or title.",
      "findingIds": [
        "F11"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/interaction-a11y-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus DOM heading/landmark/focus/target probe",
      "evidence": "Lighthouse reports themed links at 2.19:1, board text at 3.77:1, and the accept button at 4.42:1 against a 4.5:1 requirement.",
      "findingIds": [
        "F12"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/interaction-a11y-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus DOM heading/landmark/focus/target probe",
      "evidence": "Lighthouse reports New Game, Restart, Pause, and Options hash links as skip links without valid targets; the document also contains two H1 elements in game state.",
      "findingIds": [
        "F13"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/interaction-a11y-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility plus DOM heading/landmark/focus/target probe",
      "evidence": "Representative screenshots show readable body/rules text with stable wrapping; specific measured contrast defects are recorded separately.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/interaction-a11y-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility plus DOM heading/landmark/focus/target probe",
      "evidence": "The viewport permits scaling and both 360 px layouts reflow without overflow; target-size defects are recorded under input modality.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/interaction-a11y-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse best-practices plus document/script/asset probes",
      "evidence": "Lighthouse reports no console-error or uncaught-exception audit failure on either homepage or Solitaire.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse best-practices plus document/script/asset probes",
      "evidence": "DOM evidence confirms HTML doctype, UTF-8 charset and viewport metadata; Lighthouse homepage best-practices score is 1.0.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices plus document/script/asset probes",
      "evidence": "Lighthouse best-practices is 0.77 on Solitaire and reports an Issues-panel third-party-cookie problem from a.pub.network.",
      "findingIds": [
        "F14"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "raw-vs-rendered discoverability, metadata/robots/sitemap probe, and Lighthouse SEO",
      "evidence": "DOM probes show descriptive titles and a non-empty description meta value on the public templates.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/indexing.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "raw-vs-rendered discoverability, metadata/robots/sitemap probe, and Lighthouse SEO",
      "evidence": "Rendered links use real hrefs, viewport meta is present, robots.txt does not block crawling, and Lighthouse SEO is 1.0.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/indexing.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "raw-vs-rendered discoverability, metadata/robots/sitemap probe, and Lighthouse SEO",
      "evidence": "A request to /sitemap.xml returns the site’s Page Not Found HTML; robots.txt is empty. Canonical and hreflang signals otherwise exist.",
      "findingIds": [
        "F15"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/indexing.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "raw-vs-rendered discoverability, metadata/robots/sitemap probe, and Lighthouse SEO",
      "evidence": "Open Graph metadata exists, but DOM inspection found no JSON-LD on the homepage despite the site representing a collection of playable games.",
      "findingIds": [
        "F16"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/indexing.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "headers, cookies, tracker, HAR, and secret scans",
      "evidence": "HTTPS, HSTS, nosniff and X-Frame-Options are present, but CSP is absent; both observed first-party cookies lack Secure and country uses SameSite=None.",
      "findingIds": [
        "F17"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "headers, cookies, tracker, HAR, and secret scans",
      "evidence": "The banner names 1,017 partners; the load contacts four third-party origins and known Google trackers, transferring 701,861 third-party bytes. No sensitive secret was exposed.",
      "findingIds": [
        "F18"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "headers, cookies, tracker, HAR, and secret scans",
      "evidence": "The audited public games require neither browser permissions nor authentication.",
      "reason": "The audited public games require neither browser permissions nor authentication."
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "headers, cookies, tracker, HAR, and secret scans",
      "evidence": "Headers evidence shows no Content-Security-Policy or Permissions-Policy; HSTS, framing, referrer and nosniff protections are present.",
      "findingIds": [
        "F19"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "raw HTML comparison, manifest/service-worker probe, representative overlays and 404 state",
      "evidence": "Discoverability shows 85-86% rendered-word coverage in raw HTML, with title and H1 present and no empty JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/runtime-capabilities.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "raw HTML comparison, manifest/service-worker probe, representative overlays and 404 state",
      "evidence": "Representative mobile/desktop captures show board and consent overlays contained by the viewport; focus and navigation remain available.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/runtime-capabilities.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "raw HTML comparison, manifest/service-worker probe, representative overlays and 404 state",
      "evidence": "A valid standalone manifest exists, but navigator.serviceWorker.getRegistrations() returned no registrations on Solitaire.",
      "findingIds": [
        "F20"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/runtime-capabilities.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "raw HTML comparison, manifest/service-worker probe, representative overlays and 404 state",
      "evidence": "The invalid route renders a useful 404 page with clear recovery links rather than a blank shell or infinite spinner.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-solitaire.json",
        "evidence/runtime-capabilities.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "lang/hreflang/dir and CSS/locale-surface inspection",
      "evidence": "The page publishes six hreflang locales and correct lang=en, but stylesheet inspection found no logical-property signal in the inspected rules and no dir declaration.",
      "findingIds": [
        "F21"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/modern-css-forms.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "lang/hreflang/dir and CSS/locale-surface inspection",
      "evidence": "Representative pages expose no dates, currencies, or locale-sensitive numeric data requiring Intl formatting.",
      "reason": "Representative pages expose no dates, currencies, or locale-sensitive numeric data requiring Intl formatting."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "lang/hreflang/dir and CSS/locale-surface inspection",
      "evidence": "No events, schedules, recurring times, or time-zone-sensitive data are part of the audited journeys.",
      "reason": "No events, schedules, recurring times, or time-zone-sensitive data are part of the audited journeys."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "consent/game/form/404 walkthrough and DOM form inspection",
      "evidence": "Consent presents Reject All and Accept with equal prominence, games require no signup/payment, and no forced continuity was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/modern-css-forms.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "consent/game/form/404 walkthrough and DOM form inspection",
      "evidence": "The available report form has explicit labels and the invalid-route state uses neutral language plus recovery links; no blaming or premature error state was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/modern-css-forms.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "consent/game/form/404 walkthrough and DOM form inspection",
      "evidence": "DOM inspection found labelled name, email, description, device, and location fields, but every field has an empty autocomplete attribute value.",
      "findingIds": [
        "F22"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/modern-css-forms.json",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "consent/game/form/404 walkthrough and DOM form inspection",
      "evidence": "No checkout, subscription, authentication, or account-management flow exists in the audited scope.",
      "reason": "No checkout, subscription, authentication, or account-management flow exists in the audited scope."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "HAR resource budget, image audit, trace and screenshots",
      "evidence": "The image audit found no oversized rendered images and no missing srcset on the inspected image elements; the material page-weight issue is recorded under media budget.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/images.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "HAR resource budget, image audit, trace and screenshots",
      "evidence": "Trace shows only one short long task and low TBT over 6.5 seconds, with no evidence of continuous background CPU work.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/images.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR resource budget, image audit, trace and screenshots",
      "evidence": "HAR transfers 1.85 MB on the homepage: 702 KB third party and 1.05 MB images, including a 156 KB decorative stadium image and multiple tag/CMP bundles.",
      "findingIds": [
        "F23"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/images.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/script capability probe and contextual applicability review",
      "evidence": "Agent readiness is emerging and contextual; this free card-game site exposes no transactional agent-facing workflow, so absence is not penalized.",
      "reason": "Agent readiness is emerging and contextual; this free card-game site exposes no transactional agent-facing workflow, so absence is not penalized."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/script capability probe and contextual applicability review",
      "evidence": "No summarization, language-model, or other inference task is part of the card-game experience; absence is not penalized.",
      "reason": "No summarization, language-model, or other inference task is part of the card-game experience; absence is not penalized."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "issues",
      "confidence": "medium",
      "method": "baseline and post-interaction heap summaries with DOM/runtime corroboration",
      "evidence": "Heap summaries rise from 17,365,169 bytes/364,950 nodes to 24,988,197 bytes/530,849 nodes after ten menu open/close cycles. The separate-session comparison makes confidence medium and does not isolate a constructor leak.",
      "findingIds": [
        "F24"
      ],
      "pathIds": [
        "solitaire"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-menu.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "baseline and post-interaction heap summaries with DOM/runtime corroboration",
      "evidence": "Baseline heap is 17.37 MB for an interactive game plus consent UI, proportionate to this surface; no single constructor dominates unexpectedly.",
      "pathIds": [
        "solitaire"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-menu.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "baseline and post-interaction heap summaries with DOM/runtime corroboration",
      "evidence": "Neither heap summary lists a Detached* constructor among the largest populations; repeated-growth uncertainty is recorded separately.",
      "pathIds": [
        "solitaire"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-menu.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Agent readiness is emerging and contextual; this free card-game site exposes no transactional agent-facing workflow, so absence is not penalized. No summarization, language-model, or other inference task is part of the card-game experience; absence is not penalized."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F24"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and game catalog, representing discovery, navigation, consent, and public content.",
      "url": "https://cardgames.io/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-contrast: more",
        "prefers-reduced-motion: reduce",
        "JavaScript disabled crawler view"
      ],
      "result": "issues"
    },
    {
      "id": "solitaire",
      "description": "Solitaire, representing the primary single-player game template and repeated menu interaction.",
      "url": "https://cardgames.io/solitaire/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "keyboard focus",
        "JavaScript disabled crawler view",
        "heap before/after repeated menu interaction"
      ],
      "result": "issues"
    },
    {
      "id": "hearts",
      "description": "Hearts, representing multiplayer/table-game templates and player state.",
      "url": "https://cardgames.io/hearts/",
      "conditions": [
        "desktop 1440x1000"
      ],
      "result": "issues"
    },
    {
      "id": "avatars",
      "description": "Player avatar customization, representing settings and saved personalization.",
      "url": "https://cardgames.io/avatars/",
      "conditions": [
        "desktop 1440x1000"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Invalid game route, representing HTTP/navigation recovery.",
      "url": "https://cardgames.io/not-a-real-game-audit-test/",
      "conditions": [
        "desktop DOM evaluation"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site does not follow the system dark-color preference.",
      "evidence": "The dark-emulated screenshot is visually unchanged from the normal capture; the computed root color-scheme is normal and the CSS probe found no prefers-color-scheme rule.",
      "suggestedFix": "Declare color-scheme and provide system-driven dark surface/text tokens, retaining the existing manual preference as an override.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/preferences-css-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "summary": "Motion preferences are not wired to the game’s effects.",
      "evidence": "Under prefers-reduced-motion: reduce the stylesheet probe found no reduced-motion rule, while the page loads fireworks effects and exposes confetti/holiday-effect settings.",
      "suggestedFix": "Add a prefers-reduced-motion: reduce layer that disables fireworks, confetti, decorative transitions, and auto motion.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/preferences-css-probe.json",
        "evidence/platform-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F03",
      "severity": "medium",
      "confidence": "high",
      "summary": "High-contrast preferences do not change the interface, and controls retain contrast failures.",
      "evidence": "The prefers-contrast screenshot remains visually unchanged; Lighthouse reports contrast failures including 2.19:1 themed links and 4.42:1 consent action text.",
      "suggestedFix": "Use forced-colors/prefers-contrast styles and system colors for controls, text, and focus indicators.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "artifacts": [
        "evidence/home-high-contrast.png",
        "evidence/lighthouse-solitaire.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F04",
      "severity": "low",
      "confidence": "high",
      "summary": "Game and route state changes are abrupt.",
      "evidence": "DOM/CSS inspection found no view-transition usage, while primary actions and full-page game links replace state without directional continuity.",
      "suggestedFix": "Progressively enhance same-document game state and cross-document game navigation with View Transitions, with reduced-motion handling.",
      "effort": "medium",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "directional-navigation-transitions",
      "artifacts": [
        "evidence/modern-css-forms.json",
        "evidence/solitaire-desktop.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "summary": "A first-visit consent wall obscures the entire catalog and every game.",
      "evidence": "Desktop and 360 px screenshots show an opaque modal over the primary content before interaction; on mobile it consumes nearly the full viewport.",
      "suggestedFix": "Minimize the initial consent surface, keep equal accept/reject controls, and avoid blocking access to the game where legally possible.",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/solitaire-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "summary": "Overlays are custom ARIA divs rather than native dialog/popover primitives.",
      "evidence": "DOM inspection found zero dialog, popover, or details elements but two role=dialog custom divs, including the blocking consent UI.",
      "suggestedFix": "Use dialog for modal flows and popover/details for transient disclosure, preserving focus management and light-dismiss semantics.",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "artifacts": [
        "evidence/modern-css-forms.json",
        "evidence/interaction-a11y-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "summary": "The primary play journey is interrupted before users can interact.",
      "evidence": "Every representative game screenshot shows the consent wall covering the board and controls on first visit, adding a required detour before play.",
      "suggestedFix": "Allow immediate non-tracking play or reduce consent to a compact, clearly reversible choice that does not cover the board.",
      "effort": "medium",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "artifacts": [
        "evidence/solitaire-desktop.png",
        "evidence/hearts-desktop.png",
        "evidence/solitaire-mobile.png"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some controls are inaccessible or too small for non-pointer users.",
      "evidence": "Lighthouse identifies the 40x32 mobile-menu button with no accessible name and multiple social links only 17 px high; keyboard focus itself is visible when present.",
      "suggestedFix": "Name the menu button and enlarge/space interactive targets to at least the guidance minimum while retaining focus-visible styling.",
      "effort": "small",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/interaction-a11y-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "summary": "Non-critical consent and analytics dependencies dominate the initial network.",
      "evidence": "HAR: 89 requests and 1,854,791 transferred bytes; 19 third-party requests transfer 701,861 bytes, including 403 KB from the CMP and 299 KB from Google tags.",
      "suggestedFix": "Gate and defer non-essential third-party code, consolidate analytics, and load consent vendor detail only when opened.",
      "effort": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F10",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party JavaScript adds substantial startup cost without core game value.",
      "evidence": "The two Google tag scripts alone transfer about 299 KB, the CMP SDK about 127 KB, and Lighthouse interactive time is 9.2-10.0 s despite good paint metrics.",
      "suggestedFix": "Audit tag/CMP coverage, remove duplicate or unused tags, and conditionally load vendor code after a relevant choice.",
      "effort": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "summary": "The mobile menu has no accessible name.",
      "evidence": "Lighthouse button-name fails on button#mobile-menu on both homepage and Solitaire; it has no text, aria-label, aria-labelledby, or title.",
      "suggestedFix": "Add an accurate accessible name and expose expanded/controlled state with aria-expanded and aria-controls.",
      "effort": "trivial",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-solitaire.json"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "summary": "Game-theme and consent text do not meet minimum contrast.",
      "evidence": "Lighthouse reports themed links at 2.19:1, board text at 3.77:1, and the accept button at 4.42:1 against a 4.5:1 requirement.",
      "suggestedFix": "Adjust foreground/background tokens and verify normal, themed, and consent states at WCAG AA contrast.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/lighthouse-solitaire.json",
        "evidence/home-high-contrast.png"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "summary": "In-page game action links point to missing focus targets.",
      "evidence": "Lighthouse reports New Game, Restart, Pause, and Options hash links as skip links without valid targets; the document also contains two H1 elements in game state.",
      "suggestedFix": "Use real controls for actions, valid target IDs for navigable sections, and a single coherent page heading hierarchy.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/lighthouse-solitaire.json",
        "evidence/interaction-a11y-probe.json"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F14",
      "severity": "low",
      "confidence": "high",
      "summary": "The game template logs a browser inspector cookie issue.",
      "evidence": "Lighthouse best-practices is 0.77 on Solitaire and reports an Issues-panel third-party-cookie problem from a.pub.network.",
      "suggestedFix": "Remove the third-party-cookie dependency or migrate it to a privacy-preserving storage posture.",
      "effort": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "artifacts": [
        "evidence/lighthouse-solitaire.json"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site does not publish a working sitemap.",
      "evidence": "A request to /sitemap.xml returns the site’s Page Not Found HTML; robots.txt is empty. Canonical and hreflang signals otherwise exist.",
      "suggestedFix": "Publish a valid XML sitemap for canonical game and locale URLs and reference it from robots.txt.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "search-hidden-content",
      "artifacts": [
        "evidence/indexing.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F16",
      "severity": "low",
      "confidence": "high",
      "summary": "Game pages lack structured entity metadata.",
      "evidence": "Open Graph metadata exists, but DOM inspection found no JSON-LD on the homepage despite the site representing a collection of playable games.",
      "suggestedFix": "Add accurate schema.org WebSite and VideoGame/Game structured data that matches visible content.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "artifacts": [
        "evidence/indexing.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "summary": "Security headers and cookie flags are incomplete.",
      "evidence": "HTTPS, HSTS, nosniff and X-Frame-Options are present, but CSP is absent; both observed first-party cookies lack Secure and country uses SameSite=None.",
      "suggestedFix": "Set a nonce/hash-based CSP and mark HTTPS cookies Secure with the least-permissive appropriate SameSite value.",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "The initial privacy footprint is disproportionate to a simple card-game visit.",
      "evidence": "The banner names 1,017 partners; the load contacts four third-party origins and known Google trackers, transferring 701,861 third-party bytes. No sensitive secret was exposed.",
      "suggestedFix": "Reduce partner/vendor scope, default to data minimisation globally, and delay analytics/advertising calls until a valid contextual choice.",
      "effort": "large",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "Browser-enforced policy coverage is incomplete.",
      "evidence": "Headers evidence shows no Content-Security-Policy or Permissions-Policy; HSTS, framing, referrer and nosniff protections are present.",
      "suggestedFix": "Deploy CSP (including frame-ancestors) and a restrictive Permissions-Policy matched to features actually used.",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "artifacts": [
        "evidence/headers.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "summary": "The app-like game site is installable in metadata only and has no offline fallback.",
      "evidence": "A valid standalone manifest exists, but navigator.serviceWorker.getRegistrations() returned no registrations on Solitaire.",
      "suggestedFix": "Register a service worker that precaches the game shell and provides an intentional offline page/state for previously visited games.",
      "effort": "medium",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "performance",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/runtime-capabilities.json"
      ],
      "pathId": "solitaire"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "summary": "The localized site is not demonstrably writing-mode resilient.",
      "evidence": "The page publishes six hreflang locales and correct lang=en, but stylesheet inspection found no logical-property signal in the inspected rules and no dir declaration.",
      "suggestedFix": "Use logical inset/margin/padding properties and set dir from locale so translated layouts remain robust for RTL expansion.",
      "effort": "medium",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "css",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/modern-css-forms.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F22",
      "severity": "low",
      "confidence": "high",
      "summary": "The user-report form omits autocomplete hints.",
      "evidence": "DOM inspection found labelled name, email, description, device, and location fields, but every field has an empty autocomplete attribute value.",
      "suggestedFix": "Add appropriate autocomplete tokens such as name, email, and country-name/address-level values, using off only where justified.",
      "effort": "trivial",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "artifacts": [
        "evidence/modern-css-forms.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party and decorative media cost is high relative to the core interaction.",
      "evidence": "HAR transfers 1.85 MB on the homepage: 702 KB third party and 1.05 MB images, including a 156 KB decorative stadium image and multiple tag/CMP bundles.",
      "suggestedFix": "Defer vendors, simplify the event theme, optimize decorative images, and enforce a page-weight budget for non-game assets.",
      "effort": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F24",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Repeated menu exercise shows substantial retained-heap growth that needs investigation.",
      "evidence": "Heap summaries rise from 17,365,169 bytes/364,950 nodes to 24,988,197 bytes/530,849 nodes after ten menu open/close cycles. The separate-session comparison makes confidence medium and does not isolate a constructor leak.",
      "suggestedFix": "Reproduce in one long-lived session with baseline/target/final snapshots, force GC between snapshots, then remove accumulating listeners, nodes, or late-loaded vendor state.",
      "effort": "medium",
      "principleId": "be-memory-efficient",
      "principleCheckId": "no-leak-under-repeated-interaction",
      "guidanceId": "move-dom-element-without-losing-state",
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-menu.json"
      ],
      "pathId": "solitaire"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Make non-tracking play immediately accessible and replace the full-screen first-visit consent wall with a compact, reversible choice.",
      "priority": 1,
      "findingIds": [
        "F05",
        "F07"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Fix accessible names, contrast, hash-action semantics, and touch target sizing across shared templates.",
      "priority": 2,
      "findingIds": [
        "F08",
        "F11",
        "F12",
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Reduce the consent/analytics partner footprint and defer third-party scripts until a valid contextual choice.",
      "priority": 3,
      "findingIds": [
        "F09",
        "F10",
        "F18",
        "F23"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Deploy nonce/hash CSP, Permissions-Policy, and secure least-permissive cookie attributes.",
      "priority": 4,
      "findingIds": [
        "F17",
        "F19"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Add system-driven dark, reduced-motion, and high-contrast modes.",
      "priority": 5,
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Use native dialog/popover primitives for modal and transient overlays.",
      "priority": 6,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Add a service worker with an intentional offline shell/fallback.",
      "priority": 7,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Investigate repeated-interaction heap growth with same-session GC-controlled snapshots.",
      "priority": 8,
      "findingIds": [
        "F24"
      ],
      "guidanceId": "move-dom-element-without-losing-state",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Publish a valid sitemap and accurate game/WebSite structured data.",
      "priority": 9,
      "findingIds": [
        "F15",
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Make localized CSS direction-safe with logical properties and locale-driven dir.",
      "priority": 10,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "css",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Add form autocomplete tokens and clear browser inspector cookie issues.",
      "priority": 11,
      "findingIds": [
        "F14",
        "F22"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Progressively enhance route and state changes with View Transitions.",
      "priority": 12,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "directional-navigation-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-17T21-36-22-272Z"
}
