{
  "url": "https://letsporn.com",
  "auditedAt": "2026-07-17T21:10:21.378Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete remote audit of seven representative paths. Playback and personal age verification were intentionally not performed; the audited product surface is the pre-verification catalog and handoff.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered MPA with jQuery/Bootstrap-style controls",
    "notes": "Adult media catalog. Homepage, listing, search, entity, detail, 404 and German locale templates were sampled. Login/payment routes were not covered because they are robots-disallowed and not exposed pre-verification."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "lighthouse",
    "curl robots/sitemap/status"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "declarative-dialog-popover-control",
    "optimize-image-priority",
    "optimize-script-priority",
    "identify-heavy-scripts",
    "html",
    "security",
    "privacy",
    "translator",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "performance",
    "fluid-scaling",
    "forms",
    "stabilize-reactive-state"
  ],
  "artifacts": [
    {
      "type": "dom",
      "path": "evidence/category-dom.json",
      "caption": "Audit evidence: category-dom.json"
    },
    {
      "type": "layout",
      "path": "evidence/category-mobile-layout.json",
      "caption": "Audit evidence: category-mobile-layout.json"
    },
    {
      "type": "dom",
      "path": "evidence/channel-dom.json",
      "caption": "Audit evidence: channel-dom.json"
    },
    {
      "type": "layout",
      "path": "evidence/channel-mobile-layout.json",
      "caption": "Audit evidence: channel-mobile-layout.json"
    },
    {
      "type": "other",
      "path": "evidence/controls.json",
      "caption": "Audit evidence: controls.json",
      "findingIds": [
        "F03",
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Audit evidence: cookies.json",
      "findingIds": [
        "F16",
        "F17",
        "F22"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/detail-dom.json",
      "caption": "Audit evidence: detail-dom.json"
    },
    {
      "type": "layout",
      "path": "evidence/detail-mobile-layout.json",
      "caption": "Audit evidence: detail-mobile-layout.json"
    },
    {
      "type": "other",
      "path": "evidence/detail-probe.json",
      "caption": "Audit evidence: detail-probe.json",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Audit evidence: discoverability-crawler.png"
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Audit evidence: discoverability-rendered.png"
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Audit evidence: discoverability.json",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/error-state.json",
      "caption": "Audit evidence: error-state.json"
    },
    {
      "type": "dom",
      "path": "evidence/german-dom.json",
      "caption": "Audit evidence: german-dom.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/german-probe.json",
      "caption": "Audit evidence: german-probe.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Audit evidence: headers.json",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Audit evidence: heap-baseline.heapsnapshot"
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Audit evidence: heap-post.heapsnapshot"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark-reduced.png",
      "caption": "Audit evidence: home-dark-reduced.png",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Audit evidence: home-desktop.png",
      "findingIds": [
        "F01",
        "F22"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Audit evidence: home-dom.json",
      "findingIds": [
        "F03",
        "F06"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Audit evidence: home-mobile-layout.json"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Audit evidence: home-mobile.png",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "Audit evidence: home-recon.json"
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Audit evidence: home-summary.json",
      "findingIds": [
        "F06",
        "F17",
        "F20",
        "F21"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Audit evidence: home-trace-summary.json",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "Audit evidence: home-trace.json"
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Audit evidence: home.har",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Audit evidence: images.json",
      "findingIds": [
        "F11",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/interaction-probe.json",
      "caption": "Audit evidence: interaction-probe.json",
      "findingIds": [
        "F04",
        "F10"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Audit evidence: lighthouse.json",
      "findingIds": [
        "F02",
        "F05",
        "F06",
        "F07",
        "F08",
        "F09",
        "F10",
        "F12",
        "F13",
        "F20",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Audit evidence: platform-probe.json"
    },
    {
      "type": "other",
      "path": "evidence/preferences.json",
      "caption": "Audit evidence: preferences.json",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/quality-probe.json",
      "caption": "Audit evidence: quality-probe.json",
      "findingIds": [
        "F04",
        "F08",
        "F09",
        "F14"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/search-dom.json",
      "caption": "Audit evidence: search-dom.json"
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "Audit evidence: search-mobile.png"
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Audit evidence: secrets.json"
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Audit evidence: trackers.json",
      "findingIds": [
        "F17",
        "F21",
        "F22"
      ]
    }
  ],
  "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": "medium",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "The preference probe confirmed prefers-color-scheme: dark, but the page declares color-scheme: normal and the light and dark captures are visually identical; body remains rgb(0,0,0).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark-reduced.png",
        "evidence/preferences.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Preference probe reported no active animations under reduce; no CSS media rules or load motion were observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse accessibility scored 0.75 and its color-contrast audit found one failing element.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "DOM/CSS inspection found no View Transition API usage, but MPA route changes keep stable global navigation and do not use disorienting custom transitions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "No scroll-linked animation or main-thread scroll animation was present; long pages use native scrolling and layout reported no long tasks.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "The content grid and horizontal navigation use native touch scrolling; no custom pointer gesture traps were found.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "The long mobile listing retains clear section headings and native scroll behavior without obstructive sticky chrome.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "No visible tooltip/popover placement failure occurred in entry or mobile states; overlay concerns are separately recorded against semantic primitives.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "First viewport has one clear age action and strong content heading; category pills and See More links establish hierarchy.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "The legally required age prompt is an inline banner, not a full-viewport modal; browsing structure remains visible and thumbnails are blurred.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "medium",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "DOM inspection found #favoriteModal as a div role=dialog with nested div role=document, data-backdrop=static and a close button with no accessible name.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/controls.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Screenshots show most post-banner viewport area dedicated to content cards rather than decorative chrome.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "All four tested 360px templates reported scrollWidth=clientWidth=360 and zero horizontal overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Home, category, channel and detail templates all reflowed to 360px with no overflow; the DOM uses responsive image sizes even without container queries.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "The focus probe focused the visible logo link and computed outline was none (0px) with no box shadow; several icon buttons also lack names.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/quality-probe.json",
        "evidence/interaction-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "The page identifies the catalog, presents a prominent legally required Get started action, and labels Explore/Charts/Channels/Pornstars/Categories.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Search results, category, channel and detail URLs all loaded successfully; video playback correctly remains gated behind the explicit age-verification action.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/search-dom.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "An unknown route returned HTTP 404 and rendered a branded PAGE NOT FOUND state with working navigation and recovery content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/error-state.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse measured LCP at 4.4s (score 0.40), despite the unthrottled trace reporting 663ms; the mobile lab result exceeds the 2.5s good threshold.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Layout primitives reported CLS 0 with no shifts on homepage, category, channel and detail mobile templates.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Trace reported zero long tasks and 0ms total blocking time; Lighthouse TBT was 22ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "HAR recorded 49 requests and 1,339,517 transferred bytes; Lighthouse reported an 879ms longest dependency chain. Parser-inserted jQuery and all.min.js lack async/defer, although they are placed near the end of body.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse estimated 204 KiB unused JavaScript: 71 KiB gtag, 63 KiB GTM, 53 KiB Yandex and 21 KiB first-party JS; it also estimated 11 KiB unused CSS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse found 52 buttons without accessible names; the DOM probe independently counted 55 unlabeled buttons, including search, account, menu, favorite and close controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/quality-probe.json",
        "evidence/controls.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse accessibility scored 0.75 and its color-contrast audit found one failing element.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse failed landmark-one-main; the focus probe found no visible outline, weakening keyboard orientation despite otherwise coherent h1/h2 ordering.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/quality-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Desktop and mobile screenshots show readable headings/body copy with coherent spacing and no text clipping.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse found 24 target-size failures; the 360px probe measured top icon controls at 20x20, Get started at 32px high, pills at 34px high and several links at 18px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/interaction-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Lighthouse errors-in-console audit passed with no items.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "The image primitive found 5 images without dimensions and 2 without alt text among 100 images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "medium",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse best-practices scored 0.77, found an Inspector issue, and reported five reasons preventing back/forward cache restoration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Home and detail probes found distinct non-empty titles and descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/quality-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse SEO found four links without descriptive text, while raw HTML coverage was otherwise 100%.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/discoverability.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Pages returned 200, expose canonical/hreflang signals, robots.txt allows public templates, and sitemap.xml is populated.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Home and detail probes found no og:* metadata. The detail page does provide useful VideoObject JSON-LD, title, description and canonical URL.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/quality-probe.json",
        "evidence/detail-probe.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Headers show no CSP, Referrer-Policy or Permissions-Policy. Strict-Transport-Security is sent with max-age=0, which removes HSTS protection rather than enabling it. Cookie audit found PHPSESSID, kt_tcookie, kt_is_visited and Google Analytics cookies without Secure; PHPSESSID also lacks HttpOnly, and several cookies use SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "On initial load the tracker probe contacted five third-party origins including Google Tag Manager, Google Analytics and Yandex; HAR attributed about 379 KiB to GTM/Yandex scripts and cookies included 365-400 day identifiers.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "No permission prompt fired on load; the age-verification action is explicit and external rather than a surprise browser permission request.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Headers show no CSP, Referrer-Policy or Permissions-Policy. Strict-Transport-Security is sent with max-age=0, which removes HSTS protection rather than enabling it. Cookie audit found PHPSESSID, kt_tcookie, kt_is_visited and Google Analytics cookies without Secure; PHPSESSID also lacks HttpOnly, and several cookies use SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Discoverability comparison found 100% rendered-word coverage in 227KB raw HTML, with title, H1 and description present and no JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Server-rendered navigation/search templates load independently and mobile menus/search controls are present without an SPA runtime dependency.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-route recon and declared page capabilities.",
      "evidence": "The catalog is a public MPA and does not advertise an offline or installable experience; the linked manifest is favicon metadata with no app name/start URL and there is no service-worker registration.",
      "reason": "The catalog is a public MPA and does not advertise an offline or installable experience; the linked manifest is favicon metadata with no app name/start URL and there is no service-worker registration."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "The tested unknown route returned a real HTTP 404 and rendered a branded recovery page with navigation and trending links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/error-state.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "The German page correctly sets lang=de and translates navigation/dates, but its prominent legal age banner still reads “Verify your age…”, “It’s fast…” and “Get started” in English.",
      "pathIds": [
        "german"
      ],
      "artifacts": [
        "evidence/german-probe.json",
        "evidence/german-dom.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "German route sets lang=de and localizes relative dates and view-count labels (for example “vor 1 Woche”, “30K aufrufe”).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/german-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-route recon and declared page capabilities.",
      "evidence": "No scheduled events, user-entered times, or time-zone-sensitive coordination surfaced on the representative templates.",
      "reason": "No scheduled events, user-entered times, or time-zone-sensitive coordination surfaced on the representative templates."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "The banner says “we don’t store personal data,” yet the initial page sets persistent Google/Yandex identifiers and sends analytics requests before the visitor starts age verification.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/cookies.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "The only local form is search; no premature validation is applied, and the dedicated 404 state clearly identifies failure and offers recovery links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/error-state.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-route recon and declared page capabilities.",
      "evidence": "The only pre-verification input is a simple search field; no identity, address, payment or profile fields are exposed.",
      "reason": "The only pre-verification input is a simple search field; no identity, address, payment or profile fields are exposed."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-route recon and declared page capabilities.",
      "evidence": "No checkout, subscription, account-management or payment flow is exposed in the audited pre-verification surface; regulated age verification is external and is not an account purchase flow.",
      "reason": "No checkout, subscription, account-management or payment flow is exposed in the audited pre-verification surface; regulated age verification is external and is not an account purchase flow."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse estimated 420 KiB image savings. The image probe found 15 oversized images, 59 without srcset and all 100 reported img URLs in legacy JPEG/PNG formats.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "GTM and Yandex scripts transfer about 379 KiB before interaction; Yandex performs multiple cookie-sync redirects and Lighthouse identifies most analytics code as unused on load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted CDP primitive/probe plus relevant Lighthouse or visual corroboration.",
      "evidence": "Lighthouse estimated 420 KiB image savings. The image probe found 15 oversized images, 59 without srcset and all 100 reported img URLs in legacy JPEG/PNG formats. GTM and Yandex scripts transfer about 379 KiB before interaction; Yandex performs multiple cookie-sync redirects and Lighthouse identifies most analytics code as unused on load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/images.json",
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-route recon and declared page capabilities.",
      "evidence": "No developer intent or user-facing agent workflow is advertised; this is a conventional read-only media catalog, so WebMCP tool exposure is not required.",
      "reason": "No developer intent or user-facing agent workflow is advertised; this is a conventional read-only media catalog, so WebMCP tool exposure is not required."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-route recon and declared page capabilities.",
      "evidence": "The site offers no summarisation, generation or other inference feature for which built-in on-device AI would be applicable.",
      "reason": "The site offers no summarisation, generation or other inference feature for which built-in on-device AI would be applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "After 10 menu/search open-close cycles, heap grew from 12.21MB to 13.73MB, largely code/native initialization; closures rose only 1.1% and no Detached* constructor entered the top set. Separate-browser variance lowers confidence but provides no direct leak signal.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Heap summaries measured a 12.21MB baseline and 13.73MB post-interaction footprint, proportionate for a media catalog with analytics.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct visual/DOM/CDP evidence on representative paths.",
      "evidence": "Compared summaries showed no Detached* constructor in the top retained populations and only 115 additional closures after repeated controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F02",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No developer intent or user-facing agent workflow is advertised; this is a conventional read-only media catalog, so WebMCP tool exposure is not required. The site offers no summarisation, generation or other inference feature for which built-in on-device AI would be applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and age-verification entry; represents global navigation, discovery grid, preferences, security, performance and accessibility.",
      "url": "https://letsporn.com/",
      "conditions": [
        "desktop 780x493",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "category",
      "description": "Teen category listing; represents category/list template. Other categories were not repeated because they share this template.",
      "url": "https://letsporn.com/categories/teen",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "search",
      "description": "Search results for a representative query; exercises the primary find-content journey.",
      "url": "https://letsporn.com/search?q=mom",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "channel",
      "description": "Brazzers channel page; represents channel and creator/entity listing templates.",
      "url": "https://letsporn.com/channels/brazzers",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "detail",
      "description": "Representative video detail page; checks detail metadata and pre-verification media state. Playback was not attempted because the site requires regulated age verification.",
      "url": "https://letsporn.com/saggy-granny-feels-young-again-thanks-to-her-horny-nephew-30638",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "error",
      "description": "Unknown URL redirected to the first-party 404 page; exercises recovery from a bad route.",
      "url": "https://letsporn.com/definitely-not-a-real-page-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    },
    {
      "id": "german",
      "description": "German locale homepage; represents the only advertised non-default locale.",
      "url": "https://de.letsporn.com/",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "low",
      "summary": "The fixed dark palette does not respond to the user color-scheme preference.",
      "evidence": "The preference probe confirmed prefers-color-scheme: dark, but the page declares color-scheme: normal and the light and dark captures are visually identical; body remains rgb(0,0,0).",
      "suggestedFix": "Declare color-scheme and provide light/dark surface tokens with prefers-color-scheme or light-dark().",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark-reduced.png",
        "evidence/preferences.json"
      ],
      "effort": "small",
      "confidence": "medium",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F02",
      "severity": "medium",
      "summary": "Some foreground/background combinations fail minimum contrast.",
      "evidence": "Lighthouse accessibility scored 0.75 and its color-contrast audit found one failing element.",
      "suggestedFix": "Adjust the failing foreground or surface token to meet WCAG contrast and verify in high-contrast/forced-color modes.",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F03",
      "severity": "medium",
      "summary": "Dismissible overlays use custom Bootstrap-style divs rather than native dialog/popover semantics.",
      "evidence": "DOM inspection found #favoriteModal as a div role=dialog with nested div role=document, data-backdrop=static and a close button with no accessible name.",
      "suggestedFix": "Use <dialog> or popover with declarative controls, light dismiss where safe, focus management, and a named close button.",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "forms",
      "artifacts": [
        "evidence/controls.json",
        "evidence/home-dom.json"
      ],
      "effort": "medium",
      "confidence": "medium",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F04",
      "severity": "high",
      "summary": "Keyboard focus is not visibly indicated on key controls.",
      "evidence": "The focus probe focused the visible logo link and computed outline was none (0px) with no box shadow; several icon buttons also lack names.",
      "suggestedFix": "Add a strong :focus-visible ring with adequate contrast to every interactive control.",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/quality-probe.json",
        "evidence/interaction-probe.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F05",
      "severity": "high",
      "summary": "Mobile Largest Contentful Paint is slow.",
      "evidence": "Lighthouse measured LCP at 4.4s (score 0.40), despite the unthrottled trace reporting 663ms; the mobile lab result exceeds the 2.5s good threshold.",
      "suggestedFix": "Prioritize the true LCP image, reduce competing third-party/script work, and validate under mobile throttling.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F06",
      "severity": "medium",
      "summary": "Resource delivery has a long dependency chain and avoidable weight.",
      "evidence": "HAR recorded 49 requests and 1,339,517 transferred bytes; Lighthouse reported an 879ms longest dependency chain. Parser-inserted jQuery and all.min.js lack async/defer, although they are placed near the end of body.",
      "suggestedFix": "Remove avoidable dependencies, self-host or defer non-critical code, and preserve preload only for genuinely critical assets.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse.json",
        "evidence/home-dom.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F07",
      "severity": "medium",
      "summary": "The page ships substantial unused JavaScript and CSS.",
      "evidence": "Lighthouse estimated 204 KiB unused JavaScript: 71 KiB gtag, 63 KiB GTM, 53 KiB Yandex and 21 KiB first-party JS; it also estimated 11 KiB unused CSS.",
      "suggestedFix": "Remove duplicate analytics loaders, conditionally load features, and split first-party bundles/styles by template.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F08",
      "severity": "high",
      "summary": "Dozens of icon buttons have no accessible name.",
      "evidence": "Lighthouse found 52 buttons without accessible names; the DOM probe independently counted 55 unlabeled buttons, including search, account, menu, favorite and close controls.",
      "suggestedFix": "Give every icon-only button a concise aria-label or visually hidden text and preserve visible tooltip text where useful.",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/quality-probe.json",
        "evidence/controls.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F09",
      "severity": "high",
      "summary": "The page lacks a main landmark and consistent visible focus structure.",
      "evidence": "Lighthouse failed landmark-one-main; the focus probe found no visible outline, weakening keyboard orientation despite otherwise coherent h1/h2 ordering.",
      "suggestedFix": "Wrap primary content in <main>, add a skip link, and provide persistent :focus-visible styling with logical tab order.",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/quality-probe.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F10",
      "severity": "medium",
      "summary": "Many mobile touch targets are too small or tightly spaced.",
      "evidence": "Lighthouse found 24 target-size failures; the 360px probe measured top icon controls at 20x20, Get started at 32px high, pills at 34px high and several links at 18px high.",
      "suggestedFix": "Provide at least 44x44 CSS pixel hit areas or sufficient spacing without shrinking the visible icon.",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/interaction-probe.json",
        "evidence/home-mobile.png"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F11",
      "severity": "low",
      "summary": "Some images omit intrinsic dimensions and alt text.",
      "evidence": "The image primitive found 5 images without dimensions and 2 without alt text among 100 images.",
      "suggestedFix": "Add width/height or aspect-ratio and appropriate alt text (empty for decorative flags, descriptive where meaningful).",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/images.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F12",
      "severity": "medium",
      "summary": "Browser platform hygiene is weakened by bfcache and DevTools issues.",
      "evidence": "Lighthouse best-practices scored 0.77, found an Inspector issue, and reported five reasons preventing back/forward cache restoration.",
      "suggestedFix": "Resolve the reported Inspector issue and bfcache blockers, then retest back/forward navigation.",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "effort": "medium",
      "confidence": "medium",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F13",
      "severity": "low",
      "summary": "Several crawler-visible links have non-descriptive text.",
      "evidence": "Lighthouse SEO found four links without descriptive text, while raw HTML coverage was otherwise 100%.",
      "suggestedFix": "Give linked images and generic links descriptive accessible/link text that communicates their destination.",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/discoverability.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F14",
      "severity": "low",
      "summary": "Pages omit Open Graph/social preview metadata.",
      "evidence": "Home and detail probes found no og:* metadata. The detail page does provide useful VideoObject JSON-LD, title, description and canonical URL.",
      "suggestedFix": "Add accurate og:title, og:description, og:image, og:url and video metadata per template.",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/quality-probe.json",
        "evidence/detail-probe.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F15",
      "severity": "high",
      "summary": "Transport and browser security policies are incomplete, and HSTS is effectively disabled.",
      "evidence": "Headers show no CSP, Referrer-Policy or Permissions-Policy. Strict-Transport-Security is sent with max-age=0, which removes HSTS protection rather than enabling it.",
      "suggestedFix": "Deploy a tested CSP, a non-zero long-lived HSTS policy after validation, strict referrer policy, and a least-privilege Permissions-Policy.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "artifacts": [
        "evidence/headers.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F16",
      "severity": "high",
      "summary": "Session and analytics cookies lack basic protections.",
      "evidence": "Cookie audit found PHPSESSID, kt_tcookie, kt_is_visited and Google Analytics cookies without Secure; PHPSESSID also lacks HttpOnly, and several cookies use SameSite=None.",
      "suggestedFix": "Set Secure and HttpOnly on session/auth cookies, choose Lax/Strict unless cross-site use is essential, and shorten analytics retention.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "artifacts": [
        "evidence/cookies.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F17",
      "severity": "high",
      "summary": "Tracking begins before age verification or any visible consent choice.",
      "evidence": "On initial load the tracker probe contacted five third-party origins including Google Tag Manager, Google Analytics and Yandex; HAR attributed about 379 KiB to GTM/Yandex scripts and cookies included 365-400 day identifiers.",
      "suggestedFix": "Do not initialize non-essential analytics before consent; minimize vendors and retention, and document the data flow clearly.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home-summary.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F19",
      "severity": "medium",
      "summary": "The German locale leaves the age-verification call to action in English.",
      "evidence": "The German page correctly sets lang=de and translates navigation/dates, but its prominent legal age banner still reads “Verify your age…”, “It’s fast…” and “Get started” in English.",
      "suggestedFix": "Localize all legal, trust and action copy as one atomic message and include it in translation completeness checks.",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "built-in-ai",
      "artifacts": [
        "evidence/german-probe.json",
        "evidence/german-dom.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "german",
      "url": "https://de.letsporn.com/"
    },
    {
      "id": "F20",
      "severity": "medium",
      "summary": "Image delivery wastes hundreds of kilobytes.",
      "evidence": "Lighthouse estimated 420 KiB image savings. The image probe found 15 oversized images, 59 without srcset and all 100 reported img URLs in legacy JPEG/PNG formats.",
      "suggestedFix": "Generate AVIF/WebP variants and correctly sized responsive srcsets, especially for 48px avatars and logos.",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F21",
      "severity": "medium",
      "summary": "Analytics and background tracking consume a disproportionate share of initial work.",
      "evidence": "GTM and Yandex scripts transfer about 379 KiB before interaction; Yandex performs multiple cookie-sync redirects and Lighthouse identifies most analytics code as unused on load.",
      "suggestedFix": "Remove duplicate analytics, gate remaining vendors on consent and visibility, and batch or deprioritize non-essential telemetry.",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json",
        "evidence/trackers.json"
      ],
      "effort": "medium",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    },
    {
      "id": "F22",
      "severity": "high",
      "summary": "The age banner’s privacy reassurance conflicts with observed tracking.",
      "evidence": "The banner says “we don’t store personal data,” yet the initial page sets persistent Google/Yandex identifiers and sends analytics requests before the visitor starts age verification.",
      "suggestedFix": "Replace the absolute claim with accurate, specific disclosure and prevent non-essential tracking until consent.",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/cookies.json",
        "evidence/trackers.json"
      ],
      "effort": "small",
      "confidence": "high",
      "pathId": "home",
      "url": "https://letsporn.com/"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Improve privacy and truthful disclosure",
      "priority": 1,
      "findingIds": [
        "F17",
        "F22"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Improve accessible controls and keyboard structure",
      "priority": 2,
      "findingIds": [
        "F08",
        "F09",
        "F04",
        "F10",
        "F02",
        "F03"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Improve security headers and cookies",
      "priority": 3,
      "findingIds": [
        "F15",
        "F16"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Improve LCP and payload",
      "priority": 4,
      "findingIds": [
        "F05",
        "F06",
        "F07",
        "F20",
        "F21"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Improve metadata and document hygiene",
      "priority": 5,
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F14"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Improve preference and localization",
      "priority": 6,
      "findingIds": [
        "F01",
        "F19"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 420,
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-17T21-10-21-378Z"
}
