{
  "url": "https://kqbd.mobi",
  "auditedAt": "2026-07-23T13:41:51.215Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Atomic coverage complete: all 58 catalog checks have conclusive outcomes.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered site with jQuery/Bootstrap-era assets",
    "notes": "Vietnamese football results, live scores, match detail, and editorial content. Representative coverage includes homepage, live listing, article, match detail, and 404 recovery. Search, account, checkout and form flows were not covered because none were present. Additional league/category URLs share the inspected listing templates and were de-duplicated."
  },
  "evidenceUsed": [
    "screenshots",
    "layout metrics",
    "DOM inspection",
    "evaluate probes",
    "prefers-* media emulation",
    "CDP trace",
    "HAR summary",
    "Lighthouse",
    "discoverability raw-HTML comparison",
    "security headers",
    "cookies",
    "trackers",
    "secrets scan",
    "image audit",
    "heap summaries",
    "robots.txt and sitemap inspection"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/desktop.png",
      "caption": "Desktop first viewport",
      "condition": "desktop",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/mobile.png",
      "caption": "Homepage at narrow mobile viewport",
      "condition": "360x800",
      "findingIds": [
        "F04",
        "F05",
        "F06",
        "F07",
        "F12",
        "F14",
        "F18",
        "F20",
        "F21",
        "F24"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/dark.png",
      "caption": "Homepage under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/layout-mobile.json",
      "caption": "Homepage mobile layout metrics",
      "condition": "360x800",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/dom.json",
      "caption": "Rendered homepage DOM and styles",
      "condition": "default",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "other",
      "path": "evidence/probe.json",
      "caption": "Metadata, semantics, links, targets, focus, and platform feature probe",
      "condition": "default",
      "findingIds": [
        "F01",
        "F03",
        "F06",
        "F07",
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "Reduced-motion animation probe",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/contrast.json",
      "caption": "High-contrast adaptation probe",
      "condition": "prefers-contrast: more",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/load-trace-summary.json",
      "caption": "Compact load performance trace summary",
      "condition": "desktop load",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/network-summary.json",
      "caption": "Compact network summary",
      "condition": "desktop load",
      "findingIds": [
        "F08",
        "F09",
        "F10",
        "F18",
        "F22",
        "F23",
        "F24"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse performance, accessibility, best-practices and SEO audit",
      "condition": "mobile emulation",
      "findingIds": [
        "F02",
        "F08",
        "F09",
        "F10",
        "F11",
        "F12",
        "F13",
        "F15",
        "F16",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image audit",
      "condition": "default",
      "findingIds": [
        "F09",
        "F11",
        "F15",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security response headers",
      "condition": "default",
      "findingIds": [
        "F17",
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie flags and lifetime audit",
      "condition": "default",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker inventory",
      "condition": "default",
      "findingIds": [
        "F18",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-side secrets scan",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw HTML vs rendered discoverability report",
      "condition": "crawler without JavaScript",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Crawler/no-JS view",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered browser view",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/live-mobile.png",
      "caption": "Live-score mobile page",
      "condition": "360x800",
      "findingIds": [
        "F05",
        "F14",
        "F21",
        "F24"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/live-layout.json",
      "caption": "Live-score mobile layout",
      "condition": "360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-mobile.png",
      "caption": "Article mobile page",
      "condition": "360x800",
      "findingIds": [
        "F05",
        "F14",
        "F21",
        "F24"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/article-layout.json",
      "caption": "Article mobile layout",
      "condition": "360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/match-mobile.png",
      "caption": "Match-detail mobile page",
      "condition": "360x800",
      "findingIds": [
        "F05",
        "F20",
        "F21",
        "F24"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/404-mobile.png",
      "caption": "404 recovery page",
      "condition": "360x800",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-mobile-baseline.heapsnapshot",
      "caption": "Mobile baseline heap summary",
      "condition": "360x800 baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Heap summary after ten menu/scroll cycles",
      "condition": "360x800 repeated interaction",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "coverage-manifest.json",
      "caption": "Exact 58-check coverage plan",
      "condition": "catalog modern-web-guidance@0.0.172",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The dark-condition screenshot is visually identical to the light screenshot; the probe reports colorScheme \"normal\" and a white body background.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/dark.png",
        "evidence/probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Reduced-motion probe found zero active animations; no non-essential motion remains to suppress.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Under prefers-contrast: more, the probe finds no prefers-contrast/forced-colors rule and the page colours remain unchanged.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/contrast.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The DOM contains 1,177 links and no site-specific transition treatment; route changes are full documents without an @view-transition rule.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json",
        "evidence/dom.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No scroll-linked motion, parallax, scrollytelling, or reveals exist to implement.",
      "reason": "No scroll-linked motion, parallax, scrollytelling, or reveals exist to implement.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Representative paths use standard scrolling and links; DOM/probe found no custom pointer-driven gesture layer fighting native behaviour.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Mobile layout height is 16,394px, while the screenshots show no reading/result progress indicator or scroll-state-aware persistent chrome.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/layout-mobile.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No tooltip, popover, or floating menu requiring anchored positioning was present on representative paths.",
      "reason": "No tooltip, popover, or floating menu requiring anchored positioning was present on representative paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Breadcrumbs, selected tabs, league headers, and clear match/result grouping visibly preserve orientation across templates.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Mobile screenshots show duplicate 8XBET banners above primary content and a fixed banner overlaying match rows/article content near the bottom viewport edge.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No modal/dialog/disclosure flow was present; the ad-overlay problem is judged separately as an intrusive interruption.",
      "reason": "No modal/dialog/disclosure flow was present; the ad-overlay problem is judged separately as an intrusive interruption.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Mobile screenshots show duplicate 8XBET banners above primary content and a fixed banner overlaying match rows/article content near the bottom viewport edge.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Homepage, live, and article layout probes at 360px report scrollWidth 360, viewport meta present, and zero horizontal overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/layout-mobile.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The computed-style probe finds zero elements establishing a container context across reused score, article, and match-card layouts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json",
        "evidence/mobile.png",
        "evidence/desktop.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Programmatic focus on the first visible link yields outline: none and no box shadow; the probe finds many links only 14–30px tall.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json",
        "evidence/mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "The H1 and first score sections clearly state today’s football-results purpose, with live/date tabs immediately available.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Real href navigation reaches live listings, articles, and match details directly without account walls or dead ends.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Live status/result labels are visible and the invalid-route test presents a concise 404 message with a KQBD recovery link.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-mobile.png"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Lighthouse reports LCP 3.9s and the CDP trace reports LCP/FCP 4.15s; CLS is good and TBT is low.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/load-trace-summary.json",
        "evidence/network-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Mobile layout captures report CLS 0 on homepage, live, and article; Lighthouse reports CLS 0.001.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/layout-mobile.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "CDP trace records one 53ms long task and only 3.39ms total blocking time; Lighthouse TBT is 110ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/load-trace-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The HAR records 48 requests and 1.11MB transferred; image evidence finds 12 images without dimensions and 30 below-fold images not lazy-loaded.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/images.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Lighthouse estimates 174KiB unused JavaScript and 30KiB unused CSS, including Google/Facebook scripts and largely unused Bootstrap/site CSS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/network-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The images primitive and Lighthouse both identify five result-icon images without alt text or an equivalent accessible name.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Lighthouse reports ratios of 4.18:1 for 10px white-on-green text and 3.7:1 for green-on-light-grey ticker links, below 4.5:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/mobile.png"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The probe reports only HEADER and FOOTER landmarks; Lighthouse fails landmark-one-main, and focused links have no outline or shadow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Screenshots show 10–12px navigation/ticker copy, tightly packed rows, clipped long labels, and repeated banners interrupting reading.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Programmatic focus on the first visible link yields outline: none and no box shadow; the probe finds many links only 14–30px tall.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json",
        "evidence/mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Lighthouse errors-in-console audit passes with no reported items.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Of 51 images, 12 lack width/height, 22 are oversized for display, 48 use legacy formats, and five lack alt attributes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Lighthouse best-practices score is 0.92, no permission prompt appeared, and representative interactions produced no runtime breakage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "DOM probe finds a descriptive title and meta description.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Lighthouse flags #button-newest with href=\"javascript:void(0)\"; raw/rendered content is otherwise fully available and links are largely crawlable.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/discoverability.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Main response is 200; canonical, index/follow robots meta, permissive robots.txt, and a populated sitemap index are present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Open Graph metadata and Organization/WebSite JSON-LD are present and match visible KQBD content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Header evidence finds no CSP, HSTS, or X-Content-Type-Options; all three analytics cookies lack Secure and two use SameSite=None with 400-day expiry.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The tracker probe finds seven third-party origins and Google Tag Manager, DoubleClick, and Facebook trackers; screenshots show no consent control.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/network-summary.json",
        "evidence/mobile.png"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No permission request or authentication surface exists on this public score/content site.",
      "reason": "No permission request or authentication surface exists on this public score/content site.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Headers lack Referrer-Policy and Permissions-Policy as well as CSP/HSTS; X-Frame-Options SAMEORIGIN is present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Discoverability comparison reports 100% raw-HTML content coverage, title/H1/description present, and no JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Server-rendered routes, standard links, and representative menu/scroll interactions remained stable with no clipped required overlay.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/live-mobile.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "This is a public server-rendered information site rather than an app-like installable product; offline installability is not required.",
      "reason": "This is a public server-rendered information site rather than an app-like installable product; offline installability is not required.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "An invalid route renders a useful 404 state and a clear link back to KQBD rather than a blank shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "The document declares lang=\"vi\" and computes left-to-right direction, matching the Vietnamese content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Rendered dates use the expected Vietnamese day/month order and content labels are consistently Vietnamese.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/match-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Global fixtures display bare times such as 23:00 and 08:00; no visible zone or user-local indicator explains which time basis applies.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/match-mobile.png"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Across homepage, live, article, and match views, repeated betting CTAs and claims such as “HOÀN TIỀN 100%” appear before or over core content without clear sponsored labelling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No user-input form exists on the representative paths.",
      "reason": "No user-input form exists on the representative paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No user-input form exists on the representative paths.",
      "reason": "No user-input form exists on the representative paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "The audited site has no checkout, subscription, authentication, or account-management flow; outbound betting promotions are judged under no-dark-patterns.",
      "reason": "The audited site has no checkout, subscription, authentication, or account-management flow; outbound betting promotions are judged under no-dark-patterns.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Image evidence reports 48/51 legacy-format images, 22 oversized images, and 30 below-fold images loaded eagerly.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/network-summary.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "Tracker evidence finds seven third-party origins; Lighthouse estimates 174KiB unused JS, led by Google and Facebook integrations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/lighthouse.json",
        "evidence/network-summary.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct visual and objective evidence gathered on representative paths.",
      "evidence": "The HAR transfers 1.11MB across 48 requests, including 497KB script and repeated animated betting banners visible on every representative mobile template.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "The site exposes public informational content, not an agent-operable transaction or productivity capability; raw HTML and structured data already make content machine-readable.",
      "reason": "The site exposes public informational content, not an agent-operable transaction or productivity capability; raw HTML and structured data already make content machine-readable.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judged from DOM recon and representative journey inventory.",
      "evidence": "No summarisation or generative task is central enough to justify adding on-device inference.",
      "reason": "No summarisation or generative task is central enough to justify adding on-device inference.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "After ten mobile menu/scroll cycles, summary heap grew from 19.16MB/324,269 nodes to 19.54MB/327,785 nodes (about 2.0%/1.1%), not evidence of unbounded retention.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "The 19.16MB baseline heap is proportionate to a large server-rendered results page and network transfer is 1.11MB.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-mobile-baseline.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct inspection/probe across representative paths.",
      "evidence": "Repeated interaction caused only 1.1% node-count growth; no continued growth signal was observed in the bounded test window.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F14",
        "F07"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22",
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Derived from check outcomes."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and results listing: primary scores task and shared site chrome.",
      "url": "https://kqbd.mobi/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "crawler without JavaScript",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "live",
      "description": "Live-score listing archetype: time-sensitive primary journey and repeated scrolling/menu interaction.",
      "url": "https://kqbd.mobi/truc-tuyen",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Editorial article archetype selected from news sitemap.",
      "url": "https://kqbd.mobi/nhan-dinh-soi-keo-deportivo-cali-vs-jaguares-8h15-ngay-25-7-huy-diet-khach-ttbd43895",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "match",
      "description": "Match-detail archetype selected from today-match sitemap.",
      "url": "https://kqbd.mobi/panama-liga-prom/ket-qua-tran-dau-sporting-san-miguelito-reserves-vs-umecit-reserves-392893034",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Invalid route to test HTTP failure recovery.",
      "url": "https://kqbd.mobi/nonexistent-audit-route",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site ignores the user’s dark colour preference.",
      "evidence": "The dark-condition screenshot is visually identical to the light screenshot; the probe reports colorScheme \"normal\" and a white body background.",
      "suggestedFix": "Declare color-scheme and use prefers-color-scheme or light-dark() to retint text, surfaces, controls, and browser chrome.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "artifacts": [
        "evidence/dark.png",
        "evidence/probe.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F02",
      "severity": "low",
      "confidence": "high",
      "summary": "There is no explicit high-contrast or forced-colours adaptation.",
      "evidence": "Under prefers-contrast: more, the probe finds no prefers-contrast/forced-colors rule and the page colours remain unchanged.",
      "suggestedFix": "Add forced-colors and prefers-contrast adjustments for essential text, focus indicators, controls, and scrollbars.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "artifacts": [
        "evidence/contrast.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "summary": "Navigation between the site’s many server-rendered routes swaps abruptly.",
      "evidence": "The DOM contains 1,177 links and no site-specific transition treatment; route changes are full documents without an @view-transition rule.",
      "suggestedFix": "Add a progressive-enhancement @view-transition rule and stable view-transition-name hooks, while respecting reduced motion.",
      "effort": "small",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "artifacts": [
        "evidence/probe.json",
        "evidence/dom.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F04",
      "severity": "low",
      "confidence": "high",
      "summary": "Very long pages provide little scroll-position guidance.",
      "evidence": "Mobile layout height is 16,394px, while the screenshots show no reading/result progress indicator or scroll-state-aware persistent chrome.",
      "suggestedFix": "Add lightweight scroll-state cues where useful, such as a results/date marker or article reading progress, without crowding content.",
      "effort": "small",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-progress-indicator",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/layout-mobile.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "summary": "Repeated betting banners and a sticky bottom ad obscure and compete with core scores and article content.",
      "evidence": "Mobile screenshots show duplicate 8XBET banners above primary content and a fixed banner overlaying match rows/article content near the bottom viewport edge.",
      "suggestedFix": "Remove duplicate ads, reserve non-overlay slots, cap ad density, and provide a clear dismiss control for any unavoidable overlay.",
      "effort": "small",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "summary": "Components rely on page-level responsive rules rather than container-aware adaptation.",
      "evidence": "The computed-style probe finds zero elements establishing a container context across reused score, article, and match-card layouts.",
      "suggestedFix": "Introduce container-type on reusable modules and @container rules where cards appear in main and sidebar widths; retain viewport fallbacks.",
      "effort": "small",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "artifacts": [
        "evidence/probe.json",
        "evidence/mobile.png",
        "evidence/desktop.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus is invisible and many interactive targets are too small.",
      "evidence": "Programmatic focus on the first visible link yields outline: none and no box shadow; the probe finds many links only 14–30px tall.",
      "suggestedFix": "Add a strong :focus-visible indicator and enlarge hit areas to at least 44×44 CSS px where practical without shrinking text.",
      "effort": "small",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/probe.json",
        "evidence/mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "summary": "Largest Contentful Paint misses the good threshold.",
      "evidence": "Lighthouse reports LCP 3.9s and the CDP trace reports LCP/FCP 4.15s; CLS is good and TBT is low.",
      "suggestedFix": "Prioritise the LCP content, reduce critical request delay, and defer below-fold ads and tracking scripts.",
      "effort": "small",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/load-trace-summary.json",
        "evidence/network-summary.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "summary": "Resource delivery delays the main content and includes poorly prepared images.",
      "evidence": "The HAR records 48 requests and 1.11MB transferred; image evidence finds 12 images without dimensions and 30 below-fold images not lazy-loaded.",
      "suggestedFix": "Reserve image dimensions, lazy-load below-fold imagery, preload only the true LCP asset, and audit cache/render-blocking chains.",
      "effort": "small",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/images.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F10",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page ships substantial unused CSS and JavaScript, much of it third-party tracking code.",
      "evidence": "Lighthouse estimates 174KiB unused JavaScript and 30KiB unused CSS, including Google/Facebook scripts and largely unused Bootstrap/site CSS.",
      "suggestedFix": "Remove unused tracker integrations, conditionally load analytics after consent, and produce route-critical CSS/JS bundles.",
      "effort": "small",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/network-summary.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some meaningful linked images lack accessible alternatives.",
      "evidence": "The images primitive and Lighthouse both identify five result-icon images without alt text or an equivalent accessible name.",
      "suggestedFix": "Give meaningful images concise alt text; use alt=\"\" and presentational semantics only when adjacent text fully duplicates them.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "summary": "Several navigation and ticker links fail minimum text contrast.",
      "evidence": "Lighthouse reports ratios of 4.18:1 for 10px white-on-green text and 3.7:1 for green-on-light-grey ticker links, below 4.5:1.",
      "suggestedFix": "Darken foreground colours or adjust surfaces and avoid 10px text so normal text reaches at least 4.5:1.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F13",
      "severity": "high",
      "confidence": "high",
      "summary": "The document lacks a main landmark and visible keyboard focus.",
      "evidence": "The probe reports only HEADER and FOOTER landmarks; Lighthouse fails landmark-one-main, and focused links have no outline or shadow.",
      "suggestedFix": "Wrap primary content in <main>, keep headings logical, and add a consistent :focus-visible treatment throughout.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "artifacts": [
        "evidence/probe.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "summary": "Dense small text and ads make scan-heavy score pages hard to read.",
      "evidence": "Screenshots show 10–12px navigation/ticker copy, tightly packed rows, clipped long labels, and repeated banners interrupting reading.",
      "suggestedFix": "Raise minimum text size/line height, allow labels to wrap safely, and increase spacing between distinct score groups.",
      "effort": "small",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "improve-text-layout-and-legibility",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image markup and delivery have widespread hygiene problems.",
      "evidence": "Of 51 images, 12 lack width/height, 22 are oversized for display, 48 use legacy formats, and five lack alt attributes.",
      "suggestedFix": "Add intrinsic dimensions, generate right-sized WebP/AVIF variants with srcset/sizes, and repair alt semantics.",
      "effort": "small",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F16",
      "severity": "low",
      "confidence": "high",
      "summary": "One tab control is exposed as a non-crawlable javascript: link.",
      "evidence": "Lighthouse flags #button-newest with href=\"javascript:void(0)\"; raw/rendered content is otherwise fully available and links are largely crawlable.",
      "suggestedFix": "Use a <button> for in-page state changes or a real href for navigable destinations, with progressive enhancement.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/discoverability.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "summary": "Transport is HTTPS, but baseline security headers and cookie flags are missing.",
      "evidence": "Header evidence finds no CSP, HSTS, or X-Content-Type-Options; all three analytics cookies lack Secure and two use SameSite=None with 400-day expiry.",
      "suggestedFix": "Set HSTS, nosniff, and a restrictive CSP; set appropriate Secure/SameSite cookie attributes and shorten analytics retention.",
      "effort": "small",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "Tracking starts across multiple third parties without an evident consent choice.",
      "evidence": "The tracker probe finds seven third-party origins and Google Tag Manager, DoubleClick, and Facebook trackers; screenshots show no consent control.",
      "suggestedFix": "Default to no non-essential tracking, request informed consent, minimise events and retention, and remove redundant vendors.",
      "effort": "small",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/network-summary.json",
        "evidence/mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several browser-enforced defensive policies are absent.",
      "evidence": "Headers lack Referrer-Policy and Permissions-Policy as well as CSP/HSTS; X-Frame-Options SAMEORIGIN is present.",
      "suggestedFix": "Add a least-privilege Permissions-Policy, strict Referrer-Policy, CSP frame-ancestors, and evaluate Trusted Types for script sinks.",
      "effort": "small",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "artifacts": [
        "evidence/headers.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F20",
      "severity": "low",
      "confidence": "high",
      "summary": "Match times are shown without time-zone context.",
      "evidence": "Global fixtures display bare times such as 23:00 and 08:00; no visible zone or user-local indicator explains which time basis applies.",
      "suggestedFix": "Store instants unambiguously and render with Intl.DateTimeFormat, explicitly labelling venue or user-local time.",
      "effort": "small",
      "principleId": "be-internationalised",
      "principleCheckId": "time-zone-correctness",
      "guidanceId": "coordinate-global-events",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/match-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F21",
      "severity": "high",
      "confidence": "high",
      "summary": "Gambling promotions dominate the primary information task and use aggressive inducement copy.",
      "evidence": "Across homepage, live, article, and match views, repeated betting CTAs and claims such as “HOÀN TIỀN 100%” appear before or over core content without clear sponsored labelling.",
      "suggestedFix": "Clearly label sponsored placements, remove misleading absolutes, reduce frequency, and keep betting CTAs subordinate to score/editorial content.",
      "effort": "small",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "custom-button-actions",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "summary": "Most imagery uses legacy or oversized assets.",
      "evidence": "Image evidence reports 48/51 legacy-format images, 22 oversized images, and 30 below-fold images loaded eagerly.",
      "suggestedFix": "Serve right-sized WebP/AVIF, use responsive sources, lazy-load below-fold imagery, and replace animated GIF indicators with CSS/SVG where possible.",
      "effort": "small",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "artifacts": [
        "evidence/images.json",
        "evidence/network-summary.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "summary": "Background analytics work and unused code consume resources without improving the score task.",
      "evidence": "Tracker evidence finds seven third-party origins; Lighthouse estimates 174KiB unused JS, led by Google and Facebook integrations.",
      "suggestedFix": "Remove redundant trackers, batch essential analytics, and load non-essential work only after consent and idle time.",
      "effort": "small",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/lighthouse.json",
        "evidence/network-summary.json"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    },
    {
      "id": "F24",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party scripts and repeated animated ad media are disproportionate to the core text-and-score experience.",
      "evidence": "The HAR transfers 1.11MB across 48 requests, including 497KB script and repeated animated betting banners visible on every representative mobile template.",
      "suggestedFix": "Set a third-party budget, defer ads below core content, avoid duplicated animated creatives, and cache assets effectively.",
      "effort": "small",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/mobile.png",
        "evidence/live-mobile.png",
        "evidence/article-mobile.png",
        "evidence/match-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kqbd.mobi/"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Remove intrusive betting overlays, reduce ad density, and clearly label sponsorship",
      "priority": 1,
      "findingIds": [
        "F05",
        "F21",
        "F24"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Restore accessibility: visible focus, larger targets, contrast, landmarks, and image alternatives",
      "priority": 2,
      "findingIds": [
        "F07",
        "F11",
        "F12",
        "F13",
        "F14"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Minimise and consent-gate Google/Facebook tracking",
      "priority": 3,
      "findingIds": [
        "F10",
        "F18",
        "F23"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Deploy security headers and secure analytics-cookie attributes",
      "priority": 4,
      "findingIds": [
        "F17",
        "F19"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Improve LCP and resource delivery by optimising, sizing, and lazy-loading images",
      "priority": 5,
      "findingIds": [
        "F08",
        "F09",
        "F15",
        "F22"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add preference-aware colour, contrast, and progressive route transitions",
      "priority": 6,
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Improve long-page orientation and component-level responsiveness",
      "priority": 7,
      "findingIds": [
        "F04",
        "F06"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Repair crawlable tab semantics and clarify fixture time zones",
      "priority": 8,
      "findingIds": [
        "F16",
        "F20"
      ],
      "guidanceId": "html",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-23T13-41-51-215Z"
}
