{
  "url": "https://rt.pornhub.org",
  "auditedAt": "2026-07-18T23:27:01.752Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete report-mode audit. The mandatory age gate limited visual access to post-confirmation states, but rendered DOM and direct route responses remained inspectable and every registered check received a conclusive outcome.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered page with client-side enhancement",
    "notes": "Public Russian-language media/listing site with a mandatory age gate, cookie consent, advertising, a detail template, search, and account entry points."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse",
    "curl"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "same-document-transitions",
    "scrollytelling",
    "physics-based-easing",
    "shrinking-header-on-scroll",
    "position-aware-tooltips",
    "navigation-drawer",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "fluid-scaling",
    "size-aware-styling",
    "forms",
    "accessible-error-announcement",
    "identify-inp-causes",
    "break-up-long-tasks",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "improve-text-layout-and-legibility",
    "html",
    "security",
    "privacy",
    "passkeys",
    "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",
    "efficient-background-processing",
    "webmcp",
    "language-model",
    "manage-recurring-intervals",
    "directional-navigation-transitions",
    "defer-rendering-heavy-content",
    "persistent-toast-notifications",
    "visually-stable-font-fallbacks",
    "search-hidden-content"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "First-load desktop view",
      "findingIds": [
        "F-001",
        "F-006"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "First-load view at 360x800",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-009",
        "F-010",
        "F-020",
        "F-021",
        "F-033"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "First-load view under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F-001"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/dom-home.json",
      "caption": "Rendered homepage DOM and CSS",
      "findingIds": [
        "F-007"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/recon.json",
      "caption": "Metadata, routes, forms, features, and visible text probe",
      "findingIds": [
        "F-003",
        "F-004",
        "F-006",
        "F-007",
        "F-008",
        "F-010",
        "F-018",
        "F-019",
        "F-025",
        "F-026",
        "F-028",
        "F-030",
        "F-035",
        "F-036",
        "F-037"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "Response returned for /robots.txt",
      "findingIds": [
        "F-026"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "Response returned for /sitemap.xml",
      "findingIds": [
        "F-027"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "Animation and transition probe",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": [
        "F-002"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/layout-mobile.json",
      "caption": "Mobile overflow, CLS, and long-task observations",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-009",
        "F-015"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/layout-desktop.json",
      "caption": "Desktop CLS and long-task observations",
      "findingIds": []
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools performance trace",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact trace timing summary",
      "findingIds": [
        "F-014"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "First-load HAR",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact network and third-party summary",
      "findingIds": [
        "F-008",
        "F-016",
        "F-017",
        "F-030",
        "F-036",
        "F-038",
        "F-039",
        "F-040"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw HTML versus rendered coverage",
      "findingIds": [
        "F-032"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered browser view",
      "findingIds": [
        "F-032"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Crawler view with JavaScript disabled",
      "findingIds": [
        "F-032"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse JSON",
      "findingIds": [
        "F-016"
      ]
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Compact Lighthouse score and metric summary",
      "findingIds": [
        "F-014"
      ]
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-details.json",
      "caption": "Selected Lighthouse audit details",
      "findingIds": [
        "F-017",
        "F-018",
        "F-021",
        "F-022",
        "F-023",
        "F-024",
        "F-026",
        "F-033",
        "F-039"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Baseline heap summary",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.json",
      "caption": "Heap summary after ten overlay cycles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security header inspection",
      "findingIds": [
        "F-029",
        "F-031"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie attribute inspection",
      "findingIds": [
        "F-029",
        "F-031"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker inventory",
      "findingIds": [
        "F-030",
        "F-036",
        "F-040"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client secret scan",
      "findingIds": [
        "F-029"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image delivery and accessibility inventory",
      "findingIds": [
        "F-015",
        "F-023",
        "F-038"
      ]
    },
    {
      "type": "other",
      "path": "evidence/probes.json",
      "caption": "Focus, target, DOM, language, and memory probes",
      "findingIds": [
        "F-011",
        "F-019",
        "F-021",
        "F-035"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/route-categories.json",
      "caption": "Categories request result",
      "findingIds": [
        "F-005",
        "F-012"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/route-video-detail.json",
      "caption": "Video detail metadata and form result",
      "findingIds": [
        "F-003",
        "F-012",
        "F-025",
        "F-027",
        "F-028"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/route-signin.json",
      "caption": "Sign-in request result",
      "findingIds": [
        "F-005",
        "F-012"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/route-error-404.json",
      "caption": "Unknown-route response and recovery result",
      "findingIds": [
        "F-005",
        "F-013",
        "F-027",
        "F-034"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-searches.txt",
      "caption": "Pinned Modern Web Guidance searches",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Retrieved Modern Web Guidance guides",
      "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": "Compared default and prefers-color-scheme: dark screenshots and inspected page feature use.",
      "evidence": "The default and dark-condition screenshots are byte-identical at 63,768 bytes, and recon found no preference-driven theming. The fixed dark palette is usable but is not driven by the user preference.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "F-001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated prefers-reduced-motion: reduce and inspected active transitions.",
      "evidence": "The reduced-motion probe confirmed the preference was active but still found 0.5s transitions on .scrollableBannerContent and #toastMessage, with no reduced-motion override.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "findingIds": [
        "F-002"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "Lighthouse contrast audit plus visual screenshots.",
      "evidence": "Lighthouse color-contrast passed and the black, white, and orange age-gate controls remain strongly differentiated in desktop and mobile screenshots.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected rendered HTML/CSS feature use and route behavior across MPA paths.",
      "evidence": "Recon found no view-transition CSS or API use; route probes show full-document navigation and abrupt age-gate redirects.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/route-video-detail.json"
      ],
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/CSS inspection and screenshot review.",
      "evidence": "The audited surfaces do not use parallax, scrollytelling, carousels, or entry/exit reveal motion, so there is no scroll-linked animation to implement off-main-thread.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "The audited surfaces do not use parallax, scrollytelling, carousels, or entry/exit reveal motion, so there is no scroll-linked animation to implement off-main-thread."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM/CSS and interaction-surface inspection.",
      "evidence": "The observed list and age gate rely on native scrolling and buttons; no custom pointermove-driven gesture surface was found.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/dom-home.json",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected long listing DOM and CSS feature use.",
      "evidence": "The homepage is a long listing, but recon found no scroll-state query, progress marker, or position-aware navigation chrome.",
      "pathIds": [
        "home",
        "categories"
      ],
      "artifacts": [
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-004"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM inspection for visible overlays and anchor positioning.",
      "evidence": "No tooltip or edge-sensitive anchored popover was present on the audited first-load and legal-gate surfaces.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "No tooltip or edge-sensitive anchored popover was present on the audited first-load and legal-gate surfaces."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "issues",
      "confidence": "medium",
      "method": "Compared route probes and age-gate visual hierarchy.",
      "evidence": "Categories, login, and unknown paths redirect to the homepage without a transition, route-specific heading, or focus cue explaining where attention moved.",
      "pathIds": [
        "categories",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/route-categories.json",
        "evidence/route-signin.json",
        "evidence/route-error-404.json"
      ],
      "findingIds": [
        "F-005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "First-load screenshot and visible-text/overlay probe.",
      "evidence": "First load stacks a full-screen age gate with a separate three-choice cookie prompt in the accessibility tree before the primary content. The legal gate is expected, but the layered interruption increases first-use friction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-006"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected rendered overlay primitives.",
      "evidence": "Recon found 0 dialog, 0 popover, and 0 details elements even though the age gate is a custom div with role=alertdialog and cookie customization is custom div-based UI.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/dom-home.json"
      ],
      "findingIds": [
        "F-007"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Screenshot, DOM, and HAR inspection.",
      "evidence": "The listing contains repeated advertising placements and 31 TrafficJunky requests; the probe exposed many repeated “remove ads” controls, so non-content chrome competes heavily with the listing.",
      "pathIds": [
        "home",
        "categories"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-008"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Captured 360x800 screenshot and layout metrics.",
      "evidence": "Although the layout metric reports no document-level horizontal overflow, the 360px screenshot visibly clips the logo, heading, legal copy, and the two age buttons off the right edge.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/layout-mobile.json"
      ],
      "findingIds": [
        "F-009"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected rendered CSS feature use and mobile output.",
      "evidence": "Recon found no container-query CSS, and the reused age-gate component fails to adapt within the narrow viewport.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-010"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Programmatically focused the first 30 visible controls and measured outlines and target boxes.",
      "evidence": "Cookie buttons and search input computed to outline:none/0px when focused, many links measured 15 to 22px high, and the first 30 controls included many navigation links without a visible focus outline.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probes.json"
      ],
      "findingIds": [
        "F-011"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Screenshot and route heading inspection.",
      "evidence": "The age gate clearly states that this is an adults-only site and presents explicit enter and exit actions; the detail route exposes a specific H1 in the DOM.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/route-video-detail.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Requested representative listing, sign-in, and detail routes directly.",
      "evidence": "The categories and /login requests both end at the homepage, while only the query-based detail route retains its URL. The requested flow context is lost before the user can continue through the age gate.",
      "pathIds": [
        "categories",
        "signin"
      ],
      "artifacts": [
        "evidence/route-categories.json",
        "evidence/route-signin.json",
        "evidence/route-video-detail.json"
      ],
      "findingIds": [
        "F-012"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Requested a deliberately unknown URL and inspected final URL, response status, and visible state.",
      "evidence": "An unknown path returns a 200 homepage with no not-found state, explanation, or recovery action.",
      "pathIds": [
        "error-404"
      ],
      "artifacts": [
        "evidence/route-error-404.json"
      ],
      "findingIds": [
        "F-013"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse, trace, and layout measurements.",
      "evidence": "Lighthouse measured LCP 16.8s, FCP 3.0s, and TBT about 80ms; the independent trace measured LCP 4.55s. Both LCP observations exceed the 2.5s good threshold.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F-014"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Observed layout shifts at desktop and 360px.",
      "evidence": "The mobile layout primitive recorded CLS 0.1021 from a shift around 1.2s, just outside the good threshold; three images also lack explicit dimensions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/layout-mobile.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F-015"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Trace, Lighthouse, and layout long-task observers.",
      "evidence": "The trace recorded 0 long tasks and 0ms total blocking time; Lighthouse TBT was about 80ms, and both layout captures observed no long tasks.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-summary.json",
        "evidence/layout-mobile.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary, DOM initiator evidence, and Lighthouse insights.",
      "evidence": "The page made 172 requests and transferred 5.41MB. The HAR lists seven parser-inserted VeryHigh-priority stylesheets and three high-priority parser scripts as blocking candidates; Lighthouse also failed LCP discovery and dependency-tree insights.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F-016"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse code-coverage diagnostics and HAR third-party totals.",
      "evidence": "Lighthouse estimated 288KiB unused JavaScript and 74KiB unused CSS; three Google tag scripts account for much of the unused JavaScript.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-017"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility audit and form/DOM probes.",
      "evidence": "Lighthouse found multiple visible ad iframes without titles and a visible-label/accessibility-name mismatch on the header user button. The search input also has no associated label.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-018"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse contrast audit and screenshot review.",
      "evidence": "Lighthouse color contrast passed with no failing nodes; first-load text and primary controls are visually high contrast.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Programmatic focus walk and Lighthouse accessibility audit.",
      "evidence": "The focus probe found outline:none on cookie actions and search and many navigation links without a visible outline; the age heading is H3 with no visible H1 on home.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probes.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-019"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Visual review at desktop and 360px.",
      "evidence": "The mobile age-gate copy and heading are clipped off the right edge, preventing complete reading of the mandatory notice.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-020"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse viewport audit, mobile screenshot, and target-size probe.",
      "evidence": "Lighthouse found user-scalable=no/maximum-scale=1 on the mobile document, the screenshot fails reflow, and many interactive targets are only 15 to 22px high.",
      "pathIds": [
        "home",
        "video-detail"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-mobile.png",
        "evidence/probes.json"
      ],
      "findingIds": [
        "F-021"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse console-error capture.",
      "evidence": "A TypeError occurs in setInstallButton when addEventListener is called on null.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F-022"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "DOM, image primitive, and Lighthouse diagnostics.",
      "evidence": "The document has a valid doctype and UTF-8 charset, but 3 images lack dimensions and Lighthouse reports deprecated media-control CSS usage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F-023"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse deprecation, inspector, and BFCache audits.",
      "evidence": "Lighthouse reports deprecated unload listeners, inspector issues, and four BFCache failure reasons including the unload handler and cache-control:no-store.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F-024"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected metadata on home, listing, detail, and sign-in requests.",
      "evidence": "All tested paths use the generic title “Pornhub” and no meta description, including the detail page with a specific H1.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/route-video-detail.json"
      ],
      "findingIds": [
        "F-025"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse SEO audit, metadata probe, and robots fetch.",
      "evidence": "The page declares noindex,nofollow, Lighthouse found javascript:void(0) anchors, and /robots.txt returns the full HTML page rather than valid robots directives.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/robots.txt",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-026"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected HTTP status, canonical, robots, sitemap, and route metadata.",
      "evidence": "The detail page canonical points to the homepage, listing and unknown paths redirect to the homepage with 200, every page is noindex, and /sitemap.xml returns 404.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "artifacts": [
        "evidence/route-video-detail.json",
        "evidence/route-error-404.json",
        "evidence/sitemap.xml"
      ],
      "findingIds": [
        "F-027"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected JSON-LD and social metadata on home and a detail route.",
      "evidence": "Recon found no JSON-LD and no Open Graph metadata; the detail route exposes a rich video entity only in visible DOM.",
      "pathIds": [
        "video-detail"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/route-video-detail.json"
      ],
      "findingIds": [
        "F-028"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Headers, cookies, HAR, and secrets primitives.",
      "evidence": "HTTPS and HSTS are present and no client secrets were detected, but CSP and X-Content-Type-Options are missing and cookie rp is not Secure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/secrets.json"
      ],
      "findingIds": [
        "F-029"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Tracker primitive, HAR summary, and first-load consent-state inspection.",
      "evidence": "Before consent resolution, the load contacted 12 third-party origins, including Google Tag Manager and DoubleClick; 101 third-party requests transferred 2.26MB.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-030"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM and runtime surface inspection.",
      "evidence": "No geolocation or notification prompt appeared on load, and the DOM contains a passkey continuation surface for sign-in.",
      "pathIds": [
        "home",
        "signin"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Headers and cookies primitives.",
      "evidence": "CSP, Referrer-Policy, Permissions-Policy, and nosniff are missing; seven cookies use SameSite=None and rp is not Secure. HSTS and X-Frame-Options are present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-031"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Discoverability raw-HTML comparison and browser/crawler screenshot pair.",
      "evidence": "The server sends substantial HTML and is not a JS shell, but only 45% of rendered content words overlap raw HTML and no H1 survives as a crawler-visible heading.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "F-032"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile screenshot and console/runtime diagnostics.",
      "evidence": "The age gate clips on a narrow viewport and the homepage throws while binding an install button, showing that layout and initialization are not robust to the current state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F-033"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Manifest/service-worker probe and site-purpose judgement.",
      "evidence": "This is a streaming media site whose core playback is intrinsically online. A service worker surface exists, but offline playback/installability is not required for the audited public journey.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "This is a streaming media site whose core playback is intrinsically online. A service worker surface exists, but offline playback/installability is not required for the audited public journey."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Requested an unknown route and inspected status and recovery UI.",
      "evidence": "The unknown route silently returns a 200 homepage with no error explanation, retry, search, or preserved path.",
      "pathIds": [
        "error-404"
      ],
      "artifacts": [
        "evidence/route-error-404.json"
      ],
      "findingIds": [
        "F-034"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "DOM language and authored-style token probe.",
      "evidence": "The document correctly uses lang=ru, but the probe found 0 logical-property tokens versus 181 physical left/right tokens, and visible legal/consent UI mixes English and Russian.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/probes.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-035"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "Rendered detail-state inspection.",
      "evidence": "The detail route renders relative time in Russian (“9 лет назад”) and compact localized counts; no currency or calendar input was present.",
      "pathIds": [
        "video-detail"
      ],
      "artifacts": [
        "evidence/route-video-detail.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Route and content inspection.",
      "evidence": "No scheduled event, absolute date/time input, recurring interval, or time-zone-sensitive transaction appears in the representative paths.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "No scheduled event, absolute date/time input, recurring interval, or time-zone-sensitive transaction appears in the representative paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Consent-state screenshot/DOM plus tracker and HAR inspection.",
      "evidence": "The interface offers an essential-only choice, but analytics and advertising trackers are already active while the consent prompt is still visible, so the stated choice does not precede collection.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-036"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Form inventory and route walkthrough.",
      "evidence": "No user-editable form with validation requirements was exposed in the representative unauthenticated paths; search has no required/invalid state to exercise.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "No user-editable form with validation requirements was exposed in the representative unauthenticated paths; search has no required/invalid state to exercise."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected form fields and autocomplete values.",
      "evidence": "The visible search input has autocomplete=off and no associated label, reducing browser assistance and clarity.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-037"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Direct route inspection and applicability judgement.",
      "evidence": "No checkout, subscription, cancellation, account-management, or authenticated sensitive action was reachable in the representative unauthenticated scope; /login redirected to home before exposing the account flow.",
      "pathIds": [
        "signin"
      ],
      "reason": "No checkout, subscription, cancellation, account-management, or authenticated sensitive action was reachable in the representative unauthenticated scope; /login redirected to home before exposing the account flow."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Image primitive and HAR asset totals.",
      "evidence": "Of 37 images, 33 lack srcset, 20 use legacy formats, and 3 lack dimensions. Image transfers totaled 1.27MB on first load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-038"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR, tracker, trace, and code-coverage inspection.",
      "evidence": "The page performs 172 requests, including 101 third-party requests, while Lighthouse estimates 288KiB unused JavaScript and 74KiB unused CSS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F-039"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR and tracker primitives.",
      "evidence": "Third parties account for 2.26MB and 101 requests, including 31 TrafficJunky requests and multiple Google analytics/tag requests, before primary interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F-040"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "WebMCP and rendered-source inspection.",
      "evidence": "This public media listing does not expose a safe transactional or productivity capability that agents need to invoke; agent tool registration is not expected for this scope.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "This public media listing does not expose a safe transactional or productivity capability that agents need to invoke; agent tool registration is not expected for this scope."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Built-in AI feature inspection and applicability judgement.",
      "evidence": "No summarization, translation workflow, or other inference task is central to the audited first-load and playback-discovery journey.",
      "pathIds": [
        "home",
        "categories",
        "video-detail",
        "signin",
        "error-404"
      ],
      "reason": "No summarization, translation workflow, or other inference task is central to the audited first-load and playback-discovery journey."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared baseline heap with a post snapshot after ten cookie-customization open/back cycles.",
      "evidence": "The post snapshot grew from 38.78MB/587,675 nodes to 40.08MB/597,670 nodes, about 3.4% size and 1.7% node growth. This single pair does not show unbounded retained growth.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Heap summary plus runtime DOM/JS heap probe.",
      "evidence": "The first-load snapshot is 38.78MB and the runtime probe reports about 29.5MB used JS heap with 1,426 live DOM elements, proportionate to a media listing with ads.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/probes.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "low",
      "method": "Before/after heap-summary constructor inspection.",
      "evidence": "Neither summary reports a Detached* constructor among retained constructor groups, and the ten-cycle comparison showed only modest aggregate growth. Listener internals were not directly exposed, so confidence is low.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-001",
        "F-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-004",
        "F-005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-006",
        "F-007",
        "F-008"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-009",
        "F-010",
        "F-011"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-012",
        "F-013"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-014",
        "F-015",
        "F-016",
        "F-017"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-018",
        "F-019",
        "F-020",
        "F-021"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-022",
        "F-023",
        "F-024"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-025",
        "F-026",
        "F-027",
        "F-028"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-029",
        "F-030",
        "F-031"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-032",
        "F-033",
        "F-034"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-035"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-036",
        "F-037"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-038",
        "F-039",
        "F-040"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "findingIds": [],
      "reason": "This public media listing does not expose a safe transactional or productivity capability that agents need to invoke; agent tool registration is not expected for this scope. No summarization, translation workflow, or other inference task is central to the audited first-load and playback-discovery journey."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass",
      "findingIds": []
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage/listing and mandatory age/consent entry state. Represents the primary discovery surface.",
      "url": "https://rt.pornhub.org",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "categories",
      "description": "Section/listing archetype requested directly. It redirected to home before retaining the requested path.",
      "url": "https://rt.pornhub.org/categories",
      "conditions": [
        "direct navigation",
        "age gate present"
      ],
      "result": "issues"
    },
    {
      "id": "video-detail",
      "description": "Representative media detail template, including player, metadata, channel links, and report form.",
      "url": "https://rt.pornhub.org/view_video.php?viewkey=ph589e21738c8f9",
      "conditions": [
        "direct navigation",
        "age gate present"
      ],
      "result": "issues"
    },
    {
      "id": "signin",
      "description": "Primary account-entry journey requested directly. It redirected to home before exposing the form.",
      "url": "https://rt.pornhub.org/login",
      "conditions": [
        "direct navigation",
        "age gate present"
      ],
      "result": "issues"
    },
    {
      "id": "error-404",
      "description": "Recovery-state test using an unknown URL. The server returned a 200 homepage instead of a 404.",
      "url": "https://rt.pornhub.org/this-path-should-not-exist-web-uplift",
      "conditions": [
        "direct navigation"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F-001",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "high",
      "summary": "The palette is hard-coded rather than preference-driven.",
      "evidence": "The default and dark-condition screenshots are byte-identical at 63,768 bytes, and recon found no preference-driven theming. The fixed dark palette is usable but is not driven by the user preference.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png"
      ],
      "suggestedFix": "Declare color-scheme and map surfaces through prefers-color-scheme or light-dark() so browser UI and page colors follow the system preference.",
      "effort": "small"
    },
    {
      "id": "F-002",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "high",
      "summary": "Reduced-motion does not suppress non-essential transitions.",
      "evidence": "The reduced-motion probe confirmed the preference was active but still found 0.5s transitions on .scrollableBannerContent and #toastMessage, with no reduced-motion override.",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "suggestedFix": "Add a prefers-reduced-motion: reduce override that removes non-essential transitions and auto-motion while preserving necessary state feedback.",
      "effort": "small"
    },
    {
      "id": "F-003",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "medium",
      "summary": "Route and state changes have no directional transition cues.",
      "evidence": "Recon found no view-transition CSS or API use; route probes show full-document navigation and abrupt age-gate redirects.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/route-video-detail.json"
      ],
      "suggestedFix": "Use same-document or cross-document View Transitions for meaningful route and state changes, with reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "F-004",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "medium",
      "summary": "Long listings provide no scroll-position feedback.",
      "evidence": "The homepage is a long listing, but recon found no scroll-state query, progress marker, or position-aware navigation chrome.",
      "artifacts": [
        "evidence/recon.json"
      ],
      "suggestedFix": "Use scroll-state container queries or a lightweight progress affordance so navigation responds to long-page position.",
      "effort": "medium"
    },
    {
      "id": "F-005",
      "pathId": "categories",
      "url": "https://rt.pornhub.org",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "directs-attention",
      "guidanceId": "directional-navigation-transitions",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "medium",
      "summary": "Redirected navigation does not explain the resulting location.",
      "evidence": "Categories, login, and unknown paths redirect to the homepage without a transition, route-specific heading, or focus cue explaining where attention moved.",
      "artifacts": [
        "evidence/route-categories.json",
        "evidence/route-signin.json",
        "evidence/route-error-404.json"
      ],
      "suggestedFix": "Preserve the requested destination through age verification and move focus to a route-specific heading or status message after navigation.",
      "effort": "medium"
    },
    {
      "id": "F-006",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Multiple first-load notices compete before content.",
      "evidence": "First load stacks a full-screen age gate with a separate three-choice cookie prompt in the accessibility tree before the primary content. The legal gate is expected, but the layered interruption increases first-use friction.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ],
      "suggestedFix": "Combine or sequence mandatory notices, keep essential-cookie continuation prominent, and avoid presenting multiple interruptive layers simultaneously.",
      "effort": "medium"
    },
    {
      "id": "F-007",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Custom div overlays replace native dismissible primitives.",
      "evidence": "Recon found 0 dialog, 0 popover, and 0 details elements even though the age gate is a custom div with role=alertdialog and cookie customization is custom div-based UI.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/dom-home.json"
      ],
      "suggestedFix": "Use dialog for the modal age flow and details or popover for expandable cookie controls, with native focus trapping, Escape behavior, and light dismiss where appropriate.",
      "effort": "medium"
    },
    {
      "id": "F-008",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Advertising chrome crowds the content experience.",
      "evidence": "The listing contains repeated advertising placements and 31 TrafficJunky requests; the probe exposed many repeated “remove ads” controls, so non-content chrome competes heavily with the listing.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Reduce repeated ad chrome, reserve fewer placements, and defer non-essential below-fold ad UI until it is near the viewport.",
      "effort": "large"
    },
    {
      "id": "F-009",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "The mandatory age gate is visibly clipped on a 360px viewport.",
      "evidence": "Although the layout metric reports no document-level horizontal overflow, the 360px screenshot visibly clips the logo, heading, legal copy, and the two age buttons off the right edge.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/layout-mobile.json"
      ],
      "suggestedFix": "Remove fixed/min widths from the age-gate content and buttons, allow wrapping, and size the modal with min(100% - padding, max-width).",
      "effort": "small"
    },
    {
      "id": "F-010",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Reusable components depend on viewport assumptions rather than their container.",
      "evidence": "Recon found no container-query CSS, and the reused age-gate component fails to adapt within the narrow viewport.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Give reusable cards and gate controls a containment context and use container queries or intrinsic grid/flex wrapping for narrow placements.",
      "effort": "medium"
    },
    {
      "id": "F-011",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus is often invisible and many targets are too short.",
      "evidence": "Cookie buttons and search input computed to outline:none/0px when focused, many links measured 15 to 22px high, and the first 30 controls included many navigation links without a visible focus outline.",
      "artifacts": [
        "evidence/probes.json"
      ],
      "suggestedFix": "Add a clear :focus-visible ring with adequate contrast and provide at least 24px minimum, preferably 44px, target geometry for primary touch controls.",
      "effort": "small"
    },
    {
      "id": "F-012",
      "pathId": "categories",
      "url": "https://rt.pornhub.org",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Age-gate routing loses requested listing and sign-in destinations.",
      "evidence": "The categories and /login requests both end at the homepage, while only the query-based detail route retains its URL. The requested flow context is lost before the user can continue through the age gate.",
      "artifacts": [
        "evidence/route-categories.json",
        "evidence/route-signin.json",
        "evidence/route-video-detail.json"
      ],
      "suggestedFix": "Preserve the requested return URL through age verification and route users back to categories or sign-in after successful confirmation.",
      "effort": "medium"
    },
    {
      "id": "F-013",
      "pathId": "error-404",
      "url": "https://rt.pornhub.org",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Unknown URLs silently become the homepage.",
      "evidence": "An unknown path returns a 200 homepage with no not-found state, explanation, or recovery action.",
      "artifacts": [
        "evidence/route-error-404.json"
      ],
      "suggestedFix": "Return an actual 404 response with a concise not-found message, search, and links back to useful destinations.",
      "effort": "small"
    },
    {
      "id": "F-014",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "identify-inp-causes",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Largest Contentful Paint is well outside the good range.",
      "evidence": "Lighthouse measured LCP 16.8s, FCP 3.0s, and TBT about 80ms; the independent trace measured LCP 4.55s. Both LCP observations exceed the 2.5s good threshold.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Profile the actual LCP element, preload or prioritize it, reduce first-load ad and analytics work, and validate LCP under repeatable mobile conditions.",
      "effort": "large"
    },
    {
      "id": "F-015",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The mobile first load shifts after rendering.",
      "evidence": "The mobile layout primitive recorded CLS 0.1021 from a shift around 1.2s, just outside the good threshold; three images also lack explicit dimensions.",
      "artifacts": [
        "evidence/layout-mobile.json",
        "evidence/images.json"
      ],
      "suggestedFix": "Reserve dimensions for all images and late banners, and stabilize the gate layout before first paint.",
      "effort": "small"
    },
    {
      "id": "F-016",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "A large blocking network graph delays primary rendering.",
      "evidence": "The page made 172 requests and transferred 5.41MB. The HAR lists seven parser-inserted VeryHigh-priority stylesheets and three high-priority parser scripts as blocking candidates; Lighthouse also failed LCP discovery and dependency-tree insights.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "suggestedFix": "Inline only critical CSS, defer non-critical styles and scripts, shorten dependency chains, and explicitly prioritize the LCP resource.",
      "effort": "large"
    },
    {
      "id": "F-017",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The first load ships substantial unused JavaScript and CSS.",
      "evidence": "Lighthouse estimated 288KiB unused JavaScript and 74KiB unused CSS; three Google tag scripts account for much of the unused JavaScript.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Load analytics once and only after consent, split route-specific code and styles, and remove duplicated or unused mobile bundles.",
      "effort": "medium"
    },
    {
      "id": "F-018",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Several controls and frames lack reliable accessible names.",
      "evidence": "Lighthouse found multiple visible ad iframes without titles and a visible-label/accessibility-name mismatch on the header user button. The search input also has no associated label.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/recon.json"
      ],
      "suggestedFix": "Title meaningful iframes, make visible and accessible control names match, and associate a persistent label or aria-label with search.",
      "effort": "small"
    },
    {
      "id": "F-019",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus and page structure are inconsistent.",
      "evidence": "The focus probe found outline:none on cookie actions and search and many navigation links without a visible outline; the age heading is H3 with no visible H1 on home.",
      "artifacts": [
        "evidence/probes.json",
        "evidence/recon.json"
      ],
      "suggestedFix": "Provide a logical H1-led heading structure and a consistent :focus-visible style on every interactive element without removing the browser outline unless replaced.",
      "effort": "small"
    },
    {
      "id": "F-020",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "improve-text-layout-and-legibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Mandatory text is not fully legible on narrow screens.",
      "evidence": "The mobile age-gate copy and heading are clipped off the right edge, preventing complete reading of the mandatory notice.",
      "artifacts": [
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Use a fluid text container, balanced wrapping, and responsive font sizing so all mandatory copy remains inside the viewport.",
      "effort": "small"
    },
    {
      "id": "F-021",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Zoom is disabled and narrow reflow and target sizing are inadequate.",
      "evidence": "Lighthouse found user-scalable=no/maximum-scale=1 on the mobile document, the screenshot fails reflow, and many interactive targets are only 15 to 22px high.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-mobile.png",
        "evidence/probes.json"
      ],
      "suggestedFix": "Allow user zoom, fix narrow reflow, enlarge touch targets, and ensure video captions or equivalents are exposed on detail pages.",
      "effort": "small"
    },
    {
      "id": "F-022",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage throws an uncaught JavaScript exception.",
      "evidence": "A TypeError occurs in setInstallButton when addEventListener is called on null.",
      "artifacts": [
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Guard the queried install element before binding, initialize only when the control exists, and add a regression test for the first-load path.",
      "effort": "small"
    },
    {
      "id": "F-023",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Asset sizing and deprecated media styling weaken document hygiene.",
      "evidence": "The document has a valid doctype and UTF-8 charset, but 3 images lack dimensions and Lighthouse reports deprecated media-control CSS usage.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Add intrinsic width and height to images and replace deprecated internal media-control selectors with supported attributes and controls.",
      "effort": "small"
    },
    {
      "id": "F-024",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Deprecated APIs and avoidable BFCache blockers remain.",
      "evidence": "Lighthouse reports deprecated unload listeners, inspector issues, and four BFCache failure reasons including the unload handler and cache-control:no-store.",
      "artifacts": [
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Remove unload handlers in favor of pagehide/visibilitychange, address DevTools issues, and use no-store only where sensitive responses require it.",
      "effort": "medium"
    },
    {
      "id": "F-025",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Public pages lack unique descriptive titles and descriptions.",
      "evidence": "All tested paths use the generic title “Pornhub” and no meta description, including the detail page with a specific H1.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/route-video-detail.json"
      ],
      "suggestedFix": "Emit a unique title and concise description for each index and detail template.",
      "effort": "small"
    },
    {
      "id": "F-026",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Crawler directives and links prevent reliable discovery.",
      "evidence": "The page declares noindex,nofollow, Lighthouse found javascript:void(0) anchors, and /robots.txt returns the full HTML page rather than valid robots directives.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/robots.txt",
        "evidence/recon.json"
      ],
      "suggestedFix": "Serve a valid robots.txt, use real href destinations for content links, and remove nofollow/noindex when this public locale is intended to be indexed.",
      "effort": "medium"
    },
    {
      "id": "F-027",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Canonical, status, robots, and sitemap signals conflict.",
      "evidence": "The detail page canonical points to the homepage, listing and unknown paths redirect to the homepage with 200, every page is noindex, and /sitemap.xml returns 404.",
      "artifacts": [
        "evidence/route-video-detail.json",
        "evidence/route-error-404.json",
        "evidence/sitemap.xml"
      ],
      "suggestedFix": "Use self-referential canonicals on indexable templates, return correct HTTP statuses, align robots with intent, and publish a valid sitemap.",
      "effort": "medium"
    },
    {
      "id": "F-028",
      "pathId": "video-detail",
      "url": "https://rt.pornhub.org/view_video.php?viewkey=ph589e21738c8f9",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Video detail pages lack structured and share-preview metadata.",
      "evidence": "Recon found no JSON-LD and no Open Graph metadata; the detail route exposes a rich video entity only in visible DOM.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/route-video-detail.json"
      ],
      "suggestedFix": "Add accurate VideoObject JSON-LD and Open Graph metadata derived from the visible detail content.",
      "effort": "medium"
    },
    {
      "id": "F-029",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Transport is HTTPS but key browser defenses and one cookie flag are missing.",
      "evidence": "HTTPS and HSTS are present and no client secrets were detected, but CSP and X-Content-Type-Options are missing and cookie rp is not Secure.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/secrets.json"
      ],
      "suggestedFix": "Deploy a nonce- or hash-based CSP, add nosniff, and mark every HTTPS cookie Secure with an appropriate SameSite value.",
      "effort": "medium"
    },
    {
      "id": "F-030",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "A large tracking footprint loads before the user resolves consent.",
      "evidence": "Before consent resolution, the load contacted 12 third-party origins, including Google Tag Manager and DoubleClick; 101 third-party requests transferred 2.26MB.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/recon.json"
      ],
      "suggestedFix": "Block non-essential analytics and advertising until explicit consent, minimize vendors and events, and batch the remaining measurement.",
      "effort": "large"
    },
    {
      "id": "F-031",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "The response omits several browser-enforced defenses.",
      "evidence": "CSP, Referrer-Policy, Permissions-Policy, and nosniff are missing; seven cookies use SameSite=None and rp is not Secure. HSTS and X-Frame-Options are present.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Add restrictive CSP/frame-ancestors, nosniff, Referrer-Policy and Permissions-Policy; reduce SameSite=None to only cookies that truly need cross-site use.",
      "effort": "medium"
    },
    {
      "id": "F-032",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "flicker-free-client-side-ab-testing",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Core server HTML only partially represents the rendered page.",
      "evidence": "The server sends substantial HTML and is not a JS shell, but only 45% of rendered content words overlap raw HTML and no H1 survives as a crawler-visible heading.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render the primary listing and headings consistently, then layer personalization and ads on as enhancements.",
      "effort": "medium"
    },
    {
      "id": "F-033",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-resilient",
      "principleCheckId": "resilient-runtime-behaviour",
      "guidanceId": "resilient-context-menus-and-nested-dropdowns",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Mandatory UI and initialization fail under realistic states.",
      "evidence": "The age gate clips on a narrow viewport and the homepage throws while binding an install button, showing that layout and initialization are not robust to the current state.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Make gate layout intrinsic and guard optional runtime dependencies so missing elements do not break initialization.",
      "effort": "medium"
    },
    {
      "id": "F-034",
      "pathId": "error-404",
      "url": "https://rt.pornhub.org",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "HTTP failure states are replaced by misleading success.",
      "evidence": "The unknown route silently returns a 200 homepage with no error explanation, retry, search, or preserved path.",
      "artifacts": [
        "evidence/route-error-404.json"
      ],
      "suggestedFix": "Return a truthful status and a dedicated recovery state with search and navigation options.",
      "effort": "small"
    },
    {
      "id": "F-035",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Language is mixed and layout styling is not writing-mode resilient.",
      "evidence": "The document correctly uses lang=ru, but the probe found 0 logical-property tokens versus 181 physical left/right tokens, and visible legal/consent UI mixes English and Russian.",
      "artifacts": [
        "evidence/probes.json",
        "evidence/recon.json"
      ],
      "suggestedFix": "Translate the entire gate and consent experience consistently and migrate layout rules to logical inline/block properties.",
      "effort": "medium"
    },
    {
      "id": "F-036",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Tracking begins before the consent choice can take effect.",
      "evidence": "The interface offers an essential-only choice, but analytics and advertising trackers are already active while the consent prompt is still visible, so the stated choice does not precede collection.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Default non-essential collection to off and activate vendors only after an affirmative, granular consent choice.",
      "effort": "large"
    },
    {
      "id": "F-037",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Search disables assistance and lacks a persistent label.",
      "evidence": "The visible search input has autocomplete=off and no associated label, reducing browser assistance and clarity.",
      "artifacts": [
        "evidence/recon.json"
      ],
      "suggestedFix": "Give search a programmatic label and permit appropriate autocomplete/search-history assistance unless there is a documented privacy reason not to.",
      "effort": "small"
    },
    {
      "id": "F-038",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Most images lack responsive modern delivery.",
      "evidence": "Of 37 images, 33 lack srcset, 20 use legacy formats, and 3 lack dimensions. Image transfers totaled 1.27MB on first load.",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Serve AVIF/WebP responsive sources with sizes/srcset, intrinsic dimensions, and appropriately sized placeholders.",
      "effort": "medium"
    },
    {
      "id": "F-039",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "The first load performs substantial work unrelated to immediate content.",
      "evidence": "The page performs 172 requests, including 101 third-party requests, while Lighthouse estimates 288KiB unused JavaScript and 74KiB unused CSS.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Remove unused bundles, delay non-essential vendors, batch analytics, and avoid below-fold ad work until needed.",
      "effort": "large"
    },
    {
      "id": "F-040",
      "pathId": "home",
      "url": "https://rt.pornhub.org",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party cost is disproportionate on the first view.",
      "evidence": "Third parties account for 2.26MB and 101 requests, including 31 TrafficJunky requests and multiple Google analytics/tag requests, before primary interaction.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Set a third-party request and byte budget, load ads only near view after consent, and consolidate analytics.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T-1",
      "title": "Repair mobile age-gate reflow, zoom, targets, and focus",
      "priority": 1,
      "findingIds": [
        "F-009",
        "F-010",
        "F-011",
        "F-018",
        "F-019",
        "F-020",
        "F-021"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-2",
      "title": "Gate analytics and advertising behind consent and reduce third-party load",
      "priority": 2,
      "findingIds": [
        "F-029",
        "F-030",
        "F-031",
        "F-036",
        "F-037",
        "F-038",
        "F-039",
        "F-040"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T-3",
      "title": "Cut LCP and network cost by prioritizing critical content and deferring ads",
      "priority": 3,
      "findingIds": [
        "F-014",
        "F-015",
        "F-016",
        "F-017"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T-4",
      "title": "Fix route preservation, 404 behavior, and recovery states",
      "priority": 4,
      "findingIds": [
        "F-004",
        "F-005",
        "F-012",
        "F-013",
        "F-032",
        "F-033",
        "F-034"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T-5",
      "title": "Add unique metadata, truthful crawler controls, canonicals, and structured data",
      "priority": 5,
      "findingIds": [
        "F-025",
        "F-026",
        "F-027",
        "F-028"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-6",
      "title": "Add CSP, nosniff, privacy policies, and safe cookie attributes",
      "priority": 6,
      "findingIds": [
        "F-029",
        "F-030",
        "F-031"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T-7",
      "title": "Replace custom overlays with native semantic primitives",
      "priority": 7,
      "findingIds": [
        "F-006",
        "F-007",
        "F-008"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T-8",
      "title": "Fix accessible names, document structure, and input labeling",
      "priority": 8,
      "findingIds": [
        "F-018",
        "F-019",
        "F-020",
        "F-021",
        "F-036",
        "F-037"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-9",
      "title": "Remove console errors, deprecated APIs, BFCache blockers, and unused bundles",
      "priority": 9,
      "findingIds": [
        "F-014",
        "F-015",
        "F-016",
        "F-017",
        "F-022",
        "F-023",
        "F-024"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-10",
      "title": "Modernize responsive images and component layout",
      "priority": 10,
      "findingIds": [
        "F-009",
        "F-010",
        "F-011",
        "F-038",
        "F-039",
        "F-040"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T23-27-01-752Z"
}
