{
  "url": "https://www.whatsapp.com",
  "auditedAt": "2026-07-20T02:27:49.687Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete report-only audit of seven representative paths. External blog/FAQ/business properties and the web.whatsapp.com authenticated product were excluded because they are separate origins/products.",
  "page": {
    "appType": "mpa",
    "framework": "Meta server-rendered/React-enhanced MPA",
    "notes": "Server-rendered public marketing, download, policy, localization, and support templates. Not covered: external Blog, FAQ, WhatsApp Business, app-store binaries, and authenticated web.whatsapp.com messaging."
  },
  "evidenceUsed": [
    "screenshot",
    "layout-metrics",
    "transition-video",
    "heap-summary/totals",
    "dom",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "Lighthouse"
  ],
  "guidanceConsulted": [
    "accessibility",
    "accessible-error-announcement",
    "adapt-scrollbar-to-contrast-preferences",
    "anchor-positioning-tab-underline",
    "autofill-address-form",
    "autofill-payment-form",
    "break-up-long-tasks",
    "complex-shapes",
    "coordinate-global-events",
    "css",
    "dark-mode",
    "declarative-dialog-popover-control",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "directional-navigation-transitions",
    "flicker-free-client-side-ab-testing",
    "fluid-scaling",
    "forms",
    "html",
    "identify-heavy-scripts",
    "identify-inp-causes",
    "improve-text-layout-and-legibility",
    "language-model",
    "light-dismiss-a-dialog",
    "manage-recurring-intervals",
    "move-dom-element-without-losing-state",
    "optimize-image-priority",
    "passkeys",
    "persistent-toast-notifications",
    "physics-based-easing",
    "privacy",
    "resilient-context-menus-and-nested-dropdowns",
    "same-document-transitions",
    "scrollytelling",
    "search-hidden-content",
    "security",
    "shrinking-header-on-scroll",
    "size-aware-styling",
    "support-global-calendar-systems",
    "translator",
    "visually-stable-font-fallbacks",
    "webmcp"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/arabic-probe.json",
      "caption": "arabic probe",
      "findingIds": [
        "WA-014"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/calling-desktop.png",
      "caption": "calling desktop",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/calling-layout-mobile.json",
      "caption": "calling layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/contact-desktop.png",
      "caption": "contact desktop",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/contact-layout-mobile.json",
      "caption": "contact layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/contact-probe.json",
      "caption": "contact probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "WA-011"
      ]
    },
    {
      "type": "other",
      "path": "evidence/css-feature-probe.json",
      "caption": "css feature probe",
      "findingIds": [
        "WA-002",
        "WA-003"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/download-desktop.png",
      "caption": "download desktop",
      "findingIds": [
        "WA-003",
        "WA-006"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/download-discoverability-crawler.png",
      "caption": "download discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/download-discoverability-rendered.png",
      "caption": "download discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/download-discoverability.json",
      "caption": "download discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/download-layout-mobile.json",
      "caption": "download layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "WA-006"
      ]
    },
    {
      "type": "other",
      "path": "evidence/download-probe.json",
      "caption": "download probe",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/features-menu-open.png",
      "caption": "features menu open",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/features-menu-probe.json",
      "caption": "features menu probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "WA-011"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "heap baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.heapsnapshot",
      "caption": "heap post scroll",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-arabic-mobile.png",
      "caption": "home arabic mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "WA-014"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast-more.png",
      "caption": "home contrast more",
      "condition": "prefers-contrast: more",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-dark-probe.json",
      "caption": "home dark probe",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "WA-001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "WA-001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "home layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "WA-003"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe",
      "findingIds": [
        "WA-002",
        "WA-004",
        "WA-009",
        "WA-013"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-reduced-motion-probe.json",
      "caption": "home reduced motion probe",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": []
    },
    {
      "type": "video",
      "path": "evidence/home-scroll.mp4",
      "caption": "home scroll",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "WA-007",
        "WA-008"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "WA-005"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": [
        "WA-005"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "WA-008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "WA-007"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home",
      "findingIds": [
        "WA-004",
        "WA-005",
        "WA-007",
        "WA-008",
        "WA-009",
        "WA-010",
        "WA-012"
      ]
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "memory metrics",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/not-found-probe.json",
      "caption": "not found probe",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found.png",
      "caption": "not found",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/privacy-desktop.png",
      "caption": "privacy desktop",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/privacy-layout-mobile.json",
      "caption": "privacy layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon",
      "findingIds": [
        "WA-010"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/site-files.json",
      "caption": "site files",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/support-form-desktop.png",
      "caption": "support form desktop",
      "findingIds": [
        "WA-015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/support-form-invalid-clean.json",
      "caption": "support form invalid clean",
      "findingIds": [
        "WA-015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/support-form-invalid.json",
      "caption": "support form invalid",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/support-form-layout-mobile.json",
      "caption": "support form layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/support-form-probe.json",
      "caption": "support form probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/support-inputs.json",
      "caption": "support inputs",
      "findingIds": [
        "WA-015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "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": "The dark-mode screenshot is visually identical to the light capture; the dark-condition probe reports body background rgb(255,255,255), colorScheme \"normal\", while matchMedia confirms the emulated dark preference",
      "evidence": "The dark-mode screenshot is visually identical to the light capture; the dark-condition probe reports body background rgb(255,255,255), colorScheme \"normal\", while matchMedia confirms the emulated dark preference.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-dark-probe.json"
      ],
      "findingIds": [
        "WA-001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "evaluate under prefers-reduced-motion: reduce",
      "evidence": "The emulated preference matched and getAnimations() returned no active animation; scroll-behavior was auto.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-reduced-motion-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "contrast media screenshot plus Lighthouse contrast audit",
      "evidence": "The prefers-contrast:more capture preserved readable controls/text and Lighthouse color-contrast scored 1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-contrast-more.png",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "The live CSS feature probe found zero view-transition declarations and the DOM probe found no view-transition use across the navigation-heavy MPA",
      "evidence": "The live CSS feature probe found zero view-transition declarations and the DOM probe found no view-transition use across the navigation-heavy MPA.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/css-feature-probe.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "WA-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "live CSS feature probe and performance observers",
      "evidence": "No scroll-linked animation surface was present, the CSS contained zero scroll/view timeline declarations, and sampled scrolling produced no long tasks.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/css-feature-probe.json",
        "evidence/home-layout-mobile.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "visual/DOM review across representative pages",
      "evidence": "No custom drag, swipe, pull-to-refresh, parallax, or carousel gesture surface was present; normal platform scrolling remained usable.",
      "pathIds": [
        "home",
        "calling"
      ],
      "artifacts": [
        "evidence/home-scroll.mp4",
        "evidence/calling-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "scroll interaction video and screenshots",
      "evidence": "The compact header does not remain as obstructive chrome during the long scroll; navigation remains clear at entry without a JS-driven scroll effect.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-scroll.mp4",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "DOM/menu probe at desktop header",
      "evidence": "The tested header does not expose viewport-edge tooltip/popover content requiring anchored positioning; no detached visible menu was found after the attempted Features activation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/features-menu-probe.json",
        "evidence/features-menu-open.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "first-viewport screenshots and route walkthrough",
      "evidence": "Prominent headings, Download CTAs, real route links, and the dedicated 404 Return home action give clear destination and focus cues.",
      "pathIds": [
        "home",
        "download",
        "not-found"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/download-desktop.png",
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "load screenshots on five templates",
      "evidence": "No consent wall, pop-up, interstitial, or content-obscuring banner appeared on load in any representative template.",
      "pathIds": [
        "home",
        "download",
        "calling",
        "privacy",
        "contact"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/download-desktop.png",
        "evidence/calling-desktop.png",
        "evidence/privacy-desktop.png",
        "evidence/contact-desktop.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "DOM probe and representative UI walkthrough",
      "evidence": "No modal flow or transient blocking overlay appeared in the audited journeys; inputs and native selects remained directly operable.",
      "pathIds": [
        "home",
        "contact"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/support-inputs.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "desktop/mobile visual review",
      "evidence": "The first viewport prioritizes the product message and one primary CTA; chrome is compact and no interruption obscures content.",
      "pathIds": [
        "home",
        "download"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/download-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "layout metrics at 360x800 on five templates",
      "evidence": "Homepage, download, calling, privacy, contact, support form, and Arabic samples all reported 0 px horizontal overflow with a viewport meta tag.",
      "pathIds": [
        "home",
        "download",
        "calling",
        "privacy",
        "contact",
        "arabic"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/download-layout-mobile.json",
        "evidence/calling-layout-mobile.json",
        "evidence/privacy-layout-mobile.json",
        "evidence/contact-layout-mobile.json",
        "evidence/support-form-layout-mobile.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "The live CSS probe found zero @container rules even though card, feature, header, and download components are reused in materially different widths; mobile layout itself does reflow successfully",
      "evidence": "The live CSS probe found zero @container rules even though card, feature, header, and download components are reused in materially different widths; mobile layout itself does reflow successfully.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/css-feature-probe.json",
        "evidence/home-mobile.png",
        "evidence/download-desktop.png"
      ],
      "findingIds": [
        "WA-003"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse failed target-size and identified the 45×15 px Sitemap target with only 17",
      "evidence": "Lighthouse failed target-size and identified the 45×15 px Sitemap target with only 17.2 px safe clickable space; the live probe counted 24 visible controls below 24 px in at least one dimension.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "WA-004"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "first-viewport screenshots",
      "evidence": "“Message privately” and Download are immediately prominent; download, calling, privacy, and support pages have descriptive H1s and clear next actions.",
      "pathIds": [
        "home",
        "download",
        "calling",
        "privacy",
        "contact"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/download-desktop.png",
        "evidence/contact-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "route and support journey walkthrough",
      "evidence": "Homepage Download reaches the device hub; support selection reaches a detailed staged contact flow; no account wall or upsell interrupts these public journeys.",
      "pathIds": [
        "home",
        "download",
        "contact"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/download-probe.json",
        "evidence/support-form-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "empty support submission and invalid-route test",
      "evidence": "Empty support progression announces “Please enter your phone number,” marks controls aria-invalid, and the 404 page explains the state with Return home and feature links.",
      "pathIds": [
        "contact",
        "not-found"
      ],
      "artifacts": [
        "evidence/support-form-invalid-clean.json",
        "evidence/not-found-probe.json",
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile Lighthouse measured LCP 4",
      "evidence": "Mobile Lighthouse measured LCP 4.2 s and FCP 3.3 s (performance 0.78). A separate desktop trace measured LCP 2.23 s and 0 ms blocking, showing the mobile/load condition is the principal risk rather than main-thread contention.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "WA-005"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "The mobile layout observer recorded CLS 0",
      "evidence": "The mobile layout observer recorded CLS 0.18085 from one shift at about 2460 ms, above the 0.1 good threshold; other sampled templates were stable.",
      "pathIds": [
        "download"
      ],
      "artifacts": [
        "evidence/download-layout-mobile.json",
        "evidence/download-desktop.png"
      ],
      "findingIds": [
        "WA-006"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "trace, layout observers, and Lighthouse",
      "evidence": "Trace and Lighthouse both measured 0 ms blocking; homepage layout had no long tasks and the support sample recorded one borderline 50 ms task.",
      "pathIds": [
        "home",
        "contact"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout-mobile.json",
        "evidence/support-form-layout-mobile.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "The image primitive found all 22 img elements without explicit width/height, 10 below-fold images loaded eagerly, and 12 without srcset",
      "evidence": "The image primitive found all 22 img elements without explicit width/height, 10 below-fold images loaded eagerly, and 12 without srcset. Lighthouse independently failed unsized-images; HAR transferred about 383 kB of images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "WA-007"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse estimated 184 KiB unused JavaScript across six bundles and 14 KiB unused CSS (about 89% of the flagged stylesheet)",
      "evidence": "Lighthouse estimated 184 KiB unused JavaScript across six bundles and 14 KiB unused CSS (about 89% of the flagged stylesheet). HAR recorded 364 kB script transfer across 10 requests.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "WA-008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility and live DOM/form probes",
      "evidence": "Lighthouse image-alt passed; 83 interactive elements had computed names in the live probe; support inputs expose ARIA names and radio labels.",
      "pathIds": [
        "home",
        "contact"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json",
        "evidence/support-inputs.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and contrast screenshot",
      "evidence": "Lighthouse color-contrast passed and the high-contrast preference capture retained visible text and controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-contrast-more.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse failed landmark-one-main and heading-order, identifying footer H4 headings after H2 content",
      "evidence": "Lighthouse failed landmark-one-main and heading-order, identifying footer H4 headings after H2 content. The live landmark probe found only HEADER and FOOTER; keyboard focus itself remained visible.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "WA-009"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "visual review at desktop/mobile/RTL",
      "evidence": "Body copy uses comfortable measure and spacing, remains unclipped at 360 px, and Arabic copy reflows without horizontal overflow.",
      "pathIds": [
        "home",
        "contact",
        "arabic"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/contact-desktop.png",
        "evidence/home-arabic-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "targeted DOM, screenshot, layout, Lighthouse, network, or interaction evidence as applicable",
      "evidence": "Representative-path evidence directly supports “The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.” with no divergence observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse console audit",
      "evidence": "Lighthouse found no browser errors logged during the page load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "pass",
      "confidence": "high",
      "method": "targeted DOM, screenshot, layout, Lighthouse, network, or interaction evidence as applicable",
      "evidence": "Representative-path evidence directly supports “Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)” with no divergence observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse’s BFCache audit found an actionable unload handler in the main frame, plus no-store policies that prevent restoration",
      "evidence": "Lighthouse’s BFCache audit found an actionable unload handler in the main frame, plus no-store policies that prevent restoration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "WA-012"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "metadata probes across templates",
      "evidence": "Homepage, download, contact, and localized routes expose descriptive titles and meta descriptions; crawler captures retain title/H1/description.",
      "pathIds": [
        "home",
        "download",
        "contact",
        "arabic"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/download-probe.json",
        "evidence/contact-probe.json",
        "evidence/home-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse failed descriptive link text and listed five Learn more links to calling, privacy, community, messaging, and business pages",
      "evidence": "Lighthouse failed descriptive link text and listed five Learn more links to calling, privacy, community, messaging, and business pages. Links are real hrefs and remain crawler-visible, but their labels are ambiguous out of context.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "WA-010"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "metadata, robots, sitemap and HTTP probes",
      "evidence": "Representative pages returned 200, expose canonical and 61 hreflang signals; robots points to a populated sitemap and permits ordinary public crawling.",
      "pathIds": [
        "home",
        "download"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/site-files.json",
        "evidence/home-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "The metadata probe found Open Graph title but zero application/ld+json blocks on the WhatsApp organization/product homepage",
      "evidence": "The metadata probe found Open Graph title but zero application/ld+json blocks on the WhatsApp organization/product homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "WA-013"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "pass",
      "confidence": "high",
      "method": "headers, cookies, secrets and HAR",
      "evidence": "HTTPS, HSTS, CSP, nosniff, X-Frame-Options, Permissions-Policy, secure SameSite cookies, no mixed-content errors, and no exposed secrets were observed; the narrower policy gap is recorded under defensive-browser-policies.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/secrets.json",
        "evidence/home.har"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "high",
      "method": "trackers, cookies and HAR",
      "evidence": "No known tracker origins or third-party cookies were found; network origins were WhatsApp-owned and only three first-party cookies were set.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The audited www.whatsapp.com marketing and support surfaces do not perform authentication or request browser permissions; web.whatsapp.com is a separate product origin outside this host audit.",
      "reason": "The audited www.whatsapp.com marketing and support surfaces do not perform authentication or request browser permissions; web.whatsapp.com is a separate product origin outside this host audit.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "The headers primitive found no Referrer-Policy and a CSP style-src containing unsafe-inline",
      "evidence": "The headers primitive found no Referrer-Policy and a CSP style-src containing unsafe-inline. HTTPS, HSTS, nosniff, X-Frame-Options DENY, Permissions-Policy, secure SameSite cookies, and a nonce-based script policy were present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "WA-011"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "discoverability browser/crawler comparison",
      "evidence": "Raw HTML contains 100% of rendered homepage content tokens and 93% on download; both retain title, H1, and description without JavaScript and are not JS shells.",
      "pathIds": [
        "home",
        "download"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/download-discoverability.json",
        "evidence/home-discoverability-crawler.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "multi-template visual/layout walkthrough",
      "evidence": "Five templates and the staged support page rendered without clipping or horizontal overflow; no blank shell or stuck overlay appeared.",
      "pathIds": [
        "home",
        "download",
        "calling",
        "privacy",
        "contact"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/download-layout-mobile.json",
        "evidence/support-form-layout-mobile.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The audited host is a server-rendered public marketing/support site, not the WhatsApp messaging web app; installability/offline app behavior is not a core journey here.",
      "reason": "The audited host is a server-rendered public marketing/support site, not the WhatsApp messaging web app; installability/offline app behavior is not a core journey here.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "deliberate invalid route",
      "evidence": "The invalid route renders a clear “404. This page doesn’t exist,” offers Return home, and lists useful feature recovery links rather than a broken shell.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/not-found.png",
        "evidence/not-found-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "The Arabic probe reported lang=\"ar\" but an empty documentElement",
      "evidence": "The Arabic probe reported lang=\"ar\" but an empty documentElement.dir. The mobile screenshot does visually render RTL and the route has no overflow, so the issue is semantic robustness rather than a visible break today.",
      "pathIds": [
        "arabic"
      ],
      "artifacts": [
        "evidence/arabic-probe.json",
        "evidence/home-arabic-mobile.png"
      ],
      "findingIds": [
        "WA-014"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The representative public pages contain no user-facing dates, prices, currencies, or numeric data requiring locale formatting.",
      "reason": "The representative public pages contain no user-facing dates, prices, currencies, or numeric data requiring locale formatting.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The representative public pages contain no scheduled events or time-zone-sensitive values.",
      "reason": "The representative public pages contain no scheduled events or time-zone-sensitive values.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "visual and journey review",
      "evidence": "No consent nag, disguised ad, forced continuity, confirmshaming, pricing ambiguity, or obstructive cancellation pattern appeared in the public download/support journeys.",
      "pathIds": [
        "home",
        "download",
        "contact"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/download-desktop.png",
        "evidence/support-form-desktop.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "empty support progression",
      "evidence": "After Next Step with empty values, the page announces the phone error through an alert and applies aria-invalid/aria-describedby to the required controls.",
      "pathIds": [
        "contact"
      ],
      "artifacts": [
        "evidence/support-form-invalid-clean.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "The live support-form probe found phone and email controls outside a form element, both email fields use type=text, and all eight input controls have empty autocomplete values",
      "evidence": "The live support-form probe found phone and email controls outside a form element, both email fields use type=text, and all eight input controls have empty autocomplete values. The fields do have ARIA names and empty submission produces an announced phone-number error.",
      "pathIds": [
        "contact"
      ],
      "artifacts": [
        "evidence/support-inputs.json",
        "evidence/support-form-invalid-clean.json",
        "evidence/support-form-desktop.png"
      ],
      "findingIds": [
        "WA-015"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The audited host has no checkout, subscription, consent purchase, or account-management flow; Log in hands off to web.whatsapp.com outside this host audit.",
      "reason": "The audited host has no checkout, subscription, consent purchase, or account-management flow; Log in hands off to web.whatsapp.com outside this host audit.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "targeted DOM, screenshot, layout, Lighthouse, network, or interaction evidence as applicable",
      "evidence": "Representative-path evidence directly supports “Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.” with no divergence observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "trace/HAR idle-load review",
      "evidence": "The trace reported no long tasks or continuing media work and HAR recorded 38 bounded load requests; the separate unused-code finding captures the observed shipping waste.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "pass",
      "confidence": "high",
      "method": "HAR, tracker and media probes",
      "evidence": "The page loaded no video/audio, no known tracker, and 1.11 MB total transfer from WhatsApp-owned origins; no autoplay/background media continued work.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json",
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "WhatsApp’s public marketing site does not declare an agent-facing task surface; its robots policy explicitly opts major AI crawlers out, so WebMCP capability exposure is not inferred as intended.",
      "reason": "WhatsApp’s public marketing site does not declare an agent-facing task surface; its robots policy explicitly opts major AI crawlers out, so WebMCP capability exposure is not inferred as intended.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "No page feature in the representative public marketing/support set calls for on-device inference; absence is not a user-facing failure.",
      "reason": "No page feature in the representative public marketing/support set calls for on-device inference; absence is not a user-facing failure.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "baseline/post heap snapshots plus repeated-scroll metrics",
      "evidence": "After ten bottom/top scroll cycles, heap snapshot self size changed from 10,225,653 to 10,353,127 bytes (+1.25%) and DOM count stayed 1229; no unbounded pattern was observed in this bounded run.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post-scroll.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "heap snapshot and Performance memory metrics",
      "evidence": "The content-heavy page baseline snapshot was about 10.2 MB self size with 195,213 heap graph nodes; live JS used about 6.9 MB before interaction, proportionate to the sampled page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "before/after heap totals and DOM count",
      "evidence": "Repeated scrolling left the live DOM exactly at 1229 nodes and increased snapshot graph nodes only 1.35%; no growing detached/listener symptom was observed, though constructor-level leak tracing was not available.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post-scroll.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-001"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-002"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-003",
        "WA-004"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-005",
        "WA-006",
        "WA-007",
        "WA-008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-009"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-012"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-010",
        "WA-013"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-011"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "WA-014"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "WA-015"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "WhatsApp’s public marketing site does not declare an agent-facing task surface; its robots policy explicitly opts major AI crawlers out, so WebMCP capability exposure is not inferred as intended. No page feature in the representative public marketing/support set calls for on-device inference; absence is not a user-facing failure."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary acquisition journey; represents the main marketing template and first-viewport value proposition.",
      "url": "https://www.whatsapp.com/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-contrast: more",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "repeated scroll"
      ],
      "result": "issues"
    },
    {
      "id": "download",
      "description": "Download hub; represents the primary conversion/task surface and device-option cards.",
      "url": "https://www.whatsapp.com/download",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "no-JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "calling",
      "description": "Feature detail page; represents long-form product/feature templates.",
      "url": "https://www.whatsapp.com/calling",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "privacy",
      "description": "Privacy detail page; represents trust and policy-oriented content.",
      "url": "https://www.whatsapp.com/privacy",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "contact",
      "description": "Contact index and WhatsApp Support form journey; represents support navigation, data-entry, invalid submission, and recovery.",
      "url": "https://www.whatsapp.com/contact/?eea=1&subject=messenger",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "empty submission"
      ],
      "result": "issues"
    },
    {
      "id": "arabic",
      "description": "Arabic localized homepage; represents translated and right-to-left rendering.",
      "url": "https://www.whatsapp.com/?lang=ar",
      "conditions": [
        "mobile 360x800",
        "Arabic locale"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Deliberate invalid route; represents HTTP/navigation failure recovery.",
      "url": "https://www.whatsapp.com/definitely-not-a-real-route-web-uplift",
      "conditions": [
        "desktop 1440x1000"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "WA-001",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The public site ignores the user’s dark color-scheme preference.",
      "evidence": "The dark-mode screenshot is visually identical to the light capture; the dark-condition probe reports body background rgb(255,255,255), colorScheme \"normal\", while matchMedia confirms the emulated dark preference.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-dark-probe.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and provide preference-driven surface, text, control, and image treatments with prefers-color-scheme or light-dark(), following dark-mode guidance.",
      "effort": "medium"
    },
    {
      "id": "WA-002",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Route and state changes do not opt into View Transitions.",
      "evidence": "The live CSS feature probe found zero view-transition declarations and the DOM probe found no view-transition use across the navigation-heavy MPA.",
      "artifacts": [
        "evidence/css-feature-probe.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Use cross-document View Transitions for same-origin marketing routes, with reduced-motion-safe fallbacks and stable transition names for persistent chrome.",
      "effort": "medium"
    },
    {
      "id": "WA-003",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "css",
      "severity": "low",
      "confidence": "high",
      "summary": "Responsive behavior is viewport-only rather than component-aware.",
      "evidence": "The live CSS probe found zero @container rules even though card, feature, header, and download components are reused in materially different widths; mobile layout itself does reflow successfully.",
      "artifacts": [
        "evidence/css-feature-probe.json",
        "evidence/home-mobile.png",
        "evidence/download-desktop.png"
      ],
      "suggestedFix": "Give reusable components containment and use size/style container queries for local layout decisions while retaining viewport fallbacks.",
      "effort": "medium"
    },
    {
      "id": "WA-004",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some interactive targets are too small for reliable touch input.",
      "evidence": "Lighthouse failed target-size and identified the 45×15 px Sitemap target with only 17.2 px safe clickable space; the live probe counted 24 visible controls below 24 px in at least one dimension.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Increase the clickable box and spacing of footer and icon links to at least 24×24 CSS px, preferably 44×44 for primary mobile controls, without shrinking visible focus rings.",
      "effort": "small"
    },
    {
      "id": "WA-005",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The homepage’s lab LCP is outside the good range.",
      "evidence": "Mobile Lighthouse measured LCP 4.2 s and FCP 3.3 s (performance 0.78). A separate desktop trace measured LCP 2.23 s and 0 ms blocking, showing the mobile/load condition is the principal risk rather than main-thread contention.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "suggestedFix": "Prioritize and right-size the hero LCP asset, keep its URL discoverable in initial HTML, avoid competing eager imagery, and verify with repeat mobile Lighthouse/trace captures.",
      "effort": "medium"
    },
    {
      "id": "WA-006",
      "pathId": "download",
      "url": "https://www.whatsapp.com/download",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The download page shifts substantially during mobile load.",
      "evidence": "The mobile layout observer recorded CLS 0.18085 from one shift at about 2460 ms, above the 0.1 good threshold; other sampled templates were stable.",
      "artifacts": [
        "evidence/download-layout-mobile.json",
        "evidence/download-desktop.png"
      ],
      "suggestedFix": "Identify the late-changing download hero/card element, reserve its final space with dimensions/aspect-ratio, and use metric-compatible font fallbacks before retesting the same 360×800 condition.",
      "effort": "medium"
    },
    {
      "id": "WA-007",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery leaves avoidable layout and transfer work.",
      "evidence": "The image primitive found all 22 img elements without explicit width/height, 10 below-fold images loaded eagerly, and 12 without srcset. Lighthouse independently failed unsized-images; HAR transferred about 383 kB of images.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Set intrinsic width/height or aspect-ratio, lazy-load below-fold imagery, add responsive srcset/sizes, and keep only the LCP image eager/high-priority.",
      "effort": "medium"
    },
    {
      "id": "WA-008",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage ships substantial code unused during the audited load.",
      "evidence": "Lighthouse estimated 184 KiB unused JavaScript across six bundles and 14 KiB unused CSS (about 89% of the flagged stylesheet). HAR recorded 364 kB script transfer across 10 requests.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Route-split shared Meta bundles, conditionally load noncritical dependencies, and extract above-the-fold styles so homepage visitors do not pay for unused feature code.",
      "effort": "large"
    },
    {
      "id": "WA-009",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage omits a main landmark and skips heading levels.",
      "evidence": "Lighthouse failed landmark-one-main and heading-order, identifying footer H4 headings after H2 content. The live landmark probe found only HEADER and FOOTER; keyboard focus itself remained visible.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Wrap the unique page content in one main element and use a sequential heading hierarchy for footer sections rather than choosing H4 for styling.",
      "effort": "small"
    },
    {
      "id": "WA-010",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Repeated “Learn more” labels hide destination meaning.",
      "evidence": "Lighthouse failed descriptive link text and listed five Learn more links to calling, privacy, community, messaging, and business pages. Links are real hrefs and remain crawler-visible, but their labels are ambiguous out of context.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/recon.json"
      ],
      "suggestedFix": "Include the destination in each accessible and visible label, for example “Learn more about private calling,” while retaining crawlable hrefs.",
      "effort": "small"
    },
    {
      "id": "WA-011",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "low",
      "confidence": "high",
      "summary": "Browser policy coverage has two avoidable gaps.",
      "evidence": "The headers primitive found no Referrer-Policy and a CSP style-src containing unsafe-inline. HTTPS, HSTS, nosniff, X-Frame-Options DENY, Permissions-Policy, secure SameSite cookies, and a nonce-based script policy were present.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Add an explicit strict-origin-when-cross-origin (or stricter) Referrer-Policy and migrate inline style needs to hashes/nonces or scoped external styles so unsafe-inline can be removed.",
      "effort": "medium"
    },
    {
      "id": "WA-012",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "The homepage cannot use the back/forward cache.",
      "evidence": "Lighthouse’s BFCache audit found an actionable unload handler in the main frame, plus no-store policies that prevent restoration.",
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Remove unload listeners in favor of pagehide/visibilitychange and reassess whether the main document and JavaScript request require no-store.",
      "effort": "small"
    },
    {
      "id": "WA-013",
      "pathId": "home",
      "url": "https://www.whatsapp.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "The organization homepage has social metadata but no structured entity data.",
      "evidence": "The metadata probe found Open Graph title but zero application/ld+json blocks on the WhatsApp organization/product homepage.",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Add accurate schema.org Organization and SoftwareApplication JSON-LD that matches the visible WhatsApp identity and download offering.",
      "effort": "small"
    },
    {
      "id": "WA-014",
      "pathId": "arabic",
      "url": "https://www.whatsapp.com/?lang=ar",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "internationalization",
      "severity": "low",
      "confidence": "high",
      "summary": "The Arabic document does not expose an explicit dir attribute.",
      "evidence": "The Arabic probe reported lang=\"ar\" but an empty documentElement.dir. The mobile screenshot does visually render RTL and the route has no overflow, so the issue is semantic robustness rather than a visible break today.",
      "artifacts": [
        "evidence/arabic-probe.json",
        "evidence/home-arabic-mobile.png"
      ],
      "suggestedFix": "Set dir=\"rtl\" on Arabic document roots (and dir=\"auto\" for user-supplied mixed-direction content) and continue replacing physical CSS offsets with logical properties.",
      "effort": "small"
    },
    {
      "id": "WA-015",
      "pathId": "contact",
      "url": "https://www.whatsapp.com/contact/?eea=1&subject=messenger",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "severity": "medium",
      "confidence": "high",
      "summary": "The support form does not provide browser autofill semantics.",
      "evidence": "The live support-form probe found phone and email controls outside a form element, both email fields use type=text, and all eight input controls have empty autocomplete values. The fields do have ARIA names and empty submission produces an announced phone-number error.",
      "artifacts": [
        "evidence/support-inputs.json",
        "evidence/support-form-invalid-clean.json",
        "evidence/support-form-desktop.png"
      ],
      "suggestedFix": "Use a real form with submit semantics, type=email for email controls, type=tel for phone, and autocomplete tokens such as tel, email, and language; preserve the existing announced error recovery.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "TASK-01",
      "title": "Prioritize and right-size the hero LCP asset, keep its URL discoverable in initial HTML, avoid competing eager imagery, and verify with repeat mobile Lighthouse/trace captures.",
      "priority": 1,
      "findingIds": [
        "WA-005"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "TASK-02",
      "title": "Identify the late-changing download hero/card element, reserve its final space with dimensions/aspect-ratio, and use metric-compatible font fallbacks before retesting the same 360×800 condition.",
      "priority": 2,
      "findingIds": [
        "WA-006"
      ],
      "guidanceId": "visually-stable-font-fallbacks",
      "status": "open"
    },
    {
      "id": "TASK-03",
      "title": "Set intrinsic width/height or aspect-ratio, lazy-load below-fold imagery, add responsive srcset/sizes, and keep only the LCP image eager/high-priority.",
      "priority": 3,
      "findingIds": [
        "WA-007"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "TASK-04",
      "title": "Wrap the unique page content in one main element and use a sequential heading hierarchy for footer sections rather than choosing H4 for styling.",
      "priority": 4,
      "findingIds": [
        "WA-009"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "TASK-05",
      "title": "Use a real form with submit semantics, type=email for email controls, type=tel for phone, and autocomplete tokens such as tel, email, and language; preserve the existing announced error recovery.",
      "priority": 5,
      "findingIds": [
        "WA-015"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "TASK-06",
      "title": "Increase the clickable box and spacing of footer and icon links to at least 24×24 CSS px, preferably 44×44 for primary mobile controls, without shrinking visible focus rings.",
      "priority": 6,
      "findingIds": [
        "WA-004"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "TASK-07",
      "title": "Declare color-scheme: light dark and provide preference-driven surface, text, control, and image treatments with prefers-color-scheme or light-dark(), following dark-mode guidance.",
      "priority": 7,
      "findingIds": [
        "WA-001"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "TASK-08",
      "title": "Route-split shared Meta bundles, conditionally load noncritical dependencies, and extract above-the-fold styles so homepage visitors do not pay for unused feature code.",
      "priority": 8,
      "findingIds": [
        "WA-008"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "TASK-09",
      "title": "Include the destination in each accessible and visible label, for example “Learn more about private calling,” while retaining crawlable hrefs.",
      "priority": 9,
      "findingIds": [
        "WA-010"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "TASK-10",
      "title": "Add an explicit strict-origin-when-cross-origin (or stricter) Referrer-Policy and migrate inline style needs to hashes/nonces or scoped external styles so unsafe-inline can be removed.",
      "priority": 10,
      "findingIds": [
        "WA-011"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "TASK-11",
      "title": "Remove unload listeners in favor of pagehide/visibilitychange and reassess whether the main document and JavaScript request require no-store.",
      "priority": 11,
      "findingIds": [
        "WA-012"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "TASK-12",
      "title": "Set dir=\"rtl\" on Arabic document roots (and dir=\"auto\" for user-supplied mixed-direction content) and continue replacing physical CSS offsets with logical properties.",
      "priority": 12,
      "findingIds": [
        "WA-014"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "TASK-13",
      "title": "Add accurate schema.org Organization and SoftwareApplication JSON-LD that matches the visible WhatsApp identity and download offering.",
      "priority": 13,
      "findingIds": [
        "WA-013"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "TASK-14",
      "title": "Use cross-document View Transitions for same-origin marketing routes, with reduced-motion-safe fallbacks and stable transition names for persistent chrome.",
      "priority": 14,
      "findingIds": [
        "WA-002"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    },
    {
      "id": "TASK-15",
      "title": "Give reusable components containment and use size/style container queries for local layout decisions while retaining viewport fallbacks.",
      "priority": 15,
      "findingIds": [
        "WA-003"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T02-13-55-618Z"
}
