{
  "url": "https://manhwaread.com",
  "auditedAt": "2026-07-21T10:04:54.651Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Atomic coverage complete across 58 checks and six representative paths.",
  "page": {
    "appType": "mpa",
    "framework": "WordPress/custom theme",
    "notes": "Server-rendered adult manhwa catalog and long-form image reader. Not covered: authenticated post-login states, account mutation, every title/chapter, payment (none observed), and exhaustive ad rotation; selected pages represent homepage, listing, detail, reader, search and error templates."
  },
  "evidenceUsed": [
    "screenshot",
    "layout-metrics",
    "dom",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse",
    "Modern Web Guidance"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "scroll-entry-exit-effects",
    "physics-based-easing",
    "navigation-drawer",
    "position-aware-tooltips",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "fluid-scaling",
    "size-aware-styling",
    "forms",
    "improve-text-layout-and-legibility",
    "performance",
    "optimize-image-priority",
    "optimize-script-priority",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "defer-rendering-heavy-content",
    "html",
    "css",
    "security",
    "privacy",
    "flicker-free-client-side-ab-testing",
    "resilient-context-menus-and-nested-dropdowns",
    "translator",
    "support-global-calendar-systems",
    "coordinate-global-events",
    "validate-input-after-interaction",
    "autofill-sign-in-form",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "webmcp",
    "agentic-forms",
    "language-model",
    "manage-recurring-intervals",
    "scroll-progress-indicator",
    "passkey-authentication"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/404-mobile.png",
      "caption": "404 mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/404-recovery.json",
      "caption": "404 recovery",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/a11y-structure.json",
      "caption": "a11y structure",
      "findingIds": [
        "F11",
        "F19",
        "F05",
        "F12",
        "F22",
        "F23"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/chapter-desktop.png",
      "caption": "chapter desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/chapter-discoverability-crawler.png",
      "caption": "chapter discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/chapter-discoverability-rendered.png",
      "caption": "chapter discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/chapter-discoverability.json",
      "caption": "chapter discoverability",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/chapter-images.json",
      "caption": "chapter images",
      "findingIds": [
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/chapter-metadata.json",
      "caption": "chapter metadata",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/chapter-mobile-layout.json",
      "caption": "chapter mobile layout",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/chapter-mobile.png",
      "caption": "chapter mobile",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/chapter-summary.json",
      "caption": "chapter summary",
      "findingIds": [
        "F25"
      ]
    },
    {
      "type": "har",
      "path": "evidence/chapter.har",
      "caption": "chapter",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/contrast-focus-targets.json",
      "caption": "contrast focus targets",
      "findingIds": [
        "F07",
        "F12",
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-desktop.png",
      "caption": "detail desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-discoverability-crawler.png",
      "caption": "detail discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-discoverability-rendered.png",
      "caption": "detail discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/detail-discoverability.json",
      "caption": "detail discoverability",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/detail-metadata.json",
      "caption": "detail metadata",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/detail-mobile-layout.json",
      "caption": "detail mobile layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-mobile.png",
      "caption": "detail mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F17",
        "F18"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-after.json",
      "caption": "heap after",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark-pref.png",
      "caption": "home dark pref",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F06"
      ]
    },
    {
      "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": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "F14",
        "F24"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light-pref.png",
      "caption": "home light pref",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon",
      "findingIds": [
        "F16",
        "F20"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F10",
        "F25"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": []
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home",
      "findingIds": [
        "F09",
        "F10",
        "F14",
        "F16",
        "F24",
        "F15"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-selected.json",
      "caption": "lighthouse selected",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/list-desktop.png",
      "caption": "list desktop",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/list-mobile-layout.json",
      "caption": "list mobile layout",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mwg-contextual.md",
      "caption": "mwg contextual",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mwg-list.json",
      "caption": "mwg list",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mwg-quality.md",
      "caption": "mwg quality",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mwg-searches.jsonl",
      "caption": "mwg searches",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mwg-supplemental.md",
      "caption": "mwg supplemental",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mwg-ux.md",
      "caption": "mwg ux",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe",
      "findingIds": [
        "F19",
        "F02",
        "F05",
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-css.json",
      "caption": "preferences css",
      "findingIds": [
        "F03",
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "search mobile",
      "findingIds": [
        "F04",
        "F08",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/search-recon.json",
      "caption": "search recon",
      "findingIds": [
        "F08",
        "F11",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap",
      "findingIds": []
    },
    {
      "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": "Direct evidence review: evidence/home-light-pref.png, evidence/home-dark-pref.png",
      "evidence": "Light- and dark-preference screenshots are byte-identical (1,088,820 bytes) and both render the hard-coded dark theme; the page offers only a manual theme toggle.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light-pref.png",
        "evidence/home-dark-pref.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "evaluate under prefers-reduced-motion: reduce",
      "evidence": "The emulation probe matched reduced motion and found zero running animations; no auto-advance or essential motion was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-css.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "computed-style and focus probe under prefers-contrast: more plus Lighthouse",
      "evidence": "Controls and text remained visible; primary targets retained native focus outlines and Lighthouse accessibility/contrast audits passed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/contrast-focus-targets.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/platform-probe.json, evidence/preferences-css.json",
      "evidence": "The platform probe found View Transitions supported by the browser but no view-transition CSS usage; navigation is conventional abrupt document replacement.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/preferences-css.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No authored scroll-linked animation or parallax effect exists; there is no scroll event animation implementation to assess.",
      "reason": "No authored scroll-linked animation or parallax effect exists; there is no scroll event animation implementation to assess."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "mobile screenshots and DOM/CSS interaction inspection",
      "evidence": "The chapter reader uses native vertical scrolling and fixed labelled Previous/Next controls; no custom pointermove gesture layer was found.",
      "pathIds": [
        "chapter"
      ],
      "artifacts": [
        "evidence/chapter-mobile.png",
        "evidence/chapter-metadata.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/chapter-mobile-layout.json, evidence/chapter-mobile.png, evidence/preferences-css.json",
      "evidence": "The chapter mobile layout is 69,269px tall, while the screenshot shows only a fixed chapter bar; the CSS probe found no scroll-state query or declarative progress treatment.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/chapter-mobile-layout.json",
        "evidence/chapter-mobile.png",
        "evidence/preferences-css.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No tooltip or viewport-edge popover is part of the representative core paths; authentication uses modal dialogs instead.",
      "reason": "No tooltip or viewport-edge popover is part of the representative core paths; authentication uses modal dialogs instead."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "visual inspection of home, detail and chapter states",
      "evidence": "Active Home styling, clear Read First/Read Last actions, chapter title, back control and labelled Previous/Next controls preserve orientation.",
      "pathIds": [
        "home",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/detail-mobile.png",
        "evidence/chapter-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/search-mobile.png",
      "evidence": "The 360x800 search screenshot shows a large sexual ad fixed over the Artists/Authors controls, interrupting the core search task.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-mobile.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/a11y-structure.json, evidence/platform-probe.json",
      "evidence": "DOM inspection found four div role=dialog containers and zero <dialog> or popover elements; dismissal and modality are hand-wired.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "visual inspection of reader viewport",
      "evidence": "The chapter template devotes nearly the entire viewport to the comic, with compact top and translucent bottom navigation.",
      "pathIds": [
        "chapter"
      ],
      "artifacts": [
        "evidence/chapter-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "layout metrics at 360x800 across four templates",
      "evidence": "Home, listing, detail and chapter all reported scrollWidth=clientWidth=360 and zero horizontal overflow with viewport metadata present.",
      "pathIds": [
        "home",
        "listing",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/list-mobile-layout.json",
        "evidence/detail-mobile-layout.json",
        "evidence/chapter-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/platform-probe.json, evidence/home-desktop.png, evidence/home-mobile.png",
      "evidence": "The CSS platform probe found no @container usage, even though cards are reused in materially different-width carousels and grids.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/contrast-focus-targets.json",
      "evidence": "The active probe measured the Index dropdown toggle at 24x24 CSS px and the search input/button with outline-style none; other primary targets were 40-48px.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/contrast-focus-targets.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/search-mobile.png, evidence/search-recon.json",
      "evidence": "The search first viewport contains filters only, while the DOM text enumerates 1,643 tags before results; no result or direct path to results appears in the mobile screenshot.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-mobile.png",
        "evidence/search-recon.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "manual representative navigation from detail action to chapter",
      "evidence": "Read Last links directly to Chapter 345, which loaded successfully with visible comic pages and labelled chapter navigation.",
      "pathIds": [
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/detail-metadata.json",
        "evidence/chapter-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "invalid-route exercise and form DOM inspection",
      "evidence": "The invalid route shows a clear 404, plain-language message and GO HOME recovery link; forms use required constraints.",
      "pathIds": [
        "not-found",
        "search"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-recovery.json",
        "evidence/search-recon.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/lighthouse-home.json",
      "evidence": "Mobile Lighthouse measured LCP at 3.9s (score 0.53); it identified the above-fold Queen Bee cover as loading=lazy without fetchpriority=high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "layout observer and Lighthouse CLS",
      "evidence": "Mobile layout captures reported CLS 0 across templates; Lighthouse measured CLS 0.004 and all images have dimensions.",
      "pathIds": [
        "home",
        "listing",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-home.json",
        "evidence/home-images.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "trace, layout long-task observers and Lighthouse TBT",
      "evidence": "Trace recorded one 63ms task and 13ms TBT; Lighthouse TBT was 10ms, with no sustained blocking on listing/chapter.",
      "pathIds": [
        "home",
        "listing",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/home-summary.json, evidence/lighthouse-home.json",
      "evidence": "HAR and Lighthouse both identify axios.min.js as a high-priority parser-inserted render-blocking request; Lighthouse reports a 593ms longest dependency chain.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "pass",
      "confidence": "high",
      "method": "HAR byte breakdown and Lighthouse diagnostics",
      "evidence": "Only 35.9KiB of script transferred on home and 47.6KiB on chapter; no large duplicate/unused application bundle dominated the load.",
      "pathIds": [
        "home",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/chapter-summary.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/a11y-structure.json, evidence/search-recon.json",
      "evidence": "DOM inspection found username, email and password fields with no associated label or aria-label, using placeholders alone; several submit buttons also expose no innerText in the DOM probe.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/search-recon.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility audit and high-contrast computed styles",
      "evidence": "Lighthouse accessibility scored 1.0 and the high-contrast probe retained visible text/control colors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/contrast-focus-targets.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/a11y-structure.json, evidence/contrast-focus-targets.json",
      "evidence": "The homepage has two H1 elements (ManhwaRead and Home Page), several empty H2s, and the focused search controls report outline-style none.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/contrast-focus-targets.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "desktop/mobile screenshot inspection",
      "evidence": "Card titles, chapter labels and body UI remain readable at 360px without clipping or cramped horizontal wrapping.",
      "pathIds": [
        "home",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/detail-mobile.png",
        "evidence/chapter-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/contrast-focus-targets.json, evidence/home-mobile-layout.json",
      "evidence": "The target probe measured the Index disclosure control at 24x24 CSS px, below the commonly usable 44px target, although narrow layouts otherwise reflow without overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/contrast-focus-targets.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse errors-in-console audit",
      "evidence": "The errors-in-console audit passed and no uncaught exception was reported during the representative load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-selected.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/home-images.json, evidence/lighthouse-home.json",
      "evidence": "The image primitive found five oversized homepage images; the 297x289 PNG logo is rendered at 40px and Lighthouse estimates 151KiB total image savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/lighthouse-home.json, evidence/lighthouse-selected.json",
      "evidence": "Lighthouse recorded three deprecation warnings, including Shared Storage and StorageType.persistent, from the Cloudflare challenge script.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-selected.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM metadata probes across homepage/detail/chapter",
      "evidence": "All three templates expose descriptive, template-specific titles and meta descriptions.",
      "pathIds": [
        "home",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/detail-metadata.json",
        "evidence/chapter-metadata.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "DOM links, robots and viewport/layout probes",
      "evidence": "Navigation uses real href links, robots permits public content, and all tested templates include viewport metadata and fit 360px.",
      "pathIds": [
        "home",
        "listing",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/robots.txt",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/lighthouse-home.json, evidence/home-recon.json, evidence/robots.txt",
      "evidence": "Lighthouse canonical audit scored 0 even though the rendered DOM resolves a canonical URL; this suggests malformed, conflicting or non-absolute source markup that should be normalised.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-recon.json",
        "evidence/robots.txt"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "metadata probes on entity templates",
      "evidence": "Detail and chapter pages include JSON-LD plus Open Graph title, description and image matching visible content.",
      "pathIds": [
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/detail-metadata.json",
        "evidence/chapter-metadata.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/headers.json",
      "evidence": "The headers primitive confirmed HTTPS and HSTS but reported Content-Security-Policy absent.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "high",
      "method": "HAR, tracker, cookie and secret scans",
      "evidence": "No known tracker domain or exposed secret was found; one secure HttpOnly first-party Cloudflare cookie was set, and third parties were primarily content/font/CDN origins.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/secrets.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/a11y-structure.json, evidence/platform-probe.json",
      "evidence": "The auth DOM contains username/password forms with no WebAuthn/passkey affordance and empty autocomplete attributes; no permission prompts fired on load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/headers.json",
      "evidence": "The headers probe reports no CSP and does not reliably expose X-Content-Type-Options as present, while frame and referrer protections are configured.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "discoverability raw-HTML comparison on three templates",
      "evidence": "Homepage, detail and chapter each had 100% rendered-content coverage in raw HTML and were not JS shells.",
      "pathIds": [
        "home",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/detail-discoverability.json",
        "evidence/chapter-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "responsive screenshots, dialog DOM and task walkthrough",
      "evidence": "Menus, detail actions and reader controls remained within narrow viewports; the core detail-to-reader journey completed without a broken shell.",
      "pathIds": [
        "home",
        "detail",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/detail-mobile.png",
        "evidence/chapter-mobile.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "This content website is not presented as an installable app; offline installability is contextual, while no-JS content resilience was assessed separately.",
      "reason": "This content website is not presented as an installable app; offline installability is contextual, while no-JS content resilience was assessed separately."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "invalid URL recovery exercise",
      "evidence": "A missing route renders a stable 404 with explanatory copy and a GO HOME action rather than a blank shell or spinner.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-recovery.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "DOM language and narrow-layout inspection",
      "evidence": "The document declares en-US; content order and mobile reflow remain coherent in the tested left-to-right locale.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/home-recon.json, evidence/detail-metadata.json",
      "evidence": "Homepage cards render dates such as 14/01/2025 while html lang is en-US, a conflicting locale convention; no machine-readable time elements were found on the detail page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/detail-metadata.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "Representative pages show publication dates but no events, appointments, recurrence or user-facing times that cross time zones.",
      "reason": "Representative pages show publication dates but no events, appointments, recurrence or user-facing times that cross time zones."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/search-mobile.png",
      "evidence": "The ad overlays core controls, uses sexual clickbait and a dominant VIEW MORE action, while the user is trying to filter search results.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-mobile.png"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "form markup inspection",
      "evidence": "Login, registration and reset fields use native required constraints, preserving browser validation and preventing empty submission.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-recon.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/a11y-structure.json, evidence/search-recon.json",
      "evidence": "The DOM probe found empty autocomplete values on username, email, current password and new-password fields.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/search-recon.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/a11y-structure.json",
      "evidence": "Only password login/register/reset controls are present; no passkey/WebAuthn path or reauthentication affordance was found.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/a11y-structure.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/home-images.json, evidence/chapter-images.json, evidence/lighthouse-home.json",
      "evidence": "Lighthouse estimates 151KiB homepage image savings; the chapter loads JPEG pages through XHR/blob URLs and the image audit reports no responsive sources for 28 chapter images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/chapter-images.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "trace and HAR inspection",
      "evidence": "TBT was 10-13ms, script transfer stayed below 48KiB per sampled template, and no autoplay video/audio or known analytics tracker was found.",
      "pathIds": [
        "home",
        "chapter"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json",
        "evidence/chapter-summary.json",
        "evidence/trackers.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review: evidence/home-summary.json, evidence/chapter-summary.json",
      "evidence": "The homepage transfers 778,223 of 1,093,750 bytes from third parties; the sampled chapter transfers 807,474 of 1,104,616 bytes third-party, including 215KiB fonts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/chapter-summary.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No transactional or productivity capability is intended for agent invocation; public content is already fully available in raw HTML.",
      "reason": "No transactional or productivity capability is intended for agent invocation; public content is already fully available in raw HTML."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No summarisation or language-model feature is part of the reader experience, so on-device inference would not currently replace a server inference task.",
      "reason": "No summarisation or language-model feature is part of the reader experience, so on-device inference would not currently replace a server inference task."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "baseline/post heap snapshots after 10 modal/sidebar cycles",
      "evidence": "After 10 open/close and sidebar toggle cycles, nodes fell 162,749 to 161,354 and self size fell 10,469,886 to 10,462,434 bytes after GC.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-after.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "heap summary proportionality review",
      "evidence": "The homepage retained about 10.46MB self size after GC; this is proportionate to a media catalog and did not grow in the repeated interaction sample.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-after.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "constructor comparison across heap summaries",
      "evidence": "The post-interaction summary showed no growing Detached* constructor population and total nodes decreased after repeated UI cycles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-after.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F19",
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass",
      "findingIds": []
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21",
        "F22",
        "F23"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "findingIds": [],
      "reason": "This public content reader has no intended agent-invocable capability or on-device inference feature; raw content remains machine-readable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass",
      "findingIds": []
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and discovery template; covers first impression, navigation, popular/new/latest content and global chrome.",
      "url": "https://manhwaread.com/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "prefers-color-scheme light/dark",
        "prefers-reduced-motion reduce",
        "prefers-contrast more",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "listing",
      "description": "Manhwa listing archetype; represents browse/catalog pages.",
      "url": "https://manhwaread.com/manhwa/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "detail",
      "description": "Queen Bee detail archetype; covers metadata and the primary Read First/Read Last journey.",
      "url": "https://manhwaread.com/manhwa/queen-bee/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "no-JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "chapter",
      "description": "Long-form chapter reader; covers the core reading task, long-scroll navigation and media delivery.",
      "url": "https://manhwaread.com/manhwa/queen-bee/chapter-345-the-end/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "no-JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Search and advanced-filter flow for finding a title.",
      "url": "https://manhwaread.com/?s=queen",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Representative invalid route to assess HTTP/navigation recovery.",
      "url": "https://manhwaread.com/nonexistent-web-uplift-audit-path",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F04",
      "severity": "high",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "summary": "An explicit ad obscures the advanced search controls on mobile.",
      "evidence": "The 360x800 search screenshot shows a large sexual ad fixed over the Artists/Authors controls, interrupting the core search task.",
      "suggestedFix": "Remove the overlay ad from task surfaces or reserve a non-obscuring inline slot with an obvious, accessible dismiss control.",
      "artifacts": [
        "evidence/search-mobile.png"
      ],
      "effort": "small",
      "pathId": "search"
    },
    {
      "id": "F08",
      "severity": "high",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-purpose-and-primary-action",
      "guidanceId": "scrollability-affordance-hints",
      "guidanceCategory": "user-experience",
      "summary": "Search results are buried beneath an enormous advanced-filter surface and an overlay ad.",
      "evidence": "The search first viewport contains filters only, while the DOM text enumerates 1,643 tags before results; no result or direct path to results appears in the mobile screenshot.",
      "suggestedFix": "Show matching results immediately, collapse advanced filters behind a disclosure, and preserve a sticky result count/apply action.",
      "artifacts": [
        "evidence/search-mobile.png",
        "evidence/search-recon.json"
      ],
      "effort": "medium",
      "pathId": "search"
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "summary": "The homepage LCP is outside the good range.",
      "evidence": "Mobile Lighthouse measured LCP at 3.9s (score 0.53); it identified the above-fold Queen Bee cover as loading=lazy without fetchpriority=high.",
      "suggestedFix": "Do not lazy-load the LCP cover, set fetchpriority=high for the selected hero/LCP image, and keep it discoverable in initial HTML.",
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Authentication form controls lack persistent accessible labels.",
      "evidence": "DOM inspection found username, email and password fields with no associated label or aria-label, using placeholders alone; several submit buttons also expose no innerText in the DOM probe.",
      "suggestedFix": "Add explicit <label for> elements, correct autocomplete tokens and stable accessible button names.",
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/search-recon.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "The main document has no Content-Security-Policy.",
      "evidence": "The headers primitive confirmed HTTPS and HSTS but reported Content-Security-Policy absent.",
      "suggestedFix": "Deploy a nonce- or hash-based CSP starting in Report-Only mode, then enforce a least-privilege script/style/connect/frame policy.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "effort": "medium",
      "pathId": "home"
    },
    {
      "id": "F10",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "summary": "A parser-inserted Axios script blocks the critical path.",
      "evidence": "HAR and Lighthouse both identify axios.min.js as a high-priority parser-inserted render-blocking request; Lighthouse reports a 593ms longest dependency chain.",
      "suggestedFix": "Move non-critical scripts out of the critical path and load Axios with defer or replace it with fetch where feasible.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkey-authentication",
      "guidanceCategory": "security",
      "summary": "Account sign-in is password-only and lacks modern credential hints.",
      "evidence": "The auth DOM contains username/password forms with no WebAuthn/passkey affordance and empty autocomplete attributes; no permission prompts fired on load.",
      "suggestedFix": "Offer passkey sign-in/registration with password fallback and set username/current-password/new-password autocomplete tokens.",
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/platform-probe.json"
      ],
      "effort": "large",
      "pathId": "home"
    },
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "summary": "The visual theme does not follow the system color-scheme preference.",
      "evidence": "Light- and dark-preference screenshots are byte-identical (1,088,820 bytes) and both render the hard-coded dark theme; the page offers only a manual theme toggle.",
      "suggestedFix": "Initialise the theme from prefers-color-scheme, declare color-scheme, and retain the manual override.",
      "artifacts": [
        "evidence/home-light-pref.png",
        "evidence/home-dark-pref.png"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F03",
      "severity": "medium",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-progress-indicator",
      "guidanceCategory": "user-experience",
      "summary": "The 69,269px chapter reader gives no meaningful scroll progress.",
      "evidence": "The chapter mobile layout is 69,269px tall, while the screenshot shows only a fixed chapter bar; the CSS probe found no scroll-state query or declarative progress treatment.",
      "suggestedFix": "Add an accessible scroll progress indicator using a declarative scroll-driven animation and keep chapter controls responsive to scroll state.",
      "artifacts": [
        "evidence/chapter-mobile-layout.json",
        "evidence/chapter-mobile.png",
        "evidence/preferences-css.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "summary": "Route and state changes do not use View Transitions.",
      "evidence": "The platform probe found View Transitions supported by the browser but no view-transition CSS usage; navigation is conventional abrupt document replacement.",
      "suggestedFix": "Add cross-document @view-transition for eligible navigations and same-document transitions for modal/filter state, with reduced-motion handling.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/preferences-css.json"
      ],
      "effort": "medium",
      "pathId": "home"
    },
    {
      "id": "F05",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "html",
      "summary": "Authentication overlays are custom div dialogs instead of native dialog elements.",
      "evidence": "DOM inspection found four div role=dialog containers and zero <dialog> or popover elements; dismissal and modality are hand-wired.",
      "suggestedFix": "Use <dialog> with showModal()/close() and platform focus containment, Escape handling and backdrop semantics.",
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/platform-probe.json"
      ],
      "effort": "medium",
      "pathId": "home"
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Some controls have undersized targets or suppress visible focus styling.",
      "evidence": "The active probe measured the Index dropdown toggle at 24x24 CSS px and the search input/button with outline-style none; other primary targets were 40-48px.",
      "suggestedFix": "Expand every interactive hit area to at least 44x44 CSS px and provide a strong :focus-visible ring without removing the native outline unless replaced.",
      "artifacts": [
        "evidence/contrast-focus-targets.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F12",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Heading and focus structure has avoidable defects.",
      "evidence": "The homepage has two H1 elements (ManhwaRead and Home Page), several empty H2s, and the focused search controls report outline-style none.",
      "suggestedFix": "Use one page-specific H1, remove empty headings, and add an obvious :focus-visible treatment that follows reading order.",
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/contrast-focus-targets.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Not all controls meet a robust target-size baseline.",
      "evidence": "The target probe measured the Index disclosure control at 24x24 CSS px, below the commonly usable 44px target, although narrow layouts otherwise reflow without overflow.",
      "suggestedFix": "Increase the clickable disclosure area to at least 44x44 CSS px while retaining the compact icon.",
      "artifacts": [
        "evidence/contrast-focus-targets.json",
        "evidence/home-mobile-layout.json"
      ],
      "effort": "trivial",
      "pathId": "home"
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "summary": "Several images are materially oversized for their rendered dimensions.",
      "evidence": "The image primitive found five oversized homepage images; the 297x289 PNG logo is rendered at 40px and Lighthouse estimates 151KiB total image savings.",
      "suggestedFix": "Serve a correctly sized AVIF/WebP logo and tune responsive image candidates/compression for cover cards.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "The homepage canonical signal fails Lighthouse validation.",
      "evidence": "Lighthouse canonical audit scored 0 even though the rendered DOM resolves a canonical URL; this suggests malformed, conflicting or non-absolute source markup that should be normalised.",
      "suggestedFix": "Emit one absolute self-referencing canonical URL in source HTML and verify it matches redirects and sitemap URLs.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-recon.json",
        "evidence/robots.txt"
      ],
      "effort": "trivial",
      "pathId": "home"
    },
    {
      "id": "F18",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "Browser-enforced defenses are incomplete.",
      "evidence": "The headers probe reports no CSP and does not reliably expose X-Content-Type-Options as present, while frame and referrer protections are configured.",
      "suggestedFix": "Add CSP (including frame-ancestors), ensure X-Content-Type-Options: nosniff is emitted once and expand Permissions-Policy to the actual minimum capabilities.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-internationalised",
      "principleCheckId": "locale-aware-data",
      "guidanceId": "support-global-calendar-systems",
      "guidanceCategory": "javascript",
      "summary": "Visible dates are fixed-format strings rather than locale-aware output.",
      "evidence": "Homepage cards render dates such as 14/01/2025 while html lang is en-US, a conflicting locale convention; no machine-readable time elements were found on the detail page.",
      "suggestedFix": "Render dates with Intl.DateTimeFormat for the active locale and use <time datetime> with unambiguous stored values.",
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/detail-metadata.json"
      ],
      "effort": "small",
      "pathId": "home"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "summary": "The mobile search journey uses an obstructive promotional ad pattern.",
      "evidence": "The ad overlays core controls, uses sexual clickbait and a dominant VIEW MORE action, while the user is trying to filter search results.",
      "suggestedFix": "Keep promotions clearly labelled, non-obstructive and visually subordinate to the user-initiated task.",
      "artifacts": [
        "evidence/search-mobile.png"
      ],
      "effort": "small",
      "pathId": "search"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-in-form",
      "guidanceCategory": "forms",
      "summary": "Sign-in, registration and reset fields omit autocomplete tokens.",
      "evidence": "The DOM probe found empty autocomplete values on username, email, current password and new-password fields.",
      "suggestedFix": "Apply username, email, current-password and new-password autocomplete tokens to the corresponding fields.",
      "artifacts": [
        "evidence/a11y-structure.json",
        "evidence/search-recon.json"
      ],
      "effort": "trivial",
      "pathId": "search"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "passkey-authentication",
      "guidanceCategory": "security",
      "summary": "The account flow does not offer phishing-resistant authentication.",
      "evidence": "Only password login/register/reset controls are present; no passkey/WebAuthn path or reauthentication affordance was found.",
      "suggestedFix": "Add passkeys as the preferred account path, retain recoverable fallback, and clearly explain account state and reversal.",
      "artifacts": [
        "evidence/a11y-structure.json"
      ],
      "effort": "large",
      "pathId": "search"
    },
    {
      "id": "F24",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "summary": "Image delivery leaves meaningful avoidable byte savings.",
      "evidence": "Lighthouse estimates 151KiB homepage image savings; the chapter loads JPEG pages through XHR/blob URLs and the image audit reports no responsive sources for 28 chapter images.",
      "suggestedFix": "Right-size and recompress covers/logo, and deliver chapter pages with responsive modern image candidates while preserving progressive loading.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/chapter-images.json",
        "evidence/lighthouse-home.json"
      ],
      "effort": "medium",
      "pathId": "home"
    },
    {
      "id": "F25",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "summary": "Third-party media and fonts dominate transferred bytes.",
      "evidence": "The homepage transfers 778,223 of 1,093,750 bytes from third parties; the sampled chapter transfers 807,474 of 1,104,616 bytes third-party, including 215KiB fonts.",
      "suggestedFix": "Self-host/subset fonts, reduce Font Awesome payload, cache content-CDN assets aggressively and defer below-fold media requests.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/chapter-summary.json"
      ],
      "effort": "medium",
      "pathId": "home"
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "css",
      "summary": "Reusable cards and controls rely on viewport styling rather than container queries.",
      "evidence": "The CSS platform probe found no @container usage, even though cards are reused in materially different-width carousels and grids.",
      "suggestedFix": "Give reusable card/list components containment and adapt them with size container queries where their parent width, not viewport width, governs layout.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "effort": "medium",
      "pathId": "home"
    },
    {
      "id": "F15",
      "severity": "low",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "A Cloudflare challenge script triggers deprecated API warnings.",
      "evidence": "Lighthouse recorded three deprecation warnings, including Shared Storage and StorageType.persistent, from the Cloudflare challenge script.",
      "suggestedFix": "Update or reconfigure the challenge integration so it no longer ships deprecated API paths to ordinary page loads.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-selected.json"
      ],
      "effort": "small",
      "pathId": "home"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Remove the overlay ad from task surfaces or reserve a non-obscuring inline slot with an obvious, accessible dismiss control.",
      "priority": 1,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Show matching results immediately, collapse advanced filters behind a disclosure, and preserve a sticky result count/apply action.",
      "priority": 2,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "scrollability-affordance-hints",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Do not lazy-load the LCP cover, set fetchpriority=high for the selected hero/LCP image, and keep it discoverable in initial HTML.",
      "priority": 3,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Add explicit <label for> elements, correct autocomplete tokens and stable accessible button names.",
      "priority": 4,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Deploy a nonce- or hash-based CSP starting in Report-Only mode, then enforce a least-privilege script/style/connect/frame policy.",
      "priority": 5,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Move non-critical scripts out of the critical path and load Axios with defer or replace it with fetch where feasible.",
      "priority": 6,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "optimize-script-priority",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Offer passkey sign-in/registration with password fallback and set username/current-password/new-password autocomplete tokens.",
      "priority": 7,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "passkey-authentication",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Initialise the theme from prefers-color-scheme, declare color-scheme, and retain the manual override.",
      "priority": 8,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Add an accessible scroll progress indicator using a declarative scroll-driven animation and keep chapter controls responsive to scroll state.",
      "priority": 9,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "scroll-progress-indicator",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Add cross-document @view-transition for eligible navigations and same-document transitions for modal/filter state, with reduced-motion handling.",
      "priority": 10,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Use <dialog> with showModal()/close() and platform focus containment, Escape handling and backdrop semantics.",
      "priority": 11,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Expand every interactive hit area to at least 44x44 CSS px and provide a strong :focus-visible ring without removing the native outline unless replaced.",
      "priority": 12,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Use one page-specific H1, remove empty headings, and add an obvious :focus-visible treatment that follows reading order.",
      "priority": 13,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Increase the clickable disclosure area to at least 44x44 CSS px while retaining the compact icon.",
      "priority": 14,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Serve a correctly sized AVIF/WebP logo and tune responsive image candidates/compression for cover cards.",
      "priority": 15,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Emit one absolute self-referencing canonical URL in source HTML and verify it matches redirects and sitemap URLs.",
      "priority": 16,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Add CSP (including frame-ancestors), ensure X-Content-Type-Options: nosniff is emitted once and expand Permissions-Policy to the actual minimum capabilities.",
      "priority": 17,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Render dates with Intl.DateTimeFormat for the active locale and use <time datetime> with unambiguous stored values.",
      "priority": 18,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "support-global-calendar-systems",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Keep promotions clearly labelled, non-obstructive and visually subordinate to the user-initiated task.",
      "priority": 19,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Apply username, email, current-password and new-password autocomplete tokens to the corresponding fields.",
      "priority": 20,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "autofill-sign-in-form",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Add passkeys as the preferred account path, retain recoverable fallback, and clearly explain account state and reversal.",
      "priority": 21,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "passkey-authentication",
      "status": "open"
    },
    {
      "id": "T22",
      "title": "Right-size and recompress covers/logo, and deliver chapter pages with responsive modern image candidates while preserving progressive loading.",
      "priority": 22,
      "findingIds": [
        "F24"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T23",
      "title": "Self-host/subset fonts, reduce Font Awesome payload, cache content-CDN assets aggressively and defer below-fold media requests.",
      "priority": 23,
      "findingIds": [
        "F25"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T24",
      "title": "Give reusable card/list components containment and adapt them with size container queries where their parent width, not viewport width, governs layout.",
      "priority": 24,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T25",
      "title": "Update or reconfigure the challenge integration so it no longer ships deprecated API paths to ordinary page loads.",
      "priority": 25,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "html",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T10-04-54-651Z"
}
