{
  "url": "https://hi.faphouse2.com",
  "auditedAt": "2026-07-20T20:12:38.774Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete report-mode audit. No source was supplied; no fixes were applied. Purchase, identity and age-verification submissions were intentionally not completed, but public browse/detail/search/join states were directly judged.",
  "page": {
    "appType": "hybrid",
    "framework": "Server-rendered MPA with client-side islands/bundles",
    "notes": "Public adult media catalog with age-verification banner, consent UI, search, rich listings, paywalled details and membership conversion. Homepage plus browse, detail, search, join and error archetypes covered. Authenticated account, payment completion, external age verification, VR playback and creator tools were not covered because they require identity/payment/external services."
  },
  "evidenceUsed": [
    "screenshot",
    "dom+computed-style",
    "layout-metrics",
    "evaluate-probe",
    "forced-colors",
    "reduced-motion",
    "har",
    "trace",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "fluid-scaling",
    "forms",
    "identify-inp-causes",
    "break-up-long-tasks",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "security",
    "privacy",
    "html",
    "improve-text-layout-and-legibility",
    "validate-input-after-interaction",
    "autofill-sign-in-form",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "manage-recurring-intervals",
    "css-layout",
    "size-aware-styling"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Homepage desktop with consent and age-verification UI",
      "condition": "desktop",
      "findingIds": [
        "F01",
        "F15",
        "F24"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at narrow viewport showing clipped layout",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F03",
        "F06",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Homepage under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-forced-colors.png",
      "caption": "Homepage under forced-colors/high contrast",
      "condition": "forced-colors: active",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/categories-mobile.png",
      "caption": "Category listing at narrow viewport",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F06",
        "F07",
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-mobile.png",
      "caption": "Video detail paywall at narrow viewport",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F02",
        "F04"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "Search filters/results at narrow viewport",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/join-mobile.png",
      "caption": "Membership page with stacked sign-in and consent overlays",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F04",
        "F05",
        "F10",
        "F26",
        "F27"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered DOM, CSS and computed styles",
      "condition": "desktop",
      "findingIds": [
        "F01",
        "F05"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "Links, forms and metadata reconnaissance",
      "condition": "desktop",
      "findingIds": [
        "F20",
        "F21",
        "F22"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Narrow layout, overflow, CLS and long tasks",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F03",
        "F07"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Full initial-load HAR",
      "condition": "desktop",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact network summary",
      "condition": "desktop",
      "findingIds": [
        "F12",
        "F13",
        "F24",
        "F28",
        "F29",
        "F30"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools load trace",
      "condition": "desktop",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact trace timings and long tasks",
      "condition": "desktop",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Raw HTML versus rendered content comparison",
      "condition": "crawler without JavaScript",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Rendered browser view",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Crawler/no-JS view",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse performance, accessibility, best-practices and SEO audit",
      "condition": "mobile",
      "findingIds": [
        "F09",
        "F11",
        "F13",
        "F14",
        "F15",
        "F16",
        "F17",
        "F19",
        "F20",
        "F29"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "Security headers probe",
      "condition": "desktop",
      "findingIds": [
        "F23",
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "Cookie security probe",
      "condition": "desktop",
      "findingIds": [
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "Third-party tracker probe",
      "condition": "desktop",
      "findingIds": [
        "F24",
        "F30"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "Image sizing/loading/alt audit",
      "condition": "desktop",
      "findingIds": [
        "F12",
        "F14",
        "F18",
        "F28"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "Client secret pattern scan; detected value verified as a public Amplitude key",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Baseline heap summary",
      "condition": "before interaction",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.json",
      "caption": "Heap summary after 10 repeated scroll cycles",
      "condition": "after interaction",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "Same-page DOM and JS heap before/after repeated scroll",
      "condition": "after interaction",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/accessibility-platform-probe.json",
      "caption": "Focus, target, landmark and script attribute probe",
      "condition": "keyboard focus",
      "findingIds": [
        "F09",
        "F16"
      ]
    },
    {
      "type": "other",
      "path": "evidence/motion-css-probe.json",
      "caption": "Reduced-motion and modern CSS feature probe",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": [
        "F02",
        "F03",
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/categories-probe.json",
      "caption": "Category page metadata/structure probe",
      "condition": "desktop",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/detail-probe.json",
      "caption": "Video detail metadata/media probe",
      "condition": "desktop",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/join-probe.json",
      "caption": "Membership pricing and flow probe",
      "condition": "desktop",
      "findingIds": [
        "F10",
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/join-terms-probe.json",
      "caption": "Trial/renewal/cancellation disclosure probe",
      "condition": "desktop",
      "findingIds": [
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "Invalid-route recovery probe",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-browser.json",
      "caption": "Browser-fetched robots.txt",
      "condition": "desktop",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap-browser.json",
      "caption": "Browser-fetched /sitemap.xml response",
      "condition": "desktop",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-list.json",
      "caption": "Pinned Modern Web Guidance catalog consulted before judgement",
      "condition": "modern-web-guidance@0.0.172",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Retrieved implementation guidance",
      "condition": "modern-web-guidance@0.0.172",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Dark-emulated and default screenshots are pixel-identical (both 108,316 bytes), computed html color-scheme is normal, and no color-scheme metadata is present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Under prefers-reduced-motion: reduce, matchMedia matched and getAnimations() returned no active animation; no auto-advance was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion-css-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "The forced-colors screenshot preserves readable text, borders, links and controls across the consent and navigation surfaces.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-forced-colors.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The CSS/media probe found no view-transition rules; the detail-page screenshot shows the paywall as an abrupt overlay state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion-css-probe.json",
        "evidence/detail-mobile.png"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "No scroll-linked animation or scrollytelling surface exists on the representative paths.",
      "reason": "No scroll-linked animation or scrollytelling surface exists on the representative paths."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Representative browsing uses native scrolling and links; no custom pointermove/swipe behavior fighting platform gestures was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The homepage is over 21,000 CSS pixels tall, while CSS inspection found no scroll-state query or scroll timeline and the mobile header occupies substantial fixed chrome.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/motion-css-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Observed fixed consent/paywall surfaces remained within the viewport in desktop captures; no detached tooltip/menu drift was visible on the exercised states.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Active navigation uses a clear yellow underline and pages expose distinct headings such as Categories and Full-Length Porn Videos.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/categories-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The join mobile screenshot shows an unsolicited xHamster sign-in panel stacked above a cookie panel that covers most of the viewport; the detail screenshot is dominated by a paywall overlay.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-mobile.png",
        "evidence/detail-mobile.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "DOM inspection found no <dialog> or role=dialog despite the cookie, sign-in and paywall modal surfaces shown in screenshots.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/join-mobile.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "On 360px captures, age verification, external links, branding and horizontal navigation consume roughly the first 268px before content; controls and labels are visibly clipped at the right edge.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/categories-mobile.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "At viewport 360x800 the layout primitive reported scrollWidth 769 versus visual viewport 360, 409px of horizontal overflow; search filters, cards and top actions are visibly cut off.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/search-mobile.png",
        "evidence/categories-mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The CSS probe found no @container rules, while category cards and search controls are clipped in narrow captures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion-css-probe.json",
        "evidence/categories-mobile.png",
        "evidence/search-mobile.png"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The focus probe found key buttons, sign-in/join links and search input with outline:none; Lighthouse also failed target-size, including 16px-high creator links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/accessibility-platform-probe.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Homepage, categories, video detail and join pages have specific headings and visible next actions (browse, choose video, get membership).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/join-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "On /join, sign-in and cookie overlays stack over plan choices; the screenshot leaves pricing and the membership CTA partially hidden, adding avoidable detours to the primary flow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-mobile.png",
        "evidence/join-probe.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "The invalid route clearly says “This page doesn’t exist” and offers back/Homepage recovery; restricted media also states why it is locked.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse measured LCP 4.2s, Speed Index 7.5s, TBT 350ms and Time to Interactive 25.8s; the CDP trace independently measured FCP/LCP 4.066s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "CDP layout observed CLS 0.049 and Lighthouse measured 0.068, both in the good range.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse measured LCP 4.2s, Speed Index 7.5s, TBT 350ms and Time to Interactive 25.8s; the CDP trace independently measured FCP/LCP 4.066s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The HAR recorded 194 requests and 5,404,121 transferred bytes: 3.58MB images and 1.48MB scripts. Forty below-fold images were not lazy-loaded.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse estimated 773KiB unused JavaScript and 98KiB unused CSS; individual chunks were 52% to 85% unused and duplicate GTM/gtag payloads total about 304KB transferred.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse failed button-name, link-name and label: orientation/cart/close controls and many thumbnail/profile links have no accessible text; image inspection also reported 62 images without alt values.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse measured 2.42:1 for white text on the #00bd8f age-verification banner and 4.04:1 for small discount/notification badges, below WCAG minimums.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse found no main landmark and invalid heading order; the platform probe found zero main/nav/header landmarks and several primary controls with outline:none.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/accessibility-platform-probe.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Across desktop, narrow and forced-color screenshots body text uses readable sizing/spacing and remains visible; primary issue is contrast rather than clipping of text itself.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-forced-colors.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse found user-scalable=0/maximum-scale=1 in the mobile viewport metadata; narrow evidence also shows clipped content and undersized targets.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Lighthouse errors-in-console scored 1 with no logged browser errors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The image audit found 8 images without width/height, creating avoidable instability risk despite overall CLS remaining in the good range.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse reports Cache-Control: no-store plus cookie modification as an actionable BFCache blocker.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Homepage, category, detail and join probes all expose descriptive titles and meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/detail-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Lighthouse found href=\"javascript:void(0)\" controls and unnamed links; mobile viewport metadata also prevents scaling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-recon.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Browser navigation to /sitemap.xml returned a plain 404 while robots.txt contains no visible Sitemap directive; canonical and hreflang signals are otherwise present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/sitemap-browser.json",
        "evidence/robots-browser.json",
        "evidence/home-recon.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Probes found zero JSON-LD blocks on the homepage/category and representative video detail; the captured metadata also contains no Open Graph/Twitter preview tags.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/detail-probe.json",
        "evidence/categories-probe.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Eight of 12 cookies lacked Secure, several use SameSite=None, and analytics cookies last 400 days. CSP allows unsafe-inline and unsafe-eval; nosniff and Referrer-Policy are absent.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-cookies.json",
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The tracker probe found 14 third-party origins and Google Tag Manager; HAR attributes 191/194 requests and 5.30MB to third-party origins, including two analytics scripts before consent is resolved.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "No permission prompt fired on load; sign-in is delegated to a passwordless xHamster continuation rather than exposing a password-only form.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-mobile.png"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Permissions-Policy grants camera and multiple sensors to all origins; CSP is broad with wildcard/http sources and unsafe script execution, while Referrer-Policy and nosniff are missing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Discoverability fetch found 92% raw/rendered content coverage, title/H1/description in raw HTML and no empty JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The join capture simultaneously shows sign-in and cookie surfaces, each competing for focus and viewport space rather than one coordinated top-layer state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-mobile.png"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "This streamed-media service is intrinsically online; installability/offline playback was judged out of scope, while progressive enhancement was still tested.",
      "reason": "This streamed-media service is intrinsically online; installability/offline playback was judged out of scope, while progressive enhancement was still tested."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "The tested invalid route renders a useful error message with Homepage/back recovery instead of a blank shell or infinite spinner.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Rendered English content has html lang=en, and the document publishes extensive hreflang alternates for localized variants.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "The join page rendered GBP pricing for the detected GB context and the application payload exposes locale/language dictionaries rather than one hard-coded currency.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "No event scheduling or time-zone-sensitive date/time surface appears on the representative public paths.",
      "reason": "No event scheduling or time-zone-sensitive date/time surface appears on the representative public paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Consent presents Accept, Reject and Manage choices with comparable prominence; age verification explains purpose and available methods.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "No user-authored required form was exposed before external sign-in/payment; search has no validation state to exercise.",
      "reason": "No user-authored required form was exposed before external sign-in/payment; search has no validation state to exercise."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "The tested public search is not personal data and authentication is delegated passwordlessly; no address/payment/sign-up input fields were exposed.",
      "reason": "The tested public search is not personal data and authentication is delegated passwordlessly; no address/payment/sign-up input fields were exposed."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The join text exposes a “2-day trial” and price, but the terms probe found no user-visible renewal/cancellation copy or cancellation/terms link, only Privacy Policy, before the CTA area.",
      "pathIds": [
        "join"
      ],
      "artifacts": [
        "evidence/join-probe.json",
        "evidence/join-terms-probe.json",
        "evidence/join-mobile.png"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "Image inspection found 100 images, 40 below-fold images not lazy-loaded, 32 oversized assets and 71 legacy-format URL classifications; images transferred 3.58MB on initial load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "The page loads 159 image requests and 20 scripts, while Lighthouse estimates 773KiB unused JS and 98KiB unused CSS; 191 requests are third-party.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser/CDP/Lighthouse evidence on representative paths, interpreted against mapped guidance.",
      "evidence": "HAR reports 5.30MB of 5.40MB transferred from third-party origins; media/CDN images dominate bytes and analytics contributes roughly 304KB of script.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trackers.json"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "No declared agent-facing surface was found and this emerging capability is not required for the public media catalog.",
      "reason": "No declared agent-facing surface was found and this emerging capability is not required for the public media catalog."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction reconnaissance.",
      "evidence": "No user task on the tested public catalog requires on-device inference; absence is not a failure for this emerging contextual check.",
      "reason": "No user task on the tested public catalog requires on-device inference; absence is not a failure for this emerging contextual check."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "After 10 bottom/top scroll cycles in one page, DOM nodes stayed at 6,902 and used heap rose only 48,201 bytes; independent heap summaries differed by about 0.6%.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/memory-metrics.json",
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Heap summary measured about 43.0MB for a media-heavy page with 6,902 DOM elements, proportionate to the rendered catalog surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual/DOM/evaluate evidence across the representative path set.",
      "evidence": "Before/post heap summaries contain no Detached constructor entries; repeated-scroll DOM node count remained exactly 6,902.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F20",
        "F21",
        "F22"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F28",
        "F29",
        "F30"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "All checks were judged not applicable for this site’s tested public surfaces: No declared agent-facing surface was found and this emerging capability is not required for the public media catalog. No user task on the tested public catalog requires on-device inference; absence is not a failure for this emerging contextual check."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary video-listing template; desktop, narrow viewport, theme/contrast preferences, network, performance, accessibility and crawler states.",
      "url": "https://hi.faphouse2.com/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "forced-colors: active",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "categories",
      "description": "Category-index archetype representing browse/navigation into the catalog.",
      "url": "https://hi.faphouse2.com/categories",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "detail",
      "description": "Representative video-detail and paywall surface, selected from the homepage.",
      "url": "https://hi.faphouse2.com/videos/innocent-lustful-girl-BqZmM2",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Search-results and filtering archetype for the find-content journey.",
      "url": "https://hi.faphouse2.com/search/videos?q=test",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "join",
      "description": "Membership/pricing surface representing the commercial conversion journey; no purchase or external identity verification was submitted.",
      "url": "https://hi.faphouse2.com/join",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "error",
      "description": "Invalid URL used to inspect HTTP/application error messaging and recovery.",
      "url": "https://hi.faphouse2.com/definitely-not-a-page-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "low",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "summary": "The theme does not follow the user color-scheme preference",
      "evidence": "Dark-emulated and default screenshots are pixel-identical (both 108,316 bytes), computed html color-scheme is normal, and no color-scheme metadata is present.",
      "suggestedFix": "Declare light dark support at the root and map surface/text tokens through light-dark() or prefers-color-scheme.",
      "effort": "small",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F02",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "summary": "Route and paywall state changes use abrupt swaps",
      "evidence": "The CSS/media probe found no view-transition rules; the detail-page screenshot shows the paywall as an abrupt overlay state.",
      "suggestedFix": "Use same-document or cross-document View Transitions for route and paywall state changes, with reduced-motion handling.",
      "effort": "medium",
      "artifacts": [
        "evidence/motion-css-probe.json",
        "evidence/detail-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "summary": "Long-page navigation does not adapt to scroll state",
      "evidence": "The homepage is over 21,000 CSS pixels tall, while CSS inspection found no scroll-state query or scroll timeline and the mobile header occupies substantial fixed chrome.",
      "suggestedFix": "Make sticky navigation respond to scroll state, for example by shrinking after scrolling while preserving access.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/motion-css-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F04",
      "severity": "high",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "summary": "Stacked on-load overlays obscure primary content and commercial choices",
      "evidence": "The join mobile screenshot shows an unsolicited xHamster sign-in panel stacked above a cookie panel that covers most of the viewport; the detail screenshot is dominated by a paywall overlay.",
      "suggestedFix": "Sequence necessary consent, authentication and paywall UI; show one focused, dismissible layer at a time and do not open sign-in before user intent.",
      "effort": "medium",
      "artifacts": [
        "evidence/join-mobile.png",
        "evidence/detail-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F05",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "summary": "Modal surfaces are built without dialog semantics",
      "evidence": "DOM inspection found no <dialog> or role=dialog despite the cookie, sign-in and paywall modal surfaces shown in screenshots.",
      "suggestedFix": "Use <dialog> for modal flows and popover for transient UI, including focus trapping, Escape handling and light-dismiss where appropriate.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/join-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "overflow-clipping-control",
      "summary": "Top chrome crowds the mobile content area",
      "evidence": "On 360px captures, age verification, external links, branding and horizontal navigation consume roughly the first 268px before content; controls and labels are visibly clipped at the right edge.",
      "suggestedFix": "Collapse secondary navigation and promotions into a compact mobile pattern, keeping the primary content/action in the first viewport.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/categories-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "css-layout",
      "summary": "Narrow layouts overflow and clip content",
      "evidence": "At viewport 360x800 the layout primitive reported scrollWidth 769 versus visual viewport 360, 409px of horizontal overflow; search filters, cards and top actions are visibly cut off.",
      "suggestedFix": "Use intrinsic grid/flex sizing, min-width:0 and width:100%/max-width constraints; ensure the mobile response is selected without relying on brittle UA behavior.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/search-mobile.png",
        "evidence/categories-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "summary": "Reused components do not adapt to available container width",
      "evidence": "The CSS probe found no @container rules, while category cards and search controls are clipped in narrow captures.",
      "suggestedFix": "Give reusable card/filter/navigation components containment and size-aware container-query layouts, with intrinsic fallbacks.",
      "effort": "medium",
      "artifacts": [
        "evidence/motion-css-probe.json",
        "evidence/categories-mobile.png",
        "evidence/search-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "summary": "Focus indication and target sizing are inadequate",
      "evidence": "The focus probe found key buttons, sign-in/join links and search input with outline:none; Lighthouse also failed target-size, including 16px-high creator links.",
      "suggestedFix": "Add clear :focus-visible styles and make interactive hit areas at least 24x24 CSS px with adequate spacing (preferably larger for primary touch actions).",
      "effort": "small",
      "artifacts": [
        "evidence/accessibility-platform-probe.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "summary": "The membership journey is obstructed before a user can review and act",
      "evidence": "On /join, sign-in and cookie overlays stack over plan choices; the screenshot leaves pricing and the membership CTA partially hidden, adding avoidable detours to the primary flow.",
      "suggestedFix": "Wait for explicit sign-in intent, resolve consent in a single layer, then keep plan, renewal terms and CTA together in an unobstructed sequence.",
      "effort": "medium",
      "artifacts": [
        "evidence/join-mobile.png",
        "evidence/join-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "summary": "Loading is slow on the measured mobile run",
      "evidence": "Lighthouse measured LCP 4.2s, Speed Index 7.5s, TBT 350ms and Time to Interactive 25.8s; the CDP trace independently measured FCP/LCP 4.066s.",
      "suggestedFix": "Prioritize the LCP asset, reduce initial script/style work, and defer below-fold and consent/auth code until needed.",
      "effort": "large",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "summary": "The initial page load is excessively heavy",
      "evidence": "The HAR recorded 194 requests and 5,404,121 transferred bytes: 3.58MB images and 1.48MB scripts. Forty below-fold images were not lazy-loaded.",
      "suggestedFix": "Lazy-load below-fold media, reduce initial result count, right-size assets and gate non-critical scripts behind interaction or idle time.",
      "effort": "large",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-images.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "summary": "Large amounts of unused JavaScript and CSS ship on first load",
      "evidence": "Lighthouse estimated 773KiB unused JavaScript and 98KiB unused CSS; individual chunks were 52% to 85% unused and duplicate GTM/gtag payloads total about 304KB transferred.",
      "suggestedFix": "Split bundles by route/feature, load consent/auth/paywall code conditionally, and consolidate analytics initialization.",
      "effort": "large",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "summary": "Multiple controls and links lack accessible names",
      "evidence": "Lighthouse failed button-name, link-name and label: orientation/cart/close controls and many thumbnail/profile links have no accessible text; image inspection also reported 62 images without alt values.",
      "suggestedFix": "Use semantic buttons/anchors and provide concise accessible names; give meaningful images descriptive alt and decorative images empty alt.",
      "effort": "medium",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-images.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "summary": "Age-verification and badge text fail minimum contrast",
      "evidence": "Lighthouse measured 2.42:1 for white text on the #00bd8f age-verification banner and 4.04:1 for small discount/notification badges, below WCAG minimums.",
      "suggestedFix": "Darken or replace the green/red tokens so all text and essential UI meet WCAG AA contrast in every state.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-desktop.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F16",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "summary": "Landmarks, heading order and focus treatment are not robust",
      "evidence": "Lighthouse found no main landmark and invalid heading order; the platform probe found zero main/nav/header landmarks and several primary controls with outline:none.",
      "suggestedFix": "Introduce semantic header/nav/main/footer landmarks, repair heading hierarchy, and preserve a visible ordered focus path through overlays and content.",
      "effort": "medium",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/accessibility-platform-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "summary": "Mobile zoom is disabled and content does not reflow cleanly",
      "evidence": "Lighthouse found user-scalable=0/maximum-scale=1 in the mobile viewport metadata; narrow evidence also shows clipped content and undersized targets.",
      "suggestedFix": "Remove maximum-scale and user-scalable restrictions, then verify 200% zoom/reflow and touch target spacing.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F18",
      "severity": "low",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "summary": "Several images omit intrinsic dimensions",
      "evidence": "The image audit found 8 images without width/height, creating avoidable instability risk despite overall CLS remaining in the good range.",
      "suggestedFix": "Set intrinsic width/height or aspect-ratio on all imagery and preserve the intended ratio responsively.",
      "effort": "small",
      "artifacts": [
        "evidence/home-images.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F19",
      "severity": "low",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "summary": "The page is not eligible for the back/forward cache",
      "evidence": "Lighthouse reports Cache-Control: no-store plus cookie modification as an actionable BFCache blocker.",
      "suggestedFix": "Avoid no-store on public catalog pages where possible and update session state in a BFCache-compatible way.",
      "effort": "medium",
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "summary": "Some interactive links are not crawlable",
      "evidence": "Lighthouse found href=\"javascript:void(0)\" controls and unnamed links; mobile viewport metadata also prevents scaling.",
      "suggestedFix": "Use <button> for actions and real href URLs for navigation, with descriptive accessible link text.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-recon.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F21",
      "severity": "low",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "summary": "No sitemap is exposed at the conventional URL",
      "evidence": "Browser navigation to /sitemap.xml returned a plain 404 while robots.txt contains no visible Sitemap directive; canonical and hreflang signals are otherwise present.",
      "suggestedFix": "Publish a sitemap index and reference it from robots.txt, ensuring mirror-domain canonicals and hreflang URLs stay consistent.",
      "effort": "small",
      "artifacts": [
        "evidence/sitemap-browser.json",
        "evidence/robots-browser.json",
        "evidence/home-recon.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "summary": "Rich listing and video pages lack structured entity metadata",
      "evidence": "Probes found zero JSON-LD blocks on the homepage/category and representative video detail; the captured metadata also contains no Open Graph/Twitter preview tags.",
      "suggestedFix": "Add accurate VideoObject/ItemList JSON-LD and Open Graph/Twitter metadata that matches visible titles, thumbnails and canonical URLs.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/detail-probe.json",
        "evidence/categories-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F23",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "summary": "Cookie and CSP protections are weaker than expected",
      "evidence": "Eight of 12 cookies lacked Secure, several use SameSite=None, and analytics cookies last 400 days. CSP allows unsafe-inline and unsafe-eval; nosniff and Referrer-Policy are absent.",
      "suggestedFix": "Mark all HTTPS cookies Secure, use the strictest workable SameSite/HttpOnly settings, remove unsafe CSP allowances via nonces/hashes, and add nosniff and a restrictive Referrer-Policy.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-cookies.json",
        "evidence/home-headers.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F24",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "summary": "Tracking and third-party delivery begin on the initial load",
      "evidence": "The tracker probe found 14 third-party origins and Google Tag Manager; HAR attributes 191/194 requests and 5.30MB to third-party origins, including two analytics scripts before consent is resolved.",
      "suggestedFix": "Block non-essential analytics until consent, reduce vendors/origins, batch necessary events, and document retention/purpose for every identifier.",
      "effort": "large",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F25",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "summary": "Browser-enforced defensive policies are overly permissive",
      "evidence": "Permissions-Policy grants camera and multiple sensors to all origins; CSP is broad with wildcard/http sources and unsafe script execution, while Referrer-Policy and nosniff are missing.",
      "suggestedFix": "Restrict Permissions-Policy to required self/origins, tighten default/script/connect/frame directives, and deploy CSP nonces/hashes plus Trusted Types where applicable.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F26",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "resilient-runtime-behaviour",
      "guidanceId": "declarative-dialog-popover-control",
      "summary": "Overlapping top-layer UI creates a fragile runtime state",
      "evidence": "The join capture simultaneously shows sign-in and cookie surfaces, each competing for focus and viewport space rather than one coordinated top-layer state.",
      "suggestedFix": "Coordinate modal state in one controller and use native dialog/popover semantics so focus, stacking and dismissal remain predictable.",
      "effort": "medium",
      "artifacts": [
        "evidence/join-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F27",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "forms",
      "summary": "Renewal and cancellation commitments are not visible beside the trial choice",
      "evidence": "The join text exposes a “2-day trial” and price, but the terms probe found no user-visible renewal/cancellation copy or cancellation/terms link, only Privacy Policy, before the CTA area.",
      "suggestedFix": "Place recurring price, billing cadence, renewal date and cancellation route directly beside each trial CTA before sign-up.",
      "effort": "small",
      "artifacts": [
        "evidence/join-probe.json",
        "evidence/join-terms-probe.json",
        "evidence/join-mobile.png"
      ],
      "pathId": "join"
    },
    {
      "id": "F28",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "summary": "Media delivery is disproportionate and poorly deferred",
      "evidence": "Image inspection found 100 images, 40 below-fold images not lazy-loaded, 32 oversized assets and 71 legacy-format URL classifications; images transferred 3.58MB on initial load.",
      "suggestedFix": "Serve AVIF/WebP at display-appropriate sizes, lazy-load below-fold media, and avoid fetching duplicate hidden desktop/mobile assets.",
      "effort": "large",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F29",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "summary": "The initial page performs substantial work that does not serve the first viewport",
      "evidence": "The page loads 159 image requests and 20 scripts, while Lighthouse estimates 773KiB unused JS and 98KiB unused CSS; 191 requests are third-party.",
      "suggestedFix": "Fetch only first-viewport results initially, virtualize/defer the long feed, conditionally import feature code and postpone background/analytics work.",
      "effort": "large",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F30",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "summary": "Third-party and media cost dominates the page budget",
      "evidence": "HAR reports 5.30MB of 5.40MB transferred from third-party origins; media/CDN images dominate bytes and analytics contributes roughly 304KB of script.",
      "suggestedFix": "Set route-level media and third-party budgets, enforce lazy loading/caching, and remove or defer integrations that do not support the immediate task.",
      "effort": "large",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trackers.json"
      ],
      "pathId": "home"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Repair mobile reflow, zoom, focus and touch targets",
      "priority": 1,
      "findingIds": [
        "F07",
        "F08",
        "F09",
        "F17"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Sequence consent, sign-in and paywall into one accessible flow",
      "priority": 2,
      "findingIds": [
        "F04",
        "F05",
        "F10",
        "F26"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Cut initial media/script payload and improve LCP",
      "priority": 3,
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F28",
        "F29",
        "F30"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Add accessible names, landmarks, headings and contrast",
      "priority": 4,
      "findingIds": [
        "F14",
        "F15",
        "F16"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Tighten CSP, cookies, permissions and pre-consent tracking",
      "priority": 5,
      "findingIds": [
        "F23",
        "F24",
        "F25"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Show renewal/cancellation terms beside trial CTAs",
      "priority": 6,
      "findingIds": [
        "F27"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Use crawlable links, sitemap and rich metadata",
      "priority": 7,
      "findingIds": [
        "F20",
        "F21",
        "F22"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Adopt preference and navigation-state-aware UI",
      "priority": 8,
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T20-12-38-774Z"
}
