{
  "url": "https://www.ad.nl",
  "auditedAt": "2026-07-18T15:09:50.647Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete across five representative paths. Login failure is reported as a directly observed issue, not an evidence blocker.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered multi-page publication with substantial client enhancement",
    "notes": "Public Dutch news site. Homepage, article, listing, account entry and failure state were sampled. Premium article bodies, checkout/subscription completion, video playback and regional variants were not covered because they require entitlement or duplicate sampled templates."
  },
  "evidenceUsed": [
    "screenshot",
    "dom+computed-styles",
    "layout-metrics",
    "evaluate-probes",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "lighthouse",
    "curl robots/sitemap"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "forms",
    "performance",
    "security",
    "privacy",
    "html",
    "css",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "improve-text-layout-and-legibility",
    "declarative-dialog-popover-control",
    "fluid-scaling",
    "size-aware-styling",
    "persistent-toast-notifications",
    "passkeys",
    "batch-analytics-events",
    "autofill-sign-in-form",
    "translator",
    "webmcp",
    "manage-recurring-intervals",
    "same-document-transitions",
    "shrinking-header-on-scroll",
    "optimize-preload-priority",
    "visually-stable-font-fallbacks",
    "move-dom-element-without-losing-state",
    "conditional-async-dependencies",
    "flicker-free-client-side-ab-testing",
    "validate-input-after-interaction",
    "accessible-error-announcement",
    "efficient-background-processing",
    "deprioritize-background-fetches",
    "agentic-forms"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Homepage desktop first viewport",
      "condition": "desktop",
      "findingIds": [
        "F05",
        "F25"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at narrow mobile width",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F13",
        "F25"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Homepage under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article-desktop.png",
      "caption": "Representative article desktop",
      "condition": "desktop",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article-mobile.png",
      "caption": "Representative article mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/listing-desktop.png",
      "caption": "Net Binnen listing",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/login-desktop.png",
      "caption": "Blocked login state",
      "condition": "desktop",
      "findingIds": [
        "F07",
        "F19",
        "F24"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/404-desktop.png",
      "caption": "Intentional not-found recovery page",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered homepage DOM and computed styles",
      "condition": "desktop",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "Mobile overflow, CLS and long tasks",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F04",
        "F27"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools performance trace",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact trace metrics",
      "condition": "desktop",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Homepage network capture",
      "condition": "desktop",
      "findingIds": [
        "F09",
        "F18"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Network totals, third parties and offenders",
      "condition": "desktop",
      "findingIds": [
        "F09",
        "F10",
        "F18",
        "F25",
        "F26"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Raw versus rendered content comparison",
      "condition": "crawler without JavaScript",
      "findingIds": [
        "F16",
        "F21"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Rendered browser view",
      "condition": "JavaScript enabled",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Crawler view",
      "condition": "JavaScript disabled",
      "findingIds": [
        "F16",
        "F21"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "Lighthouse JSON on first-visit redirect",
      "condition": "mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-home-summary.json",
      "caption": "Compact Lighthouse scores and failures",
      "condition": "mobile",
      "findingIds": [
        "F08",
        "F09",
        "F10",
        "F12",
        "F14",
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/accessibility-platform-probe.json",
      "caption": "Focus, target, forms and platform probe",
      "condition": "desktop",
      "findingIds": [
        "F06",
        "F11",
        "F12",
        "F13",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/motion-modern-css-probe.json",
      "caption": "Reduced-motion and modern CSS probe",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": [
        "F02",
        "F03",
        "F04"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security header inspection",
      "condition": "desktop",
      "findingIds": [
        "F17",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie security inspection",
      "condition": "desktop",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker inventory",
      "condition": "desktop",
      "findingIds": [
        "F18",
        "F26"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image dimensions, responsive sources and alt inventory",
      "condition": "desktop",
      "findingIds": [
        "F11",
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client secret scan; observed Temptation API key judged public configuration",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Baseline heap summary",
      "condition": "desktop",
      "findingIds": [
        "F27"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll-valid.json",
      "caption": "Heap after ten scroll cycles",
      "condition": "repeated interaction",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-meta-probe.json",
      "caption": "Article metadata, dates and structured data",
      "condition": "desktop",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-probe.json",
      "caption": "Login redirect and recovery text",
      "condition": "desktop",
      "findingIds": [
        "F07",
        "F19",
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/script-security-i18n-probe.json",
      "caption": "Script delivery, public-key context and i18n probe",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots.txt request response, blocked by site WAF",
      "condition": "direct HTTP request",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Pinned Modern Web Guidance retrieved for 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": "In-page evaluate probe plus visual inspection",
      "evidence": "The dark-condition screenshot is pixel-equivalent to the light capture, and computed html color-scheme remains normal with a light #f6f6f6 surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "With prefers-reduced-motion: reduce matched, the probe still found seven 1.5s livefeed-pulse animations and two 121.34s ticker/swap animations running.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion-modern-css-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Lighthouse accessibility scored 98 and the screenshots retained clear high-contrast red, white and black text/control boundaries.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The modern CSS probe found no view-transition CSS or authored startViewTransition integration even though the homepage exposes many document navigations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion-modern-css-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The CSS/motion probe found no authored scroll-linked animation, so no main-thread scroll animation anti-pattern was present.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The mobile page uses native document scrolling and exposed no custom pointermove or swipe surface that fought platform gestures.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The homepage is 18,403px tall, while the CSS signal probe found no scroll-state queries, progress indicator, or authored scroll-timeline cue.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/motion-modern-css-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature/applicability inspection",
      "evidence": "No tooltip, popover, menu overlay or other anchored floating surface was exposed on the representative public paths.",
      "reason": "No tooltip, popover, menu overlay or other anchored floating surface was exposed on the representative public paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Desktop and mobile screenshots show persistent labelled navigation, an active section treatment, and clear 404 recovery CTA.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "No content-obscuring interstitial or full-viewport overlay appeared on homepage, listing or article captures.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature/applicability inspection",
      "evidence": "No modal or transient overlay appeared in the audited public paths, so there was no overlay primitive to judge.",
      "reason": "No modal or transient overlay appeared in the audited public paths, so there was no overlay primitive to judge.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Desktop screenshots devote roughly the first 390px below navigation to blank advertising space before the leading story, reducing content density.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article-desktop.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile layout metrics and screenshot",
      "evidence": "At 360x800, layout reported scrollWidth 360, clientWidth 360 and zero horizontal overflow; mobile screenshot remained usable.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile layout metrics and screenshot",
      "evidence": "Rendered CSS includes container-type:inline-size and an @container rule for a reusable notification component, while mobile cards reflow to a list.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile layout metrics and screenshot",
      "evidence": "The focus probe found outline:none and no box shadow on the main navigation links; it also found 29 of 80 sampled targets below 24px in one dimension.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/accessibility-platform-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The first viewport clearly identifies AD news and presents current lead stories with descriptive headlines and section navigation.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Following the header sign-in action redirects to login2.ad.nl and produces “Inlogpoging geblokkeerd” with HTTP-like status 406, so the primary account journey cannot complete in this session.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-desktop.png",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The tested invalid URL presents a clear Dutch not-found explanation and a prominent action back to the latest news.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "Lighthouse measured 3.6s LCP and 2.6s FCP on the consent redirect path. A direct trace was better at 2.19s LCP, showing the redirect/first-visit path is the risk.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "Mobile layout observation measured CLS 0.0136 with only three small shifts, comfortably within the good range.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "The direct trace found two long tasks, 71.59ms maximum, and only 25.69ms total blocking time.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "The HAR recorded 117 requests and 11,668,883 transferred bytes; 8.44 MB came from live-streaming video segments, while Lighthouse flagged redirects, cache lifetime, document latency and render blocking.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "The HAR recorded 38 scripts and Lighthouse estimated 58 KiB unused JavaScript; video player, tag manager, experimentation and advertising libraries all load on the homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "The images primitive reported missing alt on all 100 sampled images. The form probe found the first email input had no associated label or aria-label.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/accessibility-platform-probe.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "Lighthouse accessibility scored 98 and no contrast failure appeared in its failing audit list; visual captures show strong text contrast.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "Lighthouse failed heading-order and accessible-name/visible-label matching; the focus probe found no visible outline on sampled primary links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/accessibility-platform-probe.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "Article and listing captures use large, readable headlines and comfortable body measure without clipping at desktop or mobile widths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "At 360px the page reflows without overflow, but the target probe found 29 of 80 sampled interactive elements under 24px in width or height.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/accessibility-platform-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "Lighthouse did not report the console-errors or runtime-exception audit among failures during the audited load.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "The images primitive found five images without explicit dimensions and five without srcset; Lighthouse also failed the unsized-images audit.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse audit corroborated with first-party probe",
      "evidence": "Lighthouse reported DevTools Inspector issues and three BFCache failure reasons on the first-visit route.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML versus rendered DOM discoverability comparison",
      "evidence": "Direct rendered probe found a descriptive homepage title and meta description; the article has a unique title and detailed description.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Raw HTML versus rendered DOM discoverability comparison",
      "evidence": "Discoverability fetched only 7,861 bytes, found 0% rendered-content coverage and identified a JS shell; the crawler screenshot contains no page content. Direct robots and sitemap requests were also blocked by the WAF from this audit origin.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-rendered.png",
        "evidence/home-discoverability-crawler.png",
        "evidence/robots.txt"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML versus rendered DOM discoverability comparison",
      "evidence": "Rendered homepage and article expose self-referencing canonicals, and the article robots meta permits full snippets and previews.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML versus rendered DOM discoverability comparison",
      "evidence": "Homepage has two JSON-LD blocks and Open Graph metadata; article JSON-LD includes NewsArticle and BreadcrumbList with seven OG tags.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "HTTPS, HSTS and nosniff are present, but CSP permits unsafe-inline and unsafe-eval; 25 of 27 cookies were reported without Secure, including long-lived analytics identifiers.",
      "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": "HAR summary and network attribution",
      "evidence": "The tracker scan observed 45 third-party origins and 11 known tracker domains. The HAR attributed 108 of 117 requests and 11.41 MB to third parties.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "The sign-in route is blocked and only describes email-code authentication; no passkey or WebAuthn UI could be reached or observed.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-desktop.png",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "Headers include HSTS, DENY framing and strict-origin referrer policy, but CSP allows unsafe-inline/unsafe-eval and Permissions-Policy only declares two client-hint features.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Raw HTML versus rendered DOM discoverability comparison",
      "evidence": "The raw-HTML discoverability comparison found 0% content overlap, no raw title, h1 or description, and classified the response as a JavaScript shell/privacy gate.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-crawler.png"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Representative homepage, article and listing rendered complete content with stable native navigation; no clipped open menu or broken async shell appeared.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature/applicability inspection",
      "evidence": "AD is a continuously updated public news publication rather than an offline-first application; offline installability was judged out of scope.",
      "reason": "AD is a continuously updated public news publication rather than an offline-first application; offline installability was judged out of scope.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The deliberate invalid path renders an intentional 404-style page with explanation and a direct route to current news.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The document declares lang=nl and ltr, and rendered CSS contains logical-property usage; Dutch reading order is correct.",
      "pathIds": [
        "article"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Article time elements use human text such as “18 juli 2026, 14:52” and “Laatste update: 16:08” directly in datetime rather than valid ISO date/time values; no Intl usage was observed in the rendered article.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article-meta-probe.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature/applicability inspection",
      "evidence": "The audited news surfaces did not expose cross-zone scheduling, recurring events or user-entered time concepts.",
      "reason": "The audited news surfaces did not expose cross-zone scheduling, recurring events or user-entered time concepts.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Premium labels and the newsletter purpose are visible in captures, and the not-found/account messages do not use confirmshaming.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The observed blocked sign-in state explains the security reason and gives code-based recovery instructions without blaming the user.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "Both sampled newsletter email inputs reported an empty autocomplete value; the first also lacked a programmatic label.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/accessibility-platform-probe.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "In-page evaluate probe plus visual inspection",
      "evidence": "The sign-in endpoint shows a status 406 block and textual instructions but no visible control to return, switch to email-code sign-in, or retry.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-desktop.png",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "The image audit found no oversized images, all below-fold images were lazy, and 95 of 100 sampled images had srcset and dimensions.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "The HAR shows ten live-streaming requests transferring 8.44 MB during a six-second homepage capture, despite no player being visible in the first desktop or mobile viewport.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary and network attribution",
      "evidence": "Third parties transferred 11.41 MB across 108 requests, including 8.44 MB of live video, which is disproportionate for a news landing page before interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature/applicability inspection",
      "evidence": "No declared agent-facing intent or transactional agent capability was found, so emerging WebMCP support is not required for this run.",
      "reason": "No declared agent-facing intent or transactional agent capability was found, so emerging WebMCP support is not required for this run.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature/applicability inspection",
      "evidence": "No declared on-device AI intent or user workflow requiring built-in inference was found.",
      "reason": "No declared on-device AI intent or user workflow requiring built-in inference was found.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Baseline and repeated-interaction heap summary comparison",
      "evidence": "After ten repeated top-to-bottom scroll cycles, heap totals decreased from 53.68 MB/872,921 nodes to 52.67 MB/855,104 nodes rather than growing.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "Baseline and repeated-interaction heap summary comparison",
      "evidence": "The baseline heap summary contained 872,921 nodes, 3,637,944 edges and 53,675,080 self-size bytes, high for a news landing page before extended interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/home-layout-mobile.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Baseline and repeated-interaction heap summary comparison",
      "evidence": "The before/after heap summaries showed lower node and edge totals after repeated scrolling, with no aggregate accumulation signal.",
      "pathIds": [
        "home"
      ]
    }
  ],
  "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"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18",
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F25",
        "F26"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "All checks were judged out of scope because this run found no declared agent-facing or on-device inference intent."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F27"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary news discovery surface; represents the main landing template.",
      "url": "https://www.ad.nl/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Representative public news article; covers reading, metadata, article structure and newsletter UI.",
      "url": "https://www.ad.nl/binnenland/merwedebrug-dicht-voor-vrachtwagens-brugconstructie-niet-veilig~afb86a61/",
      "conditions": [
        "desktop",
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "listing",
      "description": "Net Binnen listing; represents chronological section and listing templates.",
      "url": "https://www.ad.nl/net-binnen",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Account sign-in journey reached from the primary header.",
      "url": "https://www.ad.nl/inloggen",
      "conditions": [
        "desktop",
        "redirected authentication flow"
      ],
      "result": "failed"
    },
    {
      "id": "not-found",
      "description": "Deliberately invalid URL used to inspect HTTP failure and recovery presentation.",
      "url": "https://www.ad.nl/this-page-does-not-exist-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F16",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "critical",
      "confidence": "high",
      "summary": "Non-JavaScript crawlers receive a privacy shell instead of news content",
      "evidence": "Discoverability fetched only 7,861 bytes, found 0% rendered-content coverage and identified a JS shell; the crawler screenshot contains no page content. Direct robots and sitemap requests were also blocked by the WAF from this audit origin.",
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-rendered.png",
        "evidence/home-discoverability-crawler.png",
        "evidence/robots.txt"
      ],
      "suggestedFix": "Serve crawlable article and listing HTML without requiring the consent JavaScript round-trip, while keeping consent controls as enhancement.",
      "effort": "large"
    },
    {
      "id": "F18",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "critical",
      "confidence": "high",
      "summary": "The homepage has an extreme tracking and third-party footprint",
      "evidence": "The tracker scan observed 45 third-party origins and 11 known tracker domains. The HAR attributed 108 of 117 requests and 11.41 MB to third parties.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Reduce vendors, gate non-essential analytics and advertising until valid consent, batch telemetry, and load media only on user intent.",
      "effort": "large"
    },
    {
      "id": "F21",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "flicker-free-client-side-ab-testing",
      "guidanceCategory": "performance",
      "severity": "critical",
      "confidence": "high",
      "summary": "Core news content is unavailable without JavaScript",
      "evidence": "The raw-HTML discoverability comparison found 0% content overlap, no raw title, h1 or description, and classified the response as a JavaScript shell/privacy gate.",
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-crawler.png"
      ],
      "suggestedFix": "Render core headlines and article content in the initial HTML, then enhance consent, ads and account features with JavaScript.",
      "effort": "large"
    },
    {
      "id": "F26",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "severity": "critical",
      "confidence": "high",
      "summary": "Media and third parties dominate the page budget",
      "evidence": "Third parties transferred 11.41 MB across 108 requests, including 8.44 MB of live video, which is disproportionate for a news landing page before interaction.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Set explicit third-party and media budgets, lazy-load video, and remove vendors that do not provide commensurate user value.",
      "effort": "large"
    },
    {
      "id": "F02",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Long-running motion continues under reduced-motion",
      "evidence": "With prefers-reduced-motion: reduce matched, the probe still found seven 1.5s livefeed-pulse animations and two 121.34s ticker/swap animations running.",
      "artifacts": [
        "evidence/motion-modern-css-probe.json"
      ],
      "suggestedFix": "Disable non-essential pulse, ticker and swap animations in a prefers-reduced-motion: reduce query and replace auto-motion with a static state.",
      "effort": "small"
    },
    {
      "id": "F06",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus is not visibly exposed on primary navigation",
      "evidence": "The focus probe found outline:none and no box shadow on the main navigation links; it also found 29 of 80 sampled targets below 24px in one dimension.",
      "artifacts": [
        "evidence/accessibility-platform-probe.json"
      ],
      "suggestedFix": "Use :focus-visible with a high-contrast outline and enlarge compact controls to meet practical touch target guidance.",
      "effort": "small"
    },
    {
      "id": "F07",
      "pathId": "login",
      "url": "https://www.ad.nl/inloggen",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "severity": "high",
      "confidence": "high",
      "summary": "The sign-in journey ends at a blocked state",
      "evidence": "Following the header sign-in action redirects to login2.ad.nl and produces “Inlogpoging geblokkeerd” with HTTP-like status 406, so the primary account journey cannot complete in this session.",
      "artifacts": [
        "evidence/login-desktop.png",
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Keep a working code-based sign-in path available from the blocked state and provide a direct retry/back action rather than instructions alone.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-preload-priority",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The homepage transfers an excessive 11.67 MB on load",
      "evidence": "The HAR recorded 117 requests and 11,668,883 transferred bytes; 8.44 MB came from live-streaming video segments, while Lighthouse flagged redirects, cache lifetime, document latency and render blocking.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Do not fetch the live stream until the player is visible or explicitly started; improve cache lifetimes and first-document delivery.",
      "effort": "large"
    },
    {
      "id": "F11",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "News images and a newsletter field lack accessible alternatives",
      "evidence": "The images primitive reported missing alt on all 100 sampled images. The form probe found the first email input had no associated label or aria-label.",
      "artifacts": [
        "evidence/images.json",
        "evidence/accessibility-platform-probe.json"
      ],
      "suggestedFix": "Provide meaningful alt text or empty alt for decorative images and programmatically label every input.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "move-dom-element-without-losing-state",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Focus treatment and heading semantics are inconsistent",
      "evidence": "Lighthouse failed heading-order and accessible-name/visible-label matching; the focus probe found no visible outline on sampled primary links.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/accessibility-platform-probe.json"
      ],
      "suggestedFix": "Restore sequential heading structure, align accessible names with visible labels, and add consistent :focus-visible styles.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Cookie and CSP defaults weaken otherwise strong transport security",
      "evidence": "HTTPS, HSTS and nosniff are present, but CSP permits unsafe-inline and unsafe-eval; 25 of 27 cookies were reported without Secure, including long-lived analytics identifiers.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Move to nonce/hash-based CSP, remove unsafe-eval, and set Secure plus the narrowest viable SameSite policy on every HTTPS cookie.",
      "effort": "large"
    },
    {
      "id": "F24",
      "pathId": "login",
      "url": "https://www.ad.nl/inloggen",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "passkey-reauthentication",
      "guidanceCategory": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Account access is not recoverable from the blocked screen",
      "evidence": "The sign-in endpoint shows a status 406 block and textual instructions but no visible control to return, switch to email-code sign-in, or retry.",
      "artifacts": [
        "evidence/login-desktop.png",
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Place direct recovery actions on the blocked page and verify the complete email-code and account-management journey.",
      "effort": "medium"
    },
    {
      "id": "F25",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "An offscreen live stream downloads megabytes without user intent",
      "evidence": "The HAR shows ten live-streaming requests transferring 8.44 MB during a six-second homepage capture, despite no player being visible in the first desktop or mobile viewport.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Defer stream manifests and segments until the player intersects the viewport or the user presses play.",
      "effort": "medium"
    },
    {
      "id": "F27",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "conditional-async-dependencies",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The initial page has a very large DOM and heap footprint",
      "evidence": "The baseline heap summary contained 872,921 nodes, 3,637,944 edges and 53,675,080 self-size bytes, high for a news landing page before extended interaction.",
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/home-layout-mobile.json"
      ],
      "suggestedFix": "Virtualise or defer below-fold modules, release advertising/video state, and avoid constructing the full 18,000px page at startup.",
      "effort": "large"
    },
    {
      "id": "F01",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site ignores the user’s dark color-scheme preference",
      "evidence": "The dark-condition screenshot is pixel-equivalent to the light capture, and computed html color-scheme remains normal with a light #f6f6f6 surface.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Declare color-scheme and provide dark surface, text and media treatments with prefers-color-scheme or light-dark().",
      "effort": "small"
    },
    {
      "id": "F05",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Reserved advertising space delays visible content",
      "evidence": "Desktop screenshots devote roughly the first 390px below navigation to blank advertising space before the leading story, reducing content density.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article-desktop.png"
      ],
      "suggestedFix": "Collapse empty advertising containers promptly and reserve only the space required for ads that will render.",
      "effort": "medium"
    },
    {
      "id": "F08",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Mobile LCP misses the good threshold in the redirected first-visit path",
      "evidence": "Lighthouse measured 3.6s LCP and 2.6s FCP on the consent redirect path. A direct trace was better at 2.19s LCP, showing the redirect/first-visit path is the risk.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Remove avoidable redirect latency and prioritise the actual LCP resource on first visit.",
      "effort": "medium"
    },
    {
      "id": "F10",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party and unused JavaScript add avoidable cost",
      "evidence": "The HAR recorded 38 scripts and Lighthouse estimated 58 KiB unused JavaScript; video player, tag manager, experimentation and advertising libraries all load on the homepage.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Conditionally load advertising, experimentation and video code only when the corresponding feature becomes relevant.",
      "effort": "large"
    },
    {
      "id": "F13",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "severity": "medium",
      "confidence": "high",
      "summary": "Many controls are too compact for reliable touch use",
      "evidence": "At 360px the page reflows without overflow, but the target probe found 29 of 80 sampled interactive elements under 24px in width or height.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/accessibility-platform-probe.json"
      ],
      "suggestedFix": "Increase hit areas around compact header, utility and live-feed controls without changing visual density.",
      "effort": "small"
    },
    {
      "id": "F14",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some images do not reserve intrinsic space",
      "evidence": "The images primitive found five images without explicit dimensions and five without srcset; Lighthouse also failed the unsized-images audit.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Add width and height or aspect-ratio to every content image and provide responsive sources.",
      "effort": "small"
    },
    {
      "id": "F15",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Browser diagnostics report lifecycle and inspector problems",
      "evidence": "Lighthouse reported DevTools Inspector issues and three BFCache failure reasons on the first-visit route.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Resolve the recorded Inspector issues and remove unload/lifecycle blockers that prevent BFCache restoration.",
      "effort": "medium"
    },
    {
      "id": "F19",
      "pathId": "login",
      "url": "https://www.ad.nl/inloggen",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "The authentication surface offers no observable phishing-resistant sign-in",
      "evidence": "The sign-in route is blocked and only describes email-code authentication; no passkey or WebAuthn UI could be reached or observed.",
      "artifacts": [
        "evidence/login-desktop.png",
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Offer passkeys as a primary or upgrade authentication option while retaining email-code recovery.",
      "effort": "large"
    },
    {
      "id": "F20",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "Defensive policies remain overly permissive",
      "evidence": "Headers include HSTS, DENY framing and strict-origin referrer policy, but CSP allows unsafe-inline/unsafe-eval and Permissions-Policy only declares two client-hint features.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Tighten CSP and explicitly disable unneeded powerful features in Permissions-Policy.",
      "effort": "medium"
    },
    {
      "id": "F22",
      "pathId": "article",
      "url": "https://www.ad.nl/binnenland/merwedebrug-dicht-voor-vrachtwagens-brugconstructie-niet-veilig~afb86a61/",
      "principleId": "be-internationalised",
      "principleCheckId": "locale-aware-data",
      "guidanceId": "translator",
      "guidanceCategory": "internationalization",
      "severity": "medium",
      "confidence": "high",
      "summary": "Published times are not machine-readable or locale-robust",
      "evidence": "Article time elements use human text such as “18 juli 2026, 14:52” and “Laatste update: 16:08” directly in datetime rather than valid ISO date/time values; no Intl usage was observed in the rendered article.",
      "artifacts": [
        "evidence/article-meta-probe.json"
      ],
      "suggestedFix": "Emit valid ISO datetime attributes and format visible dates through Intl.DateTimeFormat for the active locale.",
      "effort": "small"
    },
    {
      "id": "F23",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "severity": "medium",
      "confidence": "high",
      "summary": "Email fields omit autocomplete assistance",
      "evidence": "Both sampled newsletter email inputs reported an empty autocomplete value; the first also lacked a programmatic label.",
      "artifacts": [
        "evidence/accessibility-platform-probe.json"
      ],
      "suggestedFix": "Add autocomplete=\"email\", stable names, inputmode where useful, and preserve browser autofill.",
      "effort": "small"
    },
    {
      "id": "F03",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Route changes do not use View Transitions",
      "evidence": "The modern CSS probe found no view-transition CSS or authored startViewTransition integration even though the homepage exposes many document navigations.",
      "artifacts": [
        "evidence/motion-modern-css-probe.json"
      ],
      "suggestedFix": "Add progressive cross-document or same-document View Transitions for meaningful route changes, with reduced-motion fallback.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "pathId": "home",
      "url": "https://www.ad.nl/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Long pages lack scroll-state-aware navigation cues",
      "evidence": "The homepage is 18,403px tall, while the CSS signal probe found no scroll-state queries, progress indicator, or authored scroll-timeline cue.",
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/motion-modern-css-probe.json"
      ],
      "suggestedFix": "Add a lightweight reading/scroll progress cue or scroll-state-aware header treatment, respecting reduced motion.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Serve crawlable article and listing HTML without requiring the consent JavaScript round-trip, while keeping consent controls as enhancement.",
      "priority": 1,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Reduce vendors, gate non-essential analytics and advertising until valid consent, batch telemetry, and load media only on user intent.",
      "priority": 2,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Render core headlines and article content in the initial HTML, then enhance consent, ads and account features with JavaScript.",
      "priority": 3,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "flicker-free-client-side-ab-testing",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Set explicit third-party and media budgets, lazy-load video, and remove vendors that do not provide commensurate user value.",
      "priority": 4,
      "findingIds": [
        "F26"
      ],
      "guidanceId": "efficient-background-processing",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Disable non-essential pulse, ticker and swap animations in a prefers-reduced-motion: reduce query and replace auto-motion with a static state.",
      "priority": 5,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Use :focus-visible with a high-contrast outline and enlarge compact controls to meet practical touch target guidance.",
      "priority": 6,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Keep a working code-based sign-in path available from the blocked state and provide a direct retry/back action rather than instructions alone.",
      "priority": 7,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Do not fetch the live stream until the player is visible or explicitly started; improve cache lifetimes and first-document delivery.",
      "priority": 8,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "optimize-preload-priority",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Provide meaningful alt text or empty alt for decorative images and programmatically label every input.",
      "priority": 9,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Restore sequential heading structure, align accessible names with visible labels, and add consistent :focus-visible styles.",
      "priority": 10,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "move-dom-element-without-losing-state",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Move to nonce/hash-based CSP, remove unsafe-eval, and set Secure plus the narrowest viable SameSite policy on every HTTPS cookie.",
      "priority": 11,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Place direct recovery actions on the blocked page and verify the complete email-code and account-management journey.",
      "priority": 12,
      "findingIds": [
        "F24"
      ],
      "guidanceId": "passkey-reauthentication",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Defer stream manifests and segments until the player intersects the viewport or the user presses play.",
      "priority": 13,
      "findingIds": [
        "F25"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Virtualise or defer below-fold modules, release advertising/video state, and avoid constructing the full 18,000px page at startup.",
      "priority": 14,
      "findingIds": [
        "F27"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Declare color-scheme and provide dark surface, text and media treatments with prefers-color-scheme or light-dark().",
      "priority": 15,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Collapse empty advertising containers promptly and reserve only the space required for ads that will render.",
      "priority": 16,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "defer-rendering-heavy-content",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Remove avoidable redirect latency and prioritise the actual LCP resource on first visit.",
      "priority": 17,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Conditionally load advertising, experimentation and video code only when the corresponding feature becomes relevant.",
      "priority": 18,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Increase hit areas around compact header, utility and live-feed controls without changing visual density.",
      "priority": 19,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Add width and height or aspect-ratio to every content image and provide responsive sources.",
      "priority": 20,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Resolve the recorded Inspector issues and remove unload/lifecycle blockers that prevent BFCache restoration.",
      "priority": 21,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T22",
      "title": "Offer passkeys as a primary or upgrade authentication option while retaining email-code recovery.",
      "priority": 22,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T23",
      "title": "Tighten CSP and explicitly disable unneeded powerful features in Permissions-Policy.",
      "priority": 23,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T24",
      "title": "Emit valid ISO datetime attributes and format visible dates through Intl.DateTimeFormat for the active locale.",
      "priority": 24,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T25",
      "title": "Add autocomplete=\"email\", stable names, inputmode where useful, and preserve browser autofill.",
      "priority": 25,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T26",
      "title": "Add progressive cross-document or same-document View Transitions for meaningful route changes, with reduced-motion fallback.",
      "priority": 26,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    },
    {
      "id": "T27",
      "title": "Add a lightweight reading/scroll progress cue or scroll-state-aware header treatment, respecting reduced motion.",
      "priority": 27,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "shrinking-header-on-scroll",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1200,
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T15-09-50-647Z"
}
