{
  "url": "https://www.wattpad.com",
  "auditedAt": "2026-07-20T17:44:54.145Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete report-mode audit across five representative archetypes/conditions.",
  "page": {
    "appType": "hybrid",
    "framework": "React-based modern public templates plus a legacy login template",
    "notes": "Public reading/discovery service with SSR content and interactive client enhancements."
  },
  "evidenceUsed": [
    "screenshot",
    "transition-video",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "Lighthouse",
    "curl HTTP/robots/sitemap"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "same-document-transitions",
    "shrinking-header-on-scroll",
    "light-dismiss-a-dialog",
    "fluid-scaling",
    "improve-text-layout-and-legibility",
    "identify-inp-causes",
    "accessibility",
    "css",
    "security",
    "flicker-free-client-side-ab-testing",
    "translator",
    "search-hidden-content",
    "deliver-optimized-decorative-images",
    "webmcp",
    "manage-recurring-intervals",
    "forms",
    "passkeys",
    "optimize-image-priority",
    "privacy",
    "persistent-toast-notifications"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies json"
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "discoverability crawler png"
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "discoverability rendered png"
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "discoverability json"
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers json"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark png",
      "condition": "prefers-color-scheme: dark"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop png"
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom json"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-forced-colors.png",
      "caption": "home forced colors png",
      "condition": "forced-colors: active; prefers-contrast: more"
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout json at mobile viewport"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile png at mobile viewport"
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe json"
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon json"
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary json"
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary json"
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace json"
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home har"
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images json"
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "lighthouse json"
    },
    {
      "type": "screenshot",
      "path": "evidence/listing-desktop.png",
      "caption": "listing desktop png"
    },
    {
      "type": "other",
      "path": "evidence/login-email-probe.json",
      "caption": "login email probe json"
    },
    {
      "type": "screenshot",
      "path": "evidence/login-mobile.png",
      "caption": "login mobile png at mobile viewport"
    },
    {
      "type": "other",
      "path": "evidence/login-probe.json",
      "caption": "login probe json"
    },
    {
      "type": "other",
      "path": "evidence/login-validation-probe.json",
      "caption": "login validation probe json"
    },
    {
      "type": "other",
      "path": "evidence/not-found-headers.txt",
      "caption": "not found headers txt"
    },
    {
      "type": "other",
      "path": "evidence/not-found.html",
      "caption": "not found html"
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion-probe.json",
      "caption": "reduced motion probe json"
    },
    {
      "type": "other",
      "path": "evidence/robots-headers.txt",
      "caption": "robots headers txt"
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots txt"
    },
    {
      "type": "screenshot",
      "path": "evidence/search-desktop.png",
      "caption": "search desktop png"
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets json"
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap xml"
    },
    {
      "type": "video",
      "path": "evidence/start-reading.mp4",
      "caption": "start reading mp4"
    },
    {
      "type": "screenshot",
      "path": "evidence/story-desktop.png",
      "caption": "story desktop png"
    },
    {
      "type": "screenshot",
      "path": "evidence/story-discoverability-crawler.png",
      "caption": "story discoverability crawler png"
    },
    {
      "type": "screenshot",
      "path": "evidence/story-discoverability-rendered.png",
      "caption": "story discoverability rendered png"
    },
    {
      "type": "discoverability",
      "path": "evidence/story-discoverability.json",
      "caption": "story discoverability json"
    },
    {
      "type": "dom",
      "path": "evidence/story-dom.json",
      "caption": "story dom json"
    },
    {
      "type": "heap",
      "path": "evidence/story-heap-baseline.heapsnapshot",
      "caption": "story heap baseline heapsnapshot"
    },
    {
      "type": "heap",
      "path": "evidence/story-heap-post.heapsnapshot",
      "caption": "story heap post heapsnapshot"
    },
    {
      "type": "layout",
      "path": "evidence/story-mobile-layout.json",
      "caption": "story mobile layout json at mobile viewport"
    },
    {
      "type": "other",
      "path": "evidence/story-probe.json",
      "caption": "story probe json"
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers json"
    }
  ],
  "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": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The dark-condition screenshot remains white and home-probe.json reports colorScheme normal, a white body background, no prefers-color-scheme rule.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Reduced-motion probe found no active animations and auto scroll behavior under reduce.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Forced-colors screenshot kept navigation, hero, consent controls, and text visible.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Live CSS inspection found view-transition rules; the recorded start-reading interaction provides route-transition evidence.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Live CSS inspection found animation-timeline/scroll-timeline usage with no observed long scroll tasks.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Live CSS inspection found scroll-snap behavior and mobile screenshots show native horizontal content rails.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Live CSS contains scroll-timeline behavior and representative screenshots show stable responsive navigation chrome.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Live CSS inspection found anchor-name/position-anchor declarations.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "The recorded Start reading interaction and clear carousel controls provide directional attention cues.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Desktop, mobile, listing, story, search, and login screenshots show a first-load panel for 1,013 partners covering a substantial portion of the viewport. The probe identifies a custom DIV role=dialog without aria-modal.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/story-desktop.png",
        "evidence/login-mobile.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Desktop, mobile, listing, story, search, and login screenshots show a first-load panel for 1,013 partners covering a substantial portion of the viewport. The probe identifies a custom DIV role=dialog without aria-modal.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/story-desktop.png",
        "evidence/login-mobile.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Representative screenshots devote the post-consent page primarily to stories, genres, and reading actions.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Mobile layout probes measured 0px horizontal overflow at 360x800 on home and story.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Live CSS inspection found @container usage and mobile/desktop captures show components changing composition.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The objective DOM probe counted 19 visible controls below 24px on both home and story, and 15 on login. Lighthouse accessibility was 0.97 but does not negate these measured target dimensions.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Hero and story screenshots clearly state the offer and expose Get started / Start reading actions.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Desktop, mobile, listing, story, search, and login screenshots show a first-load panel for 1,013 partners covering a substantial portion of the viewport. The probe identifies a custom DIV role=dialog without aria-modal.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/story-desktop.png",
        "evidence/login-mobile.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The unknown-route request redirects to /user/this-route-does-not-exist-web-uplift, then returns HTTP 404 with the generic homepage title and an h1 aria-label of “s profile”.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/not-found-headers.txt",
        "evidence/not-found.html"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Lighthouse measured LCP 6.8s, FCP 5.1s, TTI 21.9s, and CLS 0.117. The mobile layout primitive independently measured CLS 0.136, including a 0.106 shift around 3.8s.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Lighthouse measured LCP 6.8s, FCP 5.1s, TTI 21.9s, and CLS 0.117. The mobile layout primitive independently measured CLS 0.136, including a 0.106 shift around 3.8s.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "HAR recorded 203 requests and 3.94MB transferred, including 82 scripts and 93 images. Lighthouse reported 4,174KiB total, about 449KiB unused JS, 41KiB unused CSS, and 2.7s main-thread work.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "HAR recorded 203 requests and 3.94MB transferred, including 82 scripts and 93 images. Lighthouse reported 4,174KiB total, about 449KiB unused JS, 41KiB unused CSS, and 2.7s main-thread work. The image primitive found 98/100 images without explicit dimensions, 38 oversized, 25 below-fold images not lazy-loaded, and 91 legacy-format assets. Lighthouse failed aspect-ratio and responsive-image audits.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json",
        "evidence/images.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F05",
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "HAR recorded 203 requests and 3.94MB transferred, including 82 scripts and 93 images. Lighthouse reported 4,174KiB total, about 449KiB unused JS, 41KiB unused CSS, and 2.7s main-thread work.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The home probe found unlabeled search inputs and many image-only cover links without textual or ARIA naming; Lighthouse also failed label-content-name-mismatch.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Lighthouse/axe color-contrast audit failed on the tested homepage. Forced-colors rendering remained usable, so this finding is limited to authored color pairs in normal mode.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-forced-colors.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "home-probe.json reports zero h1 elements and starts the visual hero at h2; login-probe.json also reports zero h1. The story detail correctly has one h1.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/login-probe.json",
        "evidence/story-probe.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Desktop and mobile screenshots show readable line lengths, unclipped headings, and coherent content grouping.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The objective DOM probe counted 19 visible controls below 24px on both home and story, and 15 on login. Lighthouse accessibility was 0.97 but does not negate these measured target dimensions.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Lighthouse errors-in-console audit passed.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The image primitive found 98/100 images without explicit dimensions, 38 oversized, 25 below-fold images not lazy-loaded, and 91 legacy-format assets. Lighthouse failed aspect-ratio and responsive-image audits.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Lighthouse passed deprecations, BFCache, paste prevention, geolocation-on-start, and notification-on-start audits.",
      "pathIds": [
        "home",
        "story"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Home, story, and login probes each found descriptive titles and meta descriptions.",
      "pathIds": [
        "home",
        "story",
        "listing"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "All sampled anchors had hrefs, viewport meta was present, robots permits public pages, and mobile layouts had no overflow.",
      "pathIds": [
        "home",
        "story",
        "listing"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Home/story/login exposed canonicals; public responses were successful and robots/sitemap signals were present.",
      "pathIds": [
        "home",
        "story",
        "listing"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The homepage and story probes found no Open Graph properties; the story has JSON-LD, while the organization/home entity has no JSON-LD.",
      "pathIds": [
        "home",
        "story",
        "listing"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "headers.json reports no CSP, X-Content-Type-Options, Referrer-Policy, or Permissions-Policy. cookies.json reports 18 flagged cookies, including non-Secure analytics and host cookies and broad SameSite=None usage.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The tracker probe saw 16 third-party origins and four known trackers. HAR attributed 90 requests and 2.18MB to third-party origins, while the consent UI names 1,013 partners.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The login screen offers Google, Facebook, and email/password. The email probe exposed username and password fields but no passkey action, despite browser WebAuthn support.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-mobile.png",
        "evidence/login-email-probe.json",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "headers.json reports no CSP, X-Content-Type-Options, Referrer-Policy, or Permissions-Policy. cookies.json reports 18 flagged cookies, including non-Secure analytics and host cookies and broad SameSite=None usage.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Discoverability measured 68% raw-HTML coverage on home and 92% on story; neither page was a JS shell.",
      "pathIds": [
        "home",
        "story",
        "resilience"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Desktop, mobile, listing, story, search, and login screenshots show a first-load panel for 1,013 partners covering a substantial portion of the viewport. The probe identifies a custom DIV role=dialog without aria-modal.",
      "pathIds": [
        "home",
        "story",
        "resilience"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/story-desktop.png",
        "evidence/login-mobile.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "Home and story probes found no web app manifest and no controlling service worker on representative app/content routes.",
      "pathIds": [
        "home",
        "story",
        "resilience"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The unknown-route request redirects to /user/this-route-does-not-exist-web-uplift, then returns HTTP 404 with the generic homepage title and an h1 aria-label of “s profile”.",
      "pathIds": [
        "home",
        "story",
        "resilience"
      ],
      "artifacts": [
        "evidence/not-found-headers.txt",
        "evidence/not-found.html"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Modern home/story templates use en-US, ltr, and logical CSS properties; login exposes a language selector.",
      "pathIds": [
        "story"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The global story page renders “Tue, Dec 2, 2025” but story-probe.json finds no time elements, while the site advertises language selection and global reach.",
      "pathIds": [
        "story"
      ],
      "artifacts": [
        "evidence/story-probe.json",
        "evidence/story-desktop.png"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative routes",
      "evidence": "No representative route exposed scheduled events, partial times, or cross-zone coordination; this specific time-zone check does not apply to the sampled content.",
      "reason": "No representative route exposed scheduled events, partial times, or cross-zone coordination; this specific time-zone check does not apply to the sampled content."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Consent offers Reject All with prominence equal to Accept, and commercial calls to action are plainly labeled in sampled states.",
      "pathIds": [
        "login"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Empty email-login submission produced native, specific “Please fill in this field” feedback for username and password.",
      "pathIds": [
        "login"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "login-email-probe.json reports required username and password controls with empty autocomplete values. Empty submission uses clear native validation, so this finding is specifically about input assistance.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-email-probe.json",
        "evidence/login-validation-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Pricing/subscription completion was not attempted, but sampled login and premium entry controls were explicit and reversible before commitment.",
      "pathIds": [
        "login"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The image primitive found 98/100 images without explicit dimensions, 38 oversized, 25 below-fold images not lazy-loaded, and 91 legacy-format assets. Lighthouse failed aspect-ratio and responsive-image audits.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "HAR recorded 203 requests and 3.94MB transferred, including 82 scripts and 93 images. Lighthouse reported 4,174KiB total, about 449KiB unused JS, 41KiB unused CSS, and 2.7s main-thread work.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-route screenshot, DOM/evaluate probes, and objective primitive/tool evidence",
      "evidence": "The tracker probe saw 16 third-party origins and four known trackers. HAR attributed 90 requests and 2.18MB to third-party origins, while the consent UI names 1,013 partners.",
      "pathIds": [
        "home",
        "story"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative routes",
      "evidence": "No declared agent-facing intent or transactional agent surface was found; this emerging opportunity is not an obligation for this run.",
      "reason": "No declared agent-facing intent or transactional agent surface was found; this emerging opportunity is not an obligation for this run."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative routes",
      "evidence": "No declared product intent for on-device inference was found on the representative reading, discovery, or login routes.",
      "reason": "No declared product intent for on-device inference was found on the representative reading, discovery, or login routes."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "After repeated story tab/scroll interaction, heap grew 3.2% (30.79MB to 31.76MB) with no Detached* constructor among top retained groups; no unbounded pattern was established.",
      "pathIds": [
        "story"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Story heap was about 30.8MB baseline and 31.8MB post-interaction for roughly 700 DOM nodes, proportionate to this media/content page.",
      "pathIds": [
        "story"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Representative cross-route visual inspection plus DOM/evaluate or objective tool evidence",
      "evidence": "Before/after heap summaries show stable closures (35,000 to 35,150), stable Set count, and no Detached* constructor in top retained groups.",
      "pathIds": [
        "story"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02",
        "F15"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05",
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F07",
        "F08",
        "F03"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F02",
        "F14",
        "F15"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F09",
        "F05",
        "F12"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "All checks were judged not applicable under the principle’s contextual applicability criteria."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and acquisition surface; covers first impression, preferences, responsive layout, global performance/privacy, and navigation.",
      "url": "https://www.wattpad.com",
      "conditions": [
        "desktop 844px capture",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "forced-colors: active",
        "prefers-reduced-motion: reduce"
      ],
      "result": "issues"
    },
    {
      "id": "listing",
      "description": "Romance listing archetype representing category discovery and dense repeated story cards.",
      "url": "https://www.wattpad.com/stories/romance",
      "conditions": [
        "desktop 1440x900"
      ],
      "result": "issues"
    },
    {
      "id": "story",
      "description": "Story detail archetype and Start reading interaction; covers primary content, metadata, SSR, responsive layout, and memory.",
      "url": "https://www.wattpad.com/story/402659967",
      "conditions": [
        "desktop",
        "mobile 360x800",
        "repeated tabs/scroll heap comparison"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Authentication journey including email-field reveal and empty-form validation.",
      "url": "https://www.wattpad.com/login",
      "conditions": [
        "mobile 360x800",
        "keyboard/focus probe",
        "empty form submission"
      ],
      "result": "issues"
    },
    {
      "id": "metadata",
      "description": "Cross-route canonical, robots, sitemap, JSON-LD, Open Graph, and raw-HTML discoverability review.",
      "url": "https://www.wattpad.com",
      "conditions": [
        "JavaScript enabled vs raw crawler fetch"
      ],
      "result": "issues"
    },
    {
      "id": "resilience",
      "description": "Unknown-route HTTP behavior plus manifest/service-worker/offline capability inspection.",
      "url": "https://www.wattpad.com/this-route-does-not-exist-web-uplift",
      "conditions": [
        "HTTP redirect and final 404"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "summary": "The public experience stays light when the user requests a dark color scheme.",
      "evidence": "The dark-condition screenshot remains white and home-probe.json reports colorScheme normal, a white body background, no prefers-color-scheme rule.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and map surfaces, text, controls, and browser chrome through preference-aware color tokens.",
      "effort": "medium",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F02",
      "severity": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "summary": "A large consent panel interrupts every audited public route and obscures primary content.",
      "evidence": "Desktop, mobile, listing, story, search, and login screenshots show a first-load panel for 1,013 partners covering a substantial portion of the viewport. The probe identifies a custom DIV role=dialog without aria-modal.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/story-desktop.png",
        "evidence/login-mobile.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Use a compact, semantic consent dialog with focus containment, equal accept/reject prominence, persistent choice, and no repeated obstruction after a decision.",
      "effort": "medium",
      "pathId": "multi-route",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F03",
      "severity": "medium",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Numerous interactive targets are smaller than a robust touch target.",
      "evidence": "The objective DOM probe counted 19 visible controls below 24px on both home and story, and 15 on login. Lighthouse accessibility was 0.97 but does not negate these measured target dimensions.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json",
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Increase hit areas to at least 24 by 24 CSS pixels, preferably 44 by 44 for primary mobile controls, while preserving visible focus.",
      "effort": "small",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F04",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "identify-inp-causes",
      "guidanceCategory": "performance",
      "summary": "The homepage is slow and shifts beyond the good CLS range in the tested mobile profile.",
      "evidence": "Lighthouse measured LCP 6.8s, FCP 5.1s, TTI 21.9s, and CLS 0.117. The mobile layout primitive independently measured CLS 0.136, including a 0.106 shift around 3.8s.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Prioritize the LCP element, reserve all late content space, shorten critical chains, and defer non-essential scripts until after the primary content is usable.",
      "effort": "large",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F05",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "identify-inp-causes",
      "guidanceCategory": "performance",
      "summary": "The landing page ships a heavy, script-rich dependency graph with substantial unused code.",
      "evidence": "HAR recorded 203 requests and 3.94MB transferred, including 82 scripts and 93 images. Lighthouse reported 4,174KiB total, about 449KiB unused JS, 41KiB unused CSS, and 2.7s main-thread work.",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "suggestedFix": "Route-split first-party code, delay analytics/ads/identity SDKs until needed or consented, remove unused CSS, and keep the critical path to essential content only.",
      "effort": "large",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F06",
      "severity": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Some controls do not expose a reliable accessible name.",
      "evidence": "The home probe found unlabeled search inputs and many image-only cover links without textual or ARIA naming; Lighthouse also failed label-content-name-mismatch.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/lighthouse.json"
      ],
      "suggestedFix": "Give each control a programmatic name matching its visible purpose; associate search labels and name cover links from the story title.",
      "effort": "small",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F07",
      "severity": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Some text does not meet minimum color contrast.",
      "evidence": "Lighthouse/axe color-contrast audit failed on the tested homepage. Forced-colors rendering remained usable, so this finding is limited to authored color pairs in normal mode.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-forced-colors.png"
      ],
      "suggestedFix": "Adjust the failing foreground/background tokens to meet WCAG AA and verify hover, disabled, and muted-text states.",
      "effort": "small",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F08",
      "severity": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Key entry pages omit a level-one heading and use inconsistent landmark structure.",
      "evidence": "home-probe.json reports zero h1 elements and starts the visual hero at h2; login-probe.json also reports zero h1. The story detail correctly has one h1.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/login-probe.json",
        "evidence/story-probe.json"
      ],
      "suggestedFix": "Use one descriptive h1 for each page purpose and keep a logical heading hierarchy and main landmark across both modern and legacy templates.",
      "effort": "small",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F09",
      "severity": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "summary": "Image delivery causes stability, clarity, and bandwidth problems.",
      "evidence": "The image primitive found 98/100 images without explicit dimensions, 38 oversized, 25 below-fold images not lazy-loaded, and 91 legacy-format assets. Lighthouse failed aspect-ratio and responsive-image audits.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json"
      ],
      "suggestedFix": "Set intrinsic width/height or aspect-ratio, provide responsive srcset/sizes, use modern formats where supported, and lazy-load non-critical images.",
      "effort": "medium",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F10",
      "severity": "low",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "summary": "Share-preview metadata is incomplete on representative public pages.",
      "evidence": "The homepage and story probes found no Open Graph properties; the story has JSON-LD, while the organization/home entity has no JSON-LD.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "suggestedFix": "Add accurate Open Graph/Twitter metadata to public pages and Organization/WebSite JSON-LD to the homepage, matching visible titles, descriptions, and images.",
      "effort": "small",
      "pathId": "metadata",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F11",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "Important browser security defenses and cookie attributes are missing.",
      "evidence": "headers.json reports no CSP, X-Content-Type-Options, Referrer-Policy, or Permissions-Policy. cookies.json reports 18 flagged cookies, including non-Secure analytics and host cookies and broad SameSite=None usage.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Deploy a restrictive CSP, nosniff, Referrer-Policy, and Permissions-Policy; mark all HTTPS cookies Secure and use Lax/Strict unless cross-site behavior is essential.",
      "effort": "medium",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F12",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "summary": "The first-load third-party and tracking footprint is disproportionate.",
      "evidence": "The tracker probe saw 16 third-party origins and four known trackers. HAR attributed 90 requests and 2.18MB to third-party origins, while the consent UI names 1,013 partners.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Default to minimal first-party analytics, gate all non-essential vendors behind consent, remove redundant trackers, and batch/defer telemetry.",
      "effort": "large",
      "pathId": "home",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F13",
      "severity": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "security",
      "summary": "The visible authentication choices do not offer a first-party phishing-resistant passkey path.",
      "evidence": "The login screen offers Google, Facebook, and email/password. The email probe exposed username and password fields but no passkey action, despite browser WebAuthn support.",
      "artifacts": [
        "evidence/login-mobile.png",
        "evidence/login-email-probe.json",
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Add passkey registration and authentication alongside federated and recovery options, with conditional UI where supported.",
      "effort": "large",
      "pathId": "login",
      "confidence": "high",
      "url": "https://www.wattpad.com/login"
    },
    {
      "id": "F14",
      "severity": "medium",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "summary": "The app-like reading service exposes neither installability metadata nor an offline fallback.",
      "evidence": "Home and story probes found no web app manifest and no controlling service worker on representative app/content routes.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "suggestedFix": "Provide a manifest and a service worker that preserves a useful offline shell and previously saved reading content, with clear stale/offline status.",
      "effort": "large",
      "pathId": "resilience",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F15",
      "severity": "medium",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "summary": "An unknown route is interpreted as a user profile and returns a malformed recovery page.",
      "evidence": "The unknown-route request redirects to /user/this-route-does-not-exist-web-uplift, then returns HTTP 404 with the generic homepage title and an h1 aria-label of “s profile”.",
      "artifacts": [
        "evidence/not-found-headers.txt",
        "evidence/not-found.html"
      ],
      "suggestedFix": "Render a dedicated 404 state with a descriptive title, clear explanation, search/home actions, and no malformed user-profile semantics.",
      "effort": "small",
      "pathId": "resilience",
      "confidence": "high",
      "url": "https://www.wattpad.com"
    },
    {
      "id": "F16",
      "severity": "low",
      "principleId": "be-internationalised",
      "principleCheckId": "locale-aware-data",
      "guidanceId": "translator",
      "guidanceCategory": "built-in-ai",
      "summary": "Locale-sensitive content is rendered as fixed English text without semantic time markup.",
      "evidence": "The global story page renders “Tue, Dec 2, 2025” but story-probe.json finds no time elements, while the site advertises language selection and global reach.",
      "artifacts": [
        "evidence/story-probe.json",
        "evidence/story-desktop.png"
      ],
      "suggestedFix": "Emit semantic datetime values and format dates, durations, and numbers with Intl using the selected locale.",
      "effort": "small",
      "pathId": "story",
      "confidence": "high",
      "url": "https://www.wattpad.com/story/402659967"
    },
    {
      "id": "F17",
      "severity": "medium",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "summary": "The email login fields omit autocomplete tokens.",
      "evidence": "login-email-probe.json reports required username and password controls with empty autocomplete values. Empty submission uses clear native validation, so this finding is specifically about input assistance.",
      "artifacts": [
        "evidence/login-email-probe.json",
        "evidence/login-validation-probe.json"
      ],
      "suggestedFix": "Use autocomplete=\"username\" and autocomplete=\"current-password\", and preserve password-manager and paste support.",
      "effort": "trivial",
      "pathId": "login",
      "confidence": "high",
      "url": "https://www.wattpad.com/login"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Cut first-load third-party, script, and image cost",
      "priority": 1,
      "findingIds": [
        "F04",
        "F05",
        "F09",
        "F12"
      ],
      "guidanceId": "identify-inp-causes",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Deploy security headers and correct cookie attributes",
      "priority": 2,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Replace the obstructive consent layer with a semantic, accessible dialog",
      "priority": 3,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Fix accessible names, contrast, headings, and target sizes",
      "priority": 4,
      "findingIds": [
        "F03",
        "F06",
        "F07",
        "F08"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Add passkeys and login autocomplete tokens",
      "priority": 5,
      "findingIds": [
        "F13",
        "F17"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add dark theme support",
      "priority": 6,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Provide installable/offline and dedicated 404 recovery states",
      "priority": 7,
      "findingIds": [
        "F14",
        "F15"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Complete social metadata and locale-aware date output",
      "priority": 8,
      "findingIds": [
        "F10",
        "F16"
      ],
      "guidanceId": "translator",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T17-44-54-145Z"
}
