{
  "url": "https://www.24h.com.vn",
  "auditedAt": "2026-07-18T08:06:43.728Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of homepage, section listing and article templates.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered MPA with client-side advertising/social enhancements",
    "notes": "Vietnamese news publication. A Google Funding Choices consent overlay appears on first visit."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse",
    "direct-http",
    "modern-web-guidance"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "adapt-scrollbar-to-contrast-preferences",
    "accessibility",
    "declarative-dialog-popover-control",
    "position-aware-tooltips",
    "performance",
    "schedule-tasks-by-priority",
    "break-up-long-tasks",
    "html",
    "privacy",
    "passkeys",
    "coordinate-global-events",
    "translator",
    "capture-location-agnostic-data",
    "autofill-payment-form",
    "forms",
    "required-field-feedback",
    "agentic-forms",
    "agentic-javascript-tools",
    "webmcp",
    "defer-rendering-heavy-content",
    "search-hidden-content"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Homepage first viewport with blocking consent interstitial",
      "condition": "desktop",
      "findingIds": [
        "F01",
        "F05",
        "F06",
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at 360×800 showing clipped fixed-width consent UI",
      "condition": "360x800",
      "findingIds": [
        "F05",
        "F08",
        "F09",
        "F11",
        "F26"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Homepage under dark preference remains light",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/category-desktop.png",
      "caption": "Section/listing template first viewport",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-desktop.png",
      "caption": "Article template first viewport",
      "condition": "desktop",
      "findingIds": [
        "F04",
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article-mobile.png",
      "caption": "Article at 360×800 with consent panel clipped",
      "condition": "360x800",
      "findingIds": [
        "F05",
        "F08",
        "F11",
        "F26"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Narrow layout metrics: 720 px horizontal overflow and CLS 0.0047",
      "condition": "360x800",
      "findingIds": [
        "F08",
        "F19"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered homepage DOM and styles",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/article-dom.json",
      "caption": "Rendered article DOM and styles",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-meta.json",
      "caption": "Metadata, links, headings and feature probe",
      "condition": "desktop",
      "findingIds": [
        "F06",
        "F19",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-a11y.json",
      "caption": "Platform, focus, target and structure probe",
      "condition": "desktop",
      "findingIds": [
        "F03",
        "F04",
        "F09",
        "F10",
        "F16",
        "F18",
        "F21",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "Animation probe with reduced-motion emulation",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Full Lighthouse result",
      "condition": "mobile default",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Compact Lighthouse score and failure summary",
      "condition": "mobile default",
      "findingIds": [
        "F10",
        "F12",
        "F14",
        "F15",
        "F16",
        "F17",
        "F18",
        "F19",
        "F20",
        "F22",
        "F23"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools load trace",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Trace timing and main-thread summary",
      "condition": "desktop",
      "findingIds": [
        "F12",
        "F15"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Network archive",
      "condition": "desktop",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Network totals, third parties and weight offenders",
      "condition": "desktop",
      "findingIds": [
        "F13",
        "F14",
        "F25",
        "F27",
        "F28"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security response header inspection",
      "condition": "desktop",
      "findingIds": [
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie attribute inspection",
      "condition": "desktop",
      "findingIds": [
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker enumeration",
      "condition": "desktop",
      "findingIds": [
        "F25",
        "F28"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-side secret scan",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image dimensions, formats, sizing, lazy loading and alt audit",
      "condition": "desktop",
      "findingIds": [
        "F16",
        "F21",
        "F27"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Homepage raw HTML/rendered comparison",
      "condition": "JS on/off",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered homepage crawler comparison",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Homepage crawler view",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/article-discoverability.json",
      "caption": "Article raw HTML/rendered comparison",
      "condition": "JS on/off",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-rendered.png",
      "caption": "Rendered article crawler comparison",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-crawler.png",
      "caption": "Article crawler view",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Baseline readable heap summary",
      "condition": "after load",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Heap summary after ten scroll cycles",
      "condition": "10 repeated scroll cycles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/http-static.txt",
      "caption": "robots, sitemap and 404 HTTP responses",
      "condition": "direct HTTP",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Modern Web Guidance retrieved before judgement",
      "condition": "catalog 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": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The dark-mode screenshot is visually identical to the light capture: white content and consent surfaces remain unchanged under prefers-color-scheme: dark.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The reduced-motion probe matched prefers-reduced-motion: reduce, found no matching CSS rule, and still found two running 700 ms animations.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and preference screenshots/probes",
      "evidence": "Lighthouse identified ordinary contrast failures (reported separately) but controls and text remained present and distinguishable in the dark/default captures; no forced-color-hidden control was observed.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The platform probe found zero view-transition rules across the rendered homepage styles; navigation is a conventional full-document swap.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/platform-a11y.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "CSS/DOM interaction probe",
      "evidence": "The CSS probe found no scroll timelines, and screenshots/recon found no parallax or scroll-linked animation that would require a declarative replacement.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/platform-a11y.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "DOM and screenshot interaction review",
      "evidence": "The representative reading pages use native document scrolling and ordinary anchors; no custom pointer-move gesture or scroll hijacking was observed in DOM/recon.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The homepage/article screenshots show fixed dense chrome and floating controls, while CSS inspection found no container scroll-state or declarative scroll timeline support.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/article-desktop.png",
        "evidence/platform-a11y.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No first-party tooltip, popover, or viewport-edge anchored overlay was present in the representative news templates; the consent overlay is assessed as a dialog.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json"
      ],
      "reason": "No first-party tooltip, popover, or viewport-edge anchored overlay was present in the representative news templates; the consent overlay is assessed as a dialog."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Article screenshot and DOM review",
      "evidence": "The article template exposes breadcrumbs, section context, a prominent article heading and persistent return/top controls, giving a visible orientation trail.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/article-desktop.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Every entry capture shows a full-page consent interruption. At 360×800, its fixed 512 px panel is mostly off-screen to the right and the consent/refusal controls are not visible in the initial viewport.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "DOM inspection reported zero dialog and popover elements while the screenshots show a modal overlay that blocks the page.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Desktop and article screenshots devote substantial space to two navigation rows, floating home/up buttons and a full overlay before the article can be read.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article-desktop.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "At 360×800 the layout primitive measured scrollWidth 1080 against clientWidth 360, 720 px horizontal overflow. The screenshot shows the page and consent controls clipped off-screen.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "CSS inspection found zero container queries, while the narrow capture retained a 1080 px desktop composition and clipped cards/overlay.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/platform-a11y.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The focused first link computed to outline-style none, Lighthouse failed target-size, and the probe found a 130×16 input plus many zero-sized hidden controls in the active consent DOM.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Every entry capture shows a full-page consent interruption. At 360×800, its fixed 512 px panel is mostly off-screen to the right and the consent/refusal controls are not visible in the initial viewport.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The homepage, section and article all open behind consent; at 360 px the decision buttons are outside the initial visible panel because the overlay is clipped.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Consent and HTTP failure-state review",
      "evidence": "The server returned a real HTTP 404 for a nonexistent route rather than a misleading success response; the consent dialog presents explicit manage/accept/refuse choices on desktop.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/http-static.txt"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse measured LCP at 18.3 s (performance 0.61); the trace independently measured LCP at 4.02 s under a different desktop run, still above the 2.5 s good threshold.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Layout observer plus Lighthouse",
      "evidence": "The mobile layout observer measured CLS 0.0047 and Lighthouse measured CLS 0.009, both within the good range.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse reported 3.2 s main-thread work and 190 ms TBT; the separate trace had no >50 ms tasks, indicating cumulative scripting rather than one isolated stall.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "HAR recorded 143 requests and 4,437,907 transferred bytes; 140 requests and 4,340,098 bytes were classified third-party, including parser-inserted advertising scripts.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse estimated 949 KiB of unused JavaScript and 48 KiB of legacy JavaScript; HAR shows 1.47 MB transferred script bytes.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The image audit found 42 images without alt text; the DOM probe found 47 anchors with no text, aria-label, or named image; Lighthouse failed image-alt and link-name.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse’s color-contrast audit failed on the rendered homepage.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse failed heading-order; the DOM contains empty H1/H2 nodes from the consent UI and the focused first link had outline-style none.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "At 360×800 the layout primitive measured scrollWidth 1080 against clientWidth 360, 720 px horizontal overflow. The screenshot shows the page and consent controls clipped off-screen.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse failed meta-viewport and target-size; the viewport specifies maximum-scale=1.0, and the mobile layout overflows by 720 px.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse failed the errors-in-console audit on the homepage.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Although doctype and UTF-8 are valid, 99 of 100 inspected images lacked explicit dimensions and 43 were oversized for display.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/platform-a11y.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse reported one deprecated API warning and failed inspector-issues.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM and raw HTML metadata inspection",
      "evidence": "Homepage and article provide descriptive titles and meta descriptions; raw-HTML discoverability confirmed both title and description survive without JavaScript.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/article-dom.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Lighthouse failed crawlable-anchors; DOM recon found a javascript:void(0) anchor and 47 unnamed anchors. The mobile viewport is also not usable despite a viewport meta tag.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "DOM plus HTTP robots/sitemap/status inspection",
      "evidence": "Homepage has a canonical URL, HTTP 200, index/follow robots meta, robots.txt allows crawling and points to sitemap-index.xml; article raw fetch also returned 200.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/http-static.txt"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "DOM JSON-LD/Open Graph inspection",
      "evidence": "Homepage probe found JSON-LD and Open Graph title; article DOM/raw HTML expose the article title and descriptive metadata.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/article-dom.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Headers found no CSP, HSTS, nosniff, clickjacking, Referrer-Policy or Permissions-Policy. All eight observed first-party cookies lacked Secure and used SameSite=None; several analytics/consent cookies last 390–400 days.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Tracker capture found 39 third-party origins and 12 known tracker domains. HAR classified 140 of 143 requests and 4.34 MB as third-party-origin traffic.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No authentication flow or browser permission request is part of the representative public news-reading journey.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ],
      "reason": "No authentication flow or browser permission request is part of the representative public news-reading journey."
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Headers found no CSP, HSTS, nosniff, clickjacking, Referrer-Policy or Permissions-Policy. All eight observed first-party cookies lacked Secure and used SameSite=None; several analytics/consent cookies last 390–400 days.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML versus rendered discoverability capture",
      "evidence": "Discoverability captured substantial server HTML: 79% homepage and 53% article rendered tokens were present without JavaScript; neither page was a JS shell and article H1 survived.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/article-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "The same consent component remains fixed-width and clipped on homepage and article at 360×800, placing recovery/decision controls outside the visible region.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "This MPA news publication is content-focused rather than an installable app; offline installability is not required for the scoped reading journey.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json"
      ],
      "reason": "This MPA news publication is content-focused rather than an installable app; offline installability is not required for the scoped reading journey."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct HTTP 404 request",
      "evidence": "A nonexistent route returns HTTP 404 with an HTML document rather than a blank shell or false 200.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/http-static.txt"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "DOM language/direction inspection",
      "evidence": "The root document declares lang=\"vi\" and Vietnamese content reads in the expected left-to-right direction.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "The site is deliberately Vietnamese-only and the audited templates contain no user-entered currency/calendar data requiring locale switching.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ],
      "reason": "The site is deliberately Vietnamese-only and the audited templates contain no user-entered currency/calendar data requiring locale switching."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No scheduling or cross-time-zone event flow appears in the audited news templates.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ],
      "reason": "No scheduling or cross-time-zone event flow appears in the audited news templates."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop consent-flow visual review",
      "evidence": "Desktop consent presents equally prominent “Do not consent” and “Consent” actions plus manage options; no confirmshaming or disguised action was observed.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No user form was present on the homepage, section, or article templates.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json"
      ],
      "reason": "No user form was present on the homepage, section, or article templates."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No sign-in, address, payment, or data-entry form was present in the scoped templates.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json"
      ],
      "reason": "No sign-in, address, payment, or data-entry form was present in the scoped templates."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No checkout, subscription, authentication, or account-management flow was present in scope.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-meta.json"
      ],
      "reason": "No checkout, subscription, authentication, or account-management flow was present in scope."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Of 100 images, 43 were oversized, 75 lacked srcset, 42 used legacy formats and 93 below-fold images were not marked lazy.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "Tracker capture found 39 third-party origins and 12 known tracker domains. HAR classified 140 of 143 requests and 4.34 MB as third-party-origin traffic. HAR transferred 4.44 MB across 143 requests, with 4.34 MB classified third-party; scripts alone were 1.47 MB and images 2.70 MB.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F25",
        "F28"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted artifact review and objective probe named in evidence",
      "evidence": "HAR transferred 4.44 MB across 143 requests, with 4.34 MB classified third-party; scripts alone were 1.47 MB and images 2.70 MB.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "The audited public news templates expose content rather than transactional capabilities; WebMCP tools are not applicable to this scope.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/discoverability.json"
      ],
      "reason": "The audited public news templates expose content rather than transactional capabilities; WebMCP tools are not applicable to this scope."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Representative desktop/mobile visual and DOM review",
      "evidence": "No summarisation or generative feature is offered, so on-device inference is not required for the current product surface.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ],
      "reason": "No summarisation or generative feature is offered, so on-device inference is not required for the current product surface."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Baseline and post-interaction heap summary comparison",
      "evidence": "After ten full-page down/up cycles, heap grew only 320,667 bytes (1.14%) and node count 3,529 (0.73%); Array/Object/Promise counts were flat or lower, not an unbounded-growth signal.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Heap totals and constructor distribution review",
      "evidence": "Baseline heap summary was 28.16 MB across 480,243 nodes for a media-heavy page; large but proportionate to the 100-image, advertising-heavy document, with no single abnormal JS constructor dominating.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Before/after constructor and closure comparison",
      "evidence": "Before/after constructor summaries showed stable Array, Object, Promise and closure populations (closures +33, 0.13%) and no Detached* constructor among top retained objects.",
      "pathIds": [
        "home",
        "category",
        "article"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "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",
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F15",
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16",
        "F17",
        "F18",
        "F08",
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F20",
        "F21",
        "F22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F27",
        "F25",
        "F28"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The audited public news templates expose content rather than transactional capabilities; WebMCP tools are not applicable to this scope."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage/news portal: primary discovery surface and global chrome, consent, privacy, performance and responsive behavior.",
      "url": "https://www.24h.com.vn",
      "conditions": [
        "desktop",
        "360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "JavaScript disabled"
      ],
      "result": "issues"
    },
    {
      "id": "category",
      "description": "Tin tức trong ngày listing: representative section/index template. Represents other editorial category listings.",
      "url": "https://www.24h.com.vn/tin-tuc-trong-ngay-c46.html",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Lead article: representative detail/reading journey, metadata, no-JS content and mobile layout.",
      "url": "https://www.24h.com.vn/tin-tuc-trong-ngay/thi-cong-phat-lo-loat-lo-cot-quan-su-nut-giao-cao-toc-hon-300-ty-dong-bat-ngo-chinh-tuyen-c46a1779301.html",
      "conditions": [
        "desktop",
        "360x800",
        "JavaScript disabled"
      ],
      "result": "issues"
    },
    {
      "id": "not-covered",
      "description": "Search, social network /mxh, video playback, account and ad conversion flows were not covered because they are distinct products or require deeper interaction beyond the representative public news-reading task.",
      "result": "skipped"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "summary": "The site does not adapt to the user’s dark color preference.",
      "evidence": "The dark-mode screenshot is visually identical to the light capture: white content and consent surfaces remain unchanged under prefers-color-scheme: dark.",
      "suggestedFix": "Declare color-scheme and provide preference-driven dark surface, text, border and control tokens.",
      "guidanceId": "dark-mode",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "summary": "Animations continue when reduced motion is requested.",
      "evidence": "The reduced-motion probe matched prefers-reduced-motion: reduce, found no matching CSS rule, and still found two running 700 ms animations.",
      "suggestedFix": "Add a prefers-reduced-motion: reduce rule that removes non-essential animation and auto-advance.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "summary": "Primary page changes are abrupt and do not use View Transitions.",
      "evidence": "The platform probe found zero view-transition rules across the rendered homepage styles; navigation is a conventional full-document swap.",
      "suggestedFix": "Add same- or cross-document View Transitions for primary article and section navigation, with a reduced-motion fallback.",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/platform-a11y.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F04",
      "severity": "low",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "summary": "Long news pages provide static rather than scroll-state-aware navigation.",
      "evidence": "The homepage/article screenshots show fixed dense chrome and floating controls, while CSS inspection found no container scroll-state or declarative scroll timeline support.",
      "suggestedFix": "Use scroll-state-aware sticky chrome or a lightweight reading-progress affordance while preserving content space.",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/article-desktop.png",
        "evidence/platform-a11y.json"
      ],
      "effort": "medium",
      "pathId": "article",
      "url": "https://www.24h.com.vn/tin-tuc-trong-ngay/thi-cong-phat-lo-loat-lo-cot-quan-su-nut-giao-cao-toc-hon-300-ty-dong-bat-ngo-chinh-tuyen-c46a1779301.html"
    },
    {
      "id": "F05",
      "severity": "critical",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "summary": "The consent interstitial blocks all content and breaks at the mobile viewport.",
      "evidence": "Every entry capture shows a full-page consent interruption. At 360×800, its fixed 512 px panel is mostly off-screen to the right and the consent/refusal controls are not visible in the initial viewport.",
      "suggestedFix": "Use a responsive semantic dialog with max-inline-size: calc(100vw - 2rem), visible equal-weight accept/refuse actions, focus containment and reliable dismissal.",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png",
        "evidence/home-desktop.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "summary": "The consent overlay is not exposed as a native dialog.",
      "evidence": "DOM inspection reported zero dialog and popover elements while the screenshots show a modal overlay that blocks the page.",
      "suggestedFix": "Implement the blocking consent flow with <dialog> and its native focus/top-layer behavior, retaining accessible buttons and light dismissal only where lawful.",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/home-desktop.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "summary": "Dense navigation, floating controls, social modules and consent chrome compete with the news content.",
      "evidence": "Desktop and article screenshots devote substantial space to two navigation rows, floating home/up buttons and a full overlay before the article can be read.",
      "suggestedFix": "Reduce persistent chrome, defer non-primary modules, and keep the article and lead stories visually dominant.",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article-desktop.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F08",
      "severity": "critical",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "summary": "The desktop layout is forced into the mobile viewport.",
      "evidence": "At 360×800 the layout primitive measured scrollWidth 1080 against clientWidth 360, 720 px horizontal overflow. The screenshot shows the page and consent controls clipped off-screen.",
      "suggestedFix": "Remove fixed desktop widths/device branching, honor the device-width viewport, and build fluid layouts that fit 320–400 px without horizontal overflow.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "summary": "Reusable story and navigation components do not adapt to their containers.",
      "evidence": "CSS inspection found zero container queries, while the narrow capture retained a 1080 px desktop composition and clipped cards/overlay.",
      "suggestedFix": "Give reusable cards and navigation components containment and size-aware container-query layouts, with fluid intrinsic fallbacks.",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/platform-a11y.json",
        "evidence/home-mobile.png"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "summary": "Focus visibility and target sizing are insufficient.",
      "evidence": "The focused first link computed to outline-style none, Lighthouse failed target-size, and the probe found a 130×16 input plus many zero-sized hidden controls in the active consent DOM.",
      "suggestedFix": "Use :focus-visible with a clear high-contrast outline and ensure active touch targets are at least 44×44 CSS px with spacing.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "summary": "Reading a story is blocked on mobile by an unreachable consent decision.",
      "evidence": "The homepage, section and article all open behind consent; at 360 px the decision buttons are outside the initial visible panel because the overlay is clipped.",
      "suggestedFix": "Make reject/accept controls immediately reachable at every supported viewport and persist the choice before loading optional trackers.",
      "guidanceId": "forms",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "summary": "Largest Contentful Paint is far outside the good range.",
      "evidence": "Lighthouse measured LCP at 18.3 s (performance 0.61); the trace independently measured LCP at 4.02 s under a different desktop run, still above the 2.5 s good threshold.",
      "suggestedFix": "Prioritize the lead image/content, remove consent/ad work from the critical path, and defer non-critical scripts and below-fold modules.",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F13",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "summary": "The initial page has a heavy, third-party-dominated dependency graph.",
      "evidence": "HAR recorded 143 requests and 4,437,907 transferred bytes; 140 requests and 4,340,098 bytes were classified third-party, including parser-inserted advertising scripts.",
      "suggestedFix": "Shorten the critical chain, self-host/trim essentials, defer ad auctions and optional modules, compress scripts, and apply effective cache lifetimes.",
      "guidanceId": "schedule-tasks-by-priority",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "summary": "Large amounts of unused and legacy JavaScript are shipped.",
      "evidence": "Lighthouse estimated 949 KiB of unused JavaScript and 48 KiB of legacy JavaScript; HAR shows 1.47 MB transferred script bytes.",
      "suggestedFix": "Code-split by feature, conditionally load ad/social modules, remove legacy duplication, and ship a modern bundle.",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "summary": "Main-thread work is excessive even though measured blocking bursts were modest.",
      "evidence": "Lighthouse reported 3.2 s main-thread work and 190 ms TBT; the separate trace had no >50 ms tasks, indicating cumulative scripting rather than one isolated stall.",
      "suggestedFix": "Profile script evaluation and split or schedule non-critical work by priority; delay auctions/social widgets until needed.",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F16",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "summary": "Many links and images have no usable accessible name.",
      "evidence": "The image audit found 42 images without alt text; the DOM probe found 47 anchors with no text, aria-label, or named image; Lighthouse failed image-alt and link-name.",
      "suggestedFix": "Add meaningful alt text or empty alt for decorative images and ensure every actionable link has a discernible name.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/images.json",
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "summary": "Text fails minimum color contrast.",
      "evidence": "Lighthouse’s color-contrast audit failed on the rendered homepage.",
      "suggestedFix": "Adjust text and control color tokens to meet WCAG AA in all normal, dark and high-contrast states.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "summary": "Heading structure and keyboard focus are not reliable.",
      "evidence": "Lighthouse failed heading-order; the DOM contains empty H1/H2 nodes from the consent UI and the focused first link had outline-style none.",
      "suggestedFix": "Remove empty headings, preserve a sequential document outline, and apply a visible :focus-visible indicator in reading order.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F19",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "summary": "Viewport scaling and reflow do not provide an inclusive narrow-screen experience.",
      "evidence": "Lighthouse failed meta-viewport and target-size; the viewport specifies maximum-scale=1.0, and the mobile layout overflows by 720 px.",
      "suggestedFix": "Remove maximum-scale restrictions, support user zoom, reflow at narrow widths, and enlarge undersized targets.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "summary": "The page logs browser errors during load.",
      "evidence": "Lighthouse failed the errors-in-console audit on the homepage.",
      "suggestedFix": "Resolve the recorded network/runtime errors and add production monitoring that prevents recurring uncaught failures.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "summary": "Image markup is structurally weak and wastes bytes.",
      "evidence": "Although doctype and UTF-8 are valid, 99 of 100 inspected images lacked explicit dimensions and 43 were oversized for display.",
      "suggestedFix": "Add width/height or aspect-ratio, responsive srcset/sizes, and correctly sized modern image variants.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/images.json",
        "evidence/platform-a11y.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "summary": "Deprecated APIs and DevTools inspector issues remain.",
      "evidence": "Lighthouse reported one deprecated API warning and failed inspector-issues.",
      "suggestedFix": "Replace deprecated API use and clear DevTools Issues, especially cookie and browser-policy warnings.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "summary": "Some links are not crawlable or descriptively named.",
      "evidence": "Lighthouse failed crawlable-anchors; DOM recon found a javascript:void(0) anchor and 47 unnamed anchors. The mobile viewport is also not usable despite a viewport meta tag.",
      "suggestedFix": "Use real href destinations or buttons for actions, add descriptive accessible link names, and fix mobile reflow.",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/platform-a11y.json",
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F24",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "summary": "Transport is HTTPS but security headers and cookie attributes are unsafe.",
      "evidence": "Headers found no CSP, HSTS, nosniff, clickjacking, Referrer-Policy or Permissions-Policy. All eight observed first-party cookies lacked Secure and used SameSite=None; several analytics/consent cookies last 390–400 days.",
      "suggestedFix": "Deploy HSTS, a nonce/hash CSP, nosniff, frame-ancestors, Referrer-Policy and Permissions-Policy; mark HTTPS cookies Secure and use the least-permissive SameSite/lifetime.",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F25",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "summary": "The page exposes users to an unusually broad advertising/tracking surface.",
      "evidence": "Tracker capture found 39 third-party origins and 12 known tracker domains. HAR classified 140 of 143 requests and 4.34 MB as third-party-origin traffic.",
      "suggestedFix": "Block optional third parties until valid consent, reduce vendors, proxy/self-host essentials, batch analytics, and document retention and purpose.",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F26",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "resilient-runtime-behaviour",
      "summary": "The blocking consent runtime is not resilient at narrow viewports.",
      "evidence": "The same consent component remains fixed-width and clipped on homepage and article at 360×800, placing recovery/decision controls outside the visible region.",
      "suggestedFix": "Make the dialog intrinsically responsive, scroll its internal content, pin decision controls within its visible block, and test 320 px/zoom conditions.",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F27",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "summary": "Images are broadly unoptimised for their display contexts.",
      "evidence": "Of 100 images, 43 were oversized, 75 lacked srcset, 42 used legacy formats and 93 below-fold images were not marked lazy.",
      "suggestedFix": "Generate AVIF/WebP responsive variants, use srcset/sizes, lazy-load below-fold media, and avoid full-resolution thumbnails.",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    },
    {
      "id": "F28",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "summary": "Advertising and third-party media dominate the page budget.",
      "evidence": "HAR transferred 4.44 MB across 143 requests, with 4.34 MB classified third-party; scripts alone were 1.47 MB and images 2.70 MB.",
      "suggestedFix": "Set per-template byte/request budgets, delay third-party auctions until consent/visibility, and remove vendors or media that do not justify their cost.",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "modern-web",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.24h.com.vn"
    }
  ],
  "taskList": [
    {
      "id": "T1",
      "title": "Rebuild the consent dialog and mobile layout",
      "priority": 1,
      "findingIds": [
        "F05",
        "F06",
        "F08",
        "F11",
        "F19",
        "F26"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T2",
      "title": "Cut LCP and critical-path third-party work",
      "priority": 2,
      "findingIds": [
        "F12",
        "F13",
        "F14",
        "F15",
        "F25",
        "F28"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T3",
      "title": "Repair names, contrast, headings, focus and targets",
      "priority": 3,
      "findingIds": [
        "F10",
        "F16",
        "F17",
        "F18",
        "F19"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T4",
      "title": "Harden headers, cookies and privacy defaults",
      "priority": 4,
      "findingIds": [
        "F24",
        "F25"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T5",
      "title": "Build a responsive image pipeline",
      "priority": 5,
      "findingIds": [
        "F21",
        "F27"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T6",
      "title": "Add preference-aware theme and motion",
      "priority": 6,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T7",
      "title": "Clean platform errors, deprecated APIs and crawlable links",
      "priority": 7,
      "findingIds": [
        "F20",
        "F22",
        "F23"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T8",
      "title": "Reduce persistent chrome and add calm navigation cues",
      "priority": 8,
      "findingIds": [
        "F03",
        "F04",
        "F07",
        "F09"
      ],
      "guidanceId": "defer-rendering-heavy-content",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 3,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T08-06-43-728Z"
}
