{
  "url": "https://faphouse.com",
  "auditedAt": "2026-07-20T03:39:25.599Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete model-driven audit of four representative templates plus sign-in and 404 recovery states.",
  "page": {
    "appType": "hybrid",
    "framework": "Server-rendered application with client-side overlays",
    "notes": "Public adult-media catalog with age verification, consent, search/listing, video detail, subscription, and account surfaces."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "light-dismiss-a-dialog",
    "fluid-scaling",
    "improve-text-layout-and-legibility",
    "performance",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "security",
    "privacy",
    "forms",
    "validate-input-after-interaction",
    "autofill-sign-in-form",
    "deliver-optimized-decorative-images",
    "webmcp",
    "manage-recurring-intervals"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/categories-desktop.png",
      "caption": "categories desktop"
    },
    {
      "type": "layout",
      "path": "evidence/categories-mobile-layout.json",
      "caption": "categories mobile layout"
    },
    {
      "type": "dom",
      "path": "evidence/categories-probe.json",
      "caption": "categories probe"
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-desktop.png",
      "caption": "detail desktop"
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-discoverability-crawler.png",
      "caption": "detail discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-discoverability-rendered.png",
      "caption": "detail discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/detail-discoverability.json",
      "caption": "detail discoverability"
    },
    {
      "type": "layout",
      "path": "evidence/detail-mobile-layout.json",
      "caption": "detail mobile layout"
    },
    {
      "type": "dom",
      "path": "evidence/focus-probe.json",
      "caption": "focus probe"
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "heap baseline"
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "heap post"
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark-reduced.png",
      "caption": "home dark reduced"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability"
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom"
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "home high contrast"
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images"
    },
    {
      "type": "lighthouse",
      "path": "evidence/home-lighthouse.json",
      "caption": "home lighthouse"
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile"
    },
    {
      "type": "other",
      "path": "evidence/home-preferences.json",
      "caption": "home preferences"
    },
    {
      "type": "dom",
      "path": "evidence/home-probe.json",
      "caption": "home probe"
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets"
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary"
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary"
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace"
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers"
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home"
    },
    {
      "type": "screenshot",
      "path": "evidence/join-desktop.png",
      "caption": "join desktop"
    },
    {
      "type": "layout",
      "path": "evidence/join-mobile-layout.json",
      "caption": "join mobile layout"
    },
    {
      "type": "dom",
      "path": "evidence/join-probe.json",
      "caption": "join probe"
    },
    {
      "type": "dom",
      "path": "evidence/not-found-probe.json",
      "caption": "not found probe"
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found.png",
      "caption": "not found"
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.json",
      "caption": "robots sitemap"
    },
    {
      "type": "screenshot",
      "path": "evidence/signin-desktop.png",
      "caption": "signin desktop"
    },
    {
      "type": "dom",
      "path": "evidence/signin-invalid-probe.json",
      "caption": "signin invalid probe"
    },
    {
      "type": "screenshot",
      "path": "evidence/signin-invalid.png",
      "caption": "signin invalid"
    },
    {
      "type": "dom",
      "path": "evidence/signin-probe.json",
      "caption": "signin probe"
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The preferences probe reports colorScheme \"normal\" and no prefers-color-scheme/color-scheme CSS; the dark-emulation screenshot is visually identical to the default screenshot.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark-reduced.png",
        "evidence/home-preferences.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Rendered CSS inspection found no prefers-reduced-motion rule, while the UI CSS contains 100–200ms transitions and fade/transform animations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dark-reduced.png"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Forced-colors/prefers-contrast screenshot preserves text, controls, outlines, and navigation legibility.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-high-contrast.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Rendered stylesheet inspection found no view-transition usage; the sign-in and detail states appear as custom overlays.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/signin-desktop.png",
        "evidence/detail-desktop.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No scroll-linked animation is present, so implementation choice is not applicable.",
      "reason": "No scroll-linked animation is present, so implementation choice is not applicable."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No swipe, pull, carousel, or other gesture-driven control was found on the representative guest paths.",
      "reason": "No swipe, pull, carousel, or other gesture-driven control was found on the representative guest paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The homepage content is over 21,000 CSS pixels tall, while rendered CSS contains no scroll-state query, scroll timeline, or progress affordance.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No tooltip or viewport-edge anchored explanatory overlay was observed; modal dialogs are judged separately.",
      "reason": "No tooltip or viewport-edge anchored explanatory overlay was observed; modal dialogs are judged separately."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Active navigation uses a visible yellow underline and the categories page labels its current section and sorting state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/categories-desktop.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The detail screenshot shows a subscription modal over dimmed video content, a cookie modal over that modal, and an age-verification bar above both.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/detail-desktop.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Rendered DOM reports zero dialog, popover, and details elements despite visible sign-in, consent, and subscription overlays.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/signin-desktop.png",
        "evidence/detail-desktop.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The detail screenshot shows a subscription modal over dimmed video content, a cookie modal over that modal, and an age-verification bar above both.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/detail-desktop.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Layout captures for home, categories, and video detail each report scrollWidth/innerWidth 769 against a 360px visual viewport, producing 409px horizontal overflow. Join is the only tested template without overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/detail-mobile-layout.json",
        "evidence/categories-mobile-layout.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Rendered CSS inspection found no @container rules, and three content templates retain a 769px layout at a 360px visual viewport.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/categories-mobile-layout.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The focus probe reports outline:none on Start verification, search, notifications, cart, Sign in, Join now, and other controls. Lighthouse found 137 target-size failures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/focus-probe.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Homepage and categories H1/copy clearly identify full-length videos and category browsing; video cards have descriptive destination text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/categories-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Opening a video detail automatically shows the membership chooser, with the cookie prompt layered above it and age verification still present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/detail-desktop.png"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "After dismissing cookies and activating Sign in with empty fields, the probe found no :invalid elements, aria-invalid state, alert, or live-region message.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/signin-invalid.png",
        "evidence/signin-invalid-probe.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse measured LCP 4.0s, TBT 360ms, and Speed Index 6.2s. The trace measured FCP/LCP 4.37s. Detail and join mobile layouts observed CLS 0.239 and 0.221.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/detail-mobile-layout.json",
        "evidence/join-mobile-layout.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse measured LCP 4.0s, TBT 360ms, and Speed Index 6.2s. The trace measured FCP/LCP 4.37s. Detail and join mobile layouts observed CLS 0.239 and 0.221.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/detail-mobile-layout.json",
        "evidence/join-mobile-layout.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse measured LCP 4.0s, TBT 360ms, and Speed Index 6.2s. The trace measured FCP/LCP 4.37s. Detail and join mobile layouts observed CLS 0.239 and 0.221.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/detail-mobile-layout.json",
        "evidence/join-mobile-layout.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "HAR summary reports 4,980,826 transferred bytes, including 3,152,223 image bytes and 1,476,567 script bytes; Lighthouse estimates 778 KiB image savings and 1,370ms render-blocking savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-lighthouse.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse estimates 773 KiB unused JavaScript and 98 KiB unused CSS; Google Tag Manager alone transfers about 304 KiB across two scripts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse found 3 unnamed buttons, 132 unnamed links, and an unlabeled VR checkbox; DOM inspection found no main landmark and hundreds of unnamed visible controls/links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse found seven contrast failures, including white/green age-verification text at 2.42:1 and discount badges at 4.04:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The page has two H1 elements, skips to H4 for age verification/footer headings, has no main/nav/header/footer landmarks in the rendered probe, and removes focus outlines on primary controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/focus-probe.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Screenshots show readable card titles and body copy with no text clipping at the tested desktop condition; failures are covered by contrast/reflow checks.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/categories-desktop.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse captured user-scalable=0 with maximum-scale=1.0, 137 undersized targets, and the layout primitive measured 409px overflow at 360px on three core templates.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-mobile-layout.json",
        "evidence/detail-mobile-layout.json",
        "evidence/categories-mobile-layout.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Lighthouse errors-in-console audit scored 1 with zero error items.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The image audit found 8 images without dimensions, 32 oversized images, 40 below-fold images without lazy loading, and 73 legacy-format images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse reports BFCache blocked by Cache-Control: no-store after cookie modification and Cookie issues in DevTools; the best-practices score is 0.77.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Home, categories, and detail expose descriptive titles; probes/discoverability confirm a meta description in raw HTML.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/detail-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Lighthouse found javascript:void(0) anchors and a failing crawlable-anchors audit; the viewport disables scaling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The probe found a correct canonical and crawlable robots.txt, while /sitemap.xml returned HTTP 404.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/robots-sitemap.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Rendered probe found zero JSON-LD blocks and zero Open Graph properties, despite video detail and catalog entities that qualify for VideoObject/Breadcrumb metadata.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/detail-discoverability.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Nine of 13 cookies lack Secure; several use SameSite=None. CSP allows unsafe-inline and unsafe-eval. X-Content-Type-Options is absent.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Tracker/HAR capture recorded 11 third-party origins, 185 third-party requests, 4.88 MB third-party transfer, and Google Tag Manager. Google analytics cookies are set for 400 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The sign-in state exposes email/password, xHamster, and Google choices; rendered code inspection found no WebAuthn/passkey surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/signin-desktop.png",
        "evidence/signin-probe.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Referrer-Policy is absent; Permissions-Policy grants camera, fullscreen, accelerometer, gyroscope, and magnetometer to all origins; CSP is broadly permissive though HSTS and frame protections are present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Discoverability reports 80% raw/rendered word coverage on home and 94% on detail, with title, H1, and description present without JavaScript.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/detail-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "The video detail screenshot shows subscription and cookie modals simultaneously, with the age banner also active; the DOM uses no native top-layer primitives.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/detail-desktop.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "This media catalog and authenticated streaming service is intrinsically online; installability/offline playback was not inferred as product intent.",
      "reason": "This media catalog and authenticated streaming service is intrinsically online; installability/offline playback was not inferred as product intent."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "A nonexistent route renders “This page doesn’t exist,” explains recovery, and links to Homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/not-found.png",
        "evidence/not-found-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "html lang=\"en\" is present, but dir is absent and rendered CSS inspection found no logical margin/padding/inset/size properties.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "The tested join route renders localized GBP prices consistently and exposes a locale preference; no malformed hand-built date/number strings were observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No event date/time or recurring schedule was present on the tested guest paths.",
      "reason": "No event date/time or recurring schedule was present on the tested guest paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Consent presents Reject and Accept as equal-size primary choices; join pricing and durations are visible, and cancellation is stated.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/join-desktop.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Blank submission yielded no required validity state, aria-invalid attribute, alert, or live-region message.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/signin-invalid.png",
        "evidence/signin-invalid-probe.json"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Username/email uses autocomplete=\"email\" rather than username, and password inputs expose no autocomplete token.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/signin-probe.json"
      ],
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Join page clearly shows trial/monthly/lifetime prices and plan benefits before continuation, while sign-in offers password recovery and federated choices.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/join-desktop.png",
        "evidence/signin-desktop.png"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "Image audit found 32 oversized images, 73 legacy-format images, and 40 below-fold images without lazy loading; Lighthouse estimates 778 KiB image savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "HAR reports 4.88 MB and 185 requests from third-party origins; 151 images transfer 3.15 MB and scripts transfer 1.48 MB on the initial listing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-trackers.json"
      ],
      "findingIds": [
        "F33"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Cross-modal evidence review against the pinned guidance",
      "evidence": "HAR reports 4.88 MB and 185 requests from third-party origins; 151 images transfer 3.15 MB and scripts transfer 1.48 MB on the initial listing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-trackers.json"
      ],
      "findingIds": [
        "F33"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No declared agent-facing product surface; emerging WebMCP capability is not expected for this audited scope.",
      "reason": "No declared agent-facing product surface; emerging WebMCP capability is not expected for this audited scope."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No summarisation or language-model task was present where on-device inference would clearly improve the tested journeys.",
      "reason": "No summarisation or language-model task was present where on-device inference would clearly improve the tested journeys."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "After 10 sign-in open/back cycles, heap grew 2.63 MB (5.9%); this bounded one-run delta is not direct evidence of unbounded retained growth.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct visual, DOM, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Heap summary reports about 44.7 MB baseline for a media-rich listing; large but proportionate, with no runaway constructor dominating.",
      "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, evaluate, Lighthouse, or primitive evidence review",
      "evidence": "Neither summary lists Detached* constructors among dominant populations; no unbounded listener/timer growth was directly observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "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",
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16",
        "F17",
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21",
        "F22",
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F24",
        "F25",
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F30",
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F32",
        "F33"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The audited guest journeys have no declared or evident agent-facing capability or on-device inference use case."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage listing and global chrome; represents primary discovery, consent, age verification, preferences, mobile reflow, performance, privacy, and accessibility.",
      "url": "https://faphouse.com/",
      "conditions": [
        "desktop",
        "360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "forced-colors: active",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "detail",
      "description": "Representative video-detail/watch journey; covers media presentation, entitlement interruption, overlays, CLS, and raw-HTML discoverability.",
      "url": "https://faphouse.com/videos/dick-pov-taboo-na1A86",
      "conditions": [
        "desktop",
        "360x800",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    },
    {
      "id": "categories",
      "description": "Distinct category/index template; covers catalog navigation, content hierarchy, and mobile reflow.",
      "url": "https://faphouse.com/categories",
      "conditions": [
        "desktop",
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "join",
      "description": "Membership selection template; covers pricing, commitments, commercial clarity, and responsive layout.",
      "url": "https://faphouse.com/join",
      "conditions": [
        "desktop",
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "signin",
      "description": "Hash-routed sign-in modal and blank-submission interaction; covers authentication, autofill, labels, validation, and recovery.",
      "url": "https://faphouse.com/#signin",
      "conditions": [
        "desktop",
        "blank form submission"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Representative unknown route; covers HTTP/runtime failure messaging and recovery.",
      "url": "https://faphouse.com/definitely-not-a-real-page",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "The site imposes one dark theme instead of following the user’s color-scheme preference.",
      "evidence": "The preferences probe reports colorScheme \"normal\" and no prefers-color-scheme/color-scheme CSS; the dark-emulation screenshot is visually identical to the default screenshot.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark-reduced.png",
        "evidence/home-preferences.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Declare color-scheme and provide preference-driven light/dark tokens with prefers-color-scheme or light-dark(), while retaining the current dark palette as one option.",
      "effort": "medium"
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Motion is not adapted for users who request reduced motion.",
      "evidence": "Rendered CSS inspection found no prefers-reduced-motion rule, while the UI CSS contains 100–200ms transitions and fade/transform animations.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dark-reduced.png"
      ],
      "suggestedFix": "Add a prefers-reduced-motion: reduce layer that removes non-essential transforms, fades, and auto-advance while preserving state feedback.",
      "effort": "small"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "accessibility",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Route and modal state changes use abrupt custom swaps without View Transitions.",
      "evidence": "Rendered stylesheet inspection found no view-transition usage; the sign-in and detail states appear as custom overlays.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/signin-desktop.png",
        "evidence/detail-desktop.png"
      ],
      "suggestedFix": "Use same-document View Transitions for modal/state changes and cross-document transitions for compatible route changes, with reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "severity": "medium",
      "confidence": "medium",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "improve-text-layout-and-legibility",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Long listing pages provide static navigation chrome without scroll-state or progress feedback.",
      "evidence": "The homepage content is over 21,000 CSS pixels tall, while rendered CSS contains no scroll-state query, scroll timeline, or progress affordance.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Add a compact sticky header that responds to scroll direction/state and an unobtrusive progress or back-to-top affordance on long listings.",
      "effort": "medium"
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "detail",
      "url": "https://faphouse.com/videos/dick-pov-taboo-na1A86",
      "summary": "Stacked consent, age-verification, and subscription layers obscure primary content on entry.",
      "evidence": "The detail screenshot shows a subscription modal over dimmed video content, a cookie modal over that modal, and an age-verification bar above both.",
      "artifacts": [
        "evidence/detail-desktop.png",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Sequence mandatory notices instead of stacking them, defer subscription promotion until intent is shown, and guarantee an immediate, obvious dismiss path.",
      "effort": "medium"
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "signin",
      "url": "https://faphouse.com/#signin",
      "summary": "Modal and transient UI are implemented as custom containers instead of semantic dialog/popover primitives.",
      "evidence": "Rendered DOM reports zero dialog, popover, and details elements despite visible sign-in, consent, and subscription overlays.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/signin-desktop.png",
        "evidence/detail-desktop.png"
      ],
      "suggestedFix": "Use <dialog> for modal flows and popover for transient menus, including native focus management, Escape handling, and light dismiss where appropriate.",
      "effort": "large"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Core content routes render a 769px layout into a 360px viewport.",
      "evidence": "Layout captures for home, categories, and video detail each report scrollWidth/innerWidth 769 against a 360px visual viewport, producing 409px horizontal overflow. Join is the only tested template without overflow.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/detail-mobile-layout.json",
        "evidence/categories-mobile-layout.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Remove the desktop minimum width, size grids and navigation intrinsically, and test all content templates at 320–400px widths.",
      "effort": "large"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "pathId": "categories",
      "url": "https://faphouse.com/categories",
      "summary": "Reusable content components rely on global layout rules and do not adapt to their containers.",
      "evidence": "Rendered CSS inspection found no @container rules, and three content templates retain a 769px layout at a 360px visual viewport.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/categories-mobile-layout.json"
      ],
      "suggestedFix": "Give reusable cards/navigation components containment and use container queries plus intrinsic sizing so they adapt where embedded.",
      "effort": "large"
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Keyboard focus disappears on important controls and many touch targets are undersized.",
      "evidence": "The focus probe reports outline:none on Start verification, search, notifications, cart, Sign in, Join now, and other controls. Lighthouse found 137 target-size failures.",
      "artifacts": [
        "evidence/focus-probe.json",
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Add a high-contrast :focus-visible treatment and provide at least 24×24 CSS-pixel targets with adequate spacing, preferably 44×44 for primary mobile controls.",
      "effort": "medium"
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "pathId": "detail",
      "url": "https://faphouse.com/videos/dick-pov-taboo-na1A86",
      "summary": "The representative watch flow is interrupted before the user can evaluate or play the selected content.",
      "evidence": "Opening a video detail automatically shows the membership chooser, with the cookie prompt layered above it and age verification still present.",
      "artifacts": [
        "evidence/detail-desktop.png"
      ],
      "suggestedFix": "Let users reach a stable detail/player state first; present age gating once, consent once, and membership requirements at the moment playback entitlement is needed.",
      "effort": "large"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "validate-input-after-interaction",
      "guidanceCategory": "forms",
      "pathId": "signin",
      "url": "https://faphouse.com/#signin",
      "summary": "Blank sign-in submission produces no visible or programmatic validation state.",
      "evidence": "After dismissing cookies and activating Sign in with empty fields, the probe found no :invalid elements, aria-invalid state, alert, or live-region message.",
      "artifacts": [
        "evidence/signin-invalid.png",
        "evidence/signin-invalid-probe.json"
      ],
      "suggestedFix": "Mark required fields, validate after attempted submission, move focus to the first invalid field, and announce concise recovery guidance in a live region.",
      "effort": "small"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Load performance is slow and key templates shift substantially.",
      "evidence": "Lighthouse measured LCP 4.0s, TBT 360ms, and Speed Index 6.2s. The trace measured FCP/LCP 4.37s. Detail and join mobile layouts observed CLS 0.239 and 0.221.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/detail-mobile-layout.json",
        "evidence/join-mobile-layout.json"
      ],
      "suggestedFix": "Prioritize the LCP asset, reserve overlay/media space, defer non-critical work, and establish per-template LCP/CLS budgets.",
      "effort": "large"
    },
    {
      "id": "F13",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "The homepage transfers about 5 MB across 188 requests, with avoidable image and render-blocking cost.",
      "evidence": "HAR summary reports 4,980,826 transferred bytes, including 3,152,223 image bytes and 1,476,567 script bytes; Lighthouse estimates 778 KiB image savings and 1,370ms render-blocking savings.",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-lighthouse.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Prioritize only the true LCP image, lazy-load below-fold media, right-size/modernize thumbnails, and shorten critical CSS/resource chains.",
      "effort": "large"
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Large amounts of shipped CSS and JavaScript are unused on initial load.",
      "evidence": "Lighthouse estimates 773 KiB unused JavaScript and 98 KiB unused CSS; Google Tag Manager alone transfers about 304 KiB across two scripts.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Split bundles by route/feature, remove duplicate analytics bootstraps, and load consented third-party code only when needed.",
      "effort": "large"
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Many controls and links lack accessible names, and form controls lack labels.",
      "evidence": "Lighthouse found 3 unnamed buttons, 132 unnamed links, and an unlabeled VR checkbox; DOM inspection found no main landmark and hundreds of unnamed visible controls/links.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Name icon-only controls, label all inputs, remove empty focusable links, use native button semantics, and add a main landmark.",
      "effort": "large"
    },
    {
      "id": "F16",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Age-verification and promotional text fail WCAG contrast minimums.",
      "evidence": "Lighthouse found seven contrast failures, including white/green age-verification text at 2.42:1 and discount badges at 4.04:1.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Darken the green and red surfaces or adjust foreground colors so normal text reaches 4.5:1 and large text reaches 3:1.",
      "effort": "small"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Heading, landmark, and focus structure is not reliable for keyboard and assistive-technology users.",
      "evidence": "The page has two H1 elements, skips to H4 for age verification/footer headings, has no main/nav/header/footer landmarks in the rendered probe, and removes focus outlines on primary controls.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/focus-probe.json",
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Use one page H1, a logical heading hierarchy and semantic landmarks; preserve visible focus for every interactive element and trap/restore focus in dialogs.",
      "effort": "large"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "The production viewport disables zoom and core templates fail narrow-screen reflow.",
      "evidence": "Lighthouse captured user-scalable=0 with maximum-scale=1.0, 137 undersized targets, and the layout primitive measured 409px overflow at 360px on three core templates.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-mobile-layout.json",
        "evidence/detail-mobile-layout.json",
        "evidence/categories-mobile-layout.json"
      ],
      "suggestedFix": "Remove user-scalable/max-scale restrictions, fix intrinsic reflow, and enlarge/space touch targets.",
      "effort": "large"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Image sizing and delivery are inconsistent despite a valid document shell.",
      "evidence": "The image audit found 8 images without dimensions, 32 oversized images, 40 below-fold images without lazy loading, and 73 legacy-format images.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Emit width/height or aspect-ratio for every image, generate correctly sized modern-format variants, and lazy-load non-critical media.",
      "effort": "large"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Browser platform diagnostics show avoidable lifecycle and cookie issues.",
      "evidence": "Lighthouse reports BFCache blocked by Cache-Control: no-store after cookie modification and Cookie issues in DevTools; the best-practices score is 0.77.",
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Review no-store usage so safe pages can use BFCache and resolve browser cookie diagnostics without weakening account privacy.",
      "effort": "medium"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Some navigation controls are uncrawlable and the mobile viewport policy is hostile to users.",
      "evidence": "Lighthouse found javascript:void(0) anchors and a failing crawlable-anchors audit; the viewport disables scaling.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Use buttons for actions, real hrefs for destinations, and a scalable mobile viewport.",
      "effort": "small"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Canonical and robots signals are present, but the conventional sitemap endpoint returns 404.",
      "evidence": "The probe found a correct canonical and crawlable robots.txt, while /sitemap.xml returned HTTP 404.",
      "artifacts": [
        "evidence/robots-sitemap.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Publish a sitemap index at /sitemap.xml (or advertise its actual location in robots.txt) and keep it aligned with canonical public routes.",
      "effort": "small"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "detail",
      "url": "https://faphouse.com/videos/dick-pov-taboo-na1A86",
      "summary": "Rich video pages do not expose structured or social-preview metadata.",
      "evidence": "Rendered probe found zero JSON-LD blocks and zero Open Graph properties, despite video detail and catalog entities that qualify for VideoObject/Breadcrumb metadata.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/detail-discoverability.json"
      ],
      "suggestedFix": "Add accurate VideoObject, BreadcrumbList, and organization JSON-LD plus Open Graph/Twitter metadata matching visible content.",
      "effort": "medium"
    },
    {
      "id": "F24",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Transport is HTTPS, but cookie and CSP settings leave avoidable exposure.",
      "evidence": "Nine of 13 cookies lack Secure; several use SameSite=None. CSP allows unsafe-inline and unsafe-eval. X-Content-Type-Options is absent.",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "suggestedFix": "Mark all HTTPS cookies Secure, use the strictest workable SameSite setting, remove CSP unsafe-eval/unsafe-inline via nonces or hashes, and send nosniff.",
      "effort": "large"
    },
    {
      "id": "F25",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "A sensitive-content page makes a large third-party and analytics footprint before consent is resolved.",
      "evidence": "Tracker/HAR capture recorded 11 third-party origins, 185 third-party requests, 4.88 MB third-party transfer, and Google Tag Manager. Google analytics cookies are set for 400 days.",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-cookies.json"
      ],
      "suggestedFix": "Block non-essential analytics until consent, minimize identifiers and retention, consolidate requests, and self-host or remove third parties that do not add user value.",
      "effort": "large"
    },
    {
      "id": "F26",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "signin",
      "url": "https://faphouse.com/#signin",
      "summary": "Authentication offers passwords and federated identity but no phishing-resistant passkey path.",
      "evidence": "The sign-in state exposes email/password, xHamster, and Google choices; rendered code inspection found no WebAuthn/passkey surface.",
      "artifacts": [
        "evidence/signin-desktop.png",
        "evidence/signin-probe.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Offer passkey registration and sign-in alongside existing recovery/federation, and retain contextual permission requests only.",
      "effort": "large"
    },
    {
      "id": "F27",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Defensive browser policies are incomplete or overbroad.",
      "evidence": "Referrer-Policy is absent; Permissions-Policy grants camera, fullscreen, accelerometer, gyroscope, and magnetometer to all origins; CSP is broadly permissive though HSTS and frame protections are present.",
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "suggestedFix": "Set a strict Referrer-Policy, allow sensitive capabilities only for required origins/features, tighten CSP, and add nosniff.",
      "effort": "medium"
    },
    {
      "id": "F28",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "resilient-runtime-behaviour",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "detail",
      "url": "https://faphouse.com/videos/dick-pov-taboo-na1A86",
      "summary": "Independent overlay systems collide instead of producing one robust top-layer state.",
      "evidence": "The video detail screenshot shows subscription and cookie modals simultaneously, with the age banner also active; the DOM uses no native top-layer primitives.",
      "artifacts": [
        "evidence/detail-desktop.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Centralize overlay state, use dialog/popover top-layer primitives, and prevent a second modal from opening while another blocking decision is unresolved.",
      "effort": "large"
    },
    {
      "id": "F29",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Language is declared, but layout CSS is not prepared for bidirectional or alternate writing modes.",
      "evidence": "html lang=\"en\" is present, but dir is absent and rendered CSS inspection found no logical margin/padding/inset/size properties.",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Set direction explicitly or derive it by locale and migrate physical left/right layout rules to logical properties.",
      "effort": "large"
    },
    {
      "id": "F30",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "validate-input-after-interaction",
      "guidanceCategory": "forms",
      "pathId": "signin",
      "url": "https://faphouse.com/#signin",
      "summary": "Sign-in errors are not prevented or announced humanely.",
      "evidence": "Blank submission yielded no required validity state, aria-invalid attribute, alert, or live-region message.",
      "artifacts": [
        "evidence/signin-invalid.png",
        "evidence/signin-invalid-probe.json"
      ],
      "suggestedFix": "Use required constraints, validate after interaction/submission, preserve entered values, and announce errors with field-specific recovery text.",
      "effort": "small"
    },
    {
      "id": "F31",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-in-form",
      "guidanceCategory": "forms",
      "pathId": "signin",
      "url": "https://faphouse.com/#signin",
      "summary": "Sign-in fields do not use the standard autocomplete tokens needed by password managers.",
      "evidence": "Username/email uses autocomplete=\"email\" rather than username, and password inputs expose no autocomplete token.",
      "artifacts": [
        "evidence/signin-probe.json"
      ],
      "suggestedFix": "Use autocomplete=\"username\" and autocomplete=\"current-password\"; preserve password-manager and paste behavior.",
      "effort": "trivial"
    },
    {
      "id": "F32",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Image assets are substantially oversized and frequently delivered in legacy formats.",
      "evidence": "Image audit found 32 oversized images, 73 legacy-format images, and 40 below-fold images without lazy loading; Lighthouse estimates 778 KiB image savings.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Generate AVIF/WebP responsive variants, right-size avatars/thumbnails, and lazy-load below-fold images.",
      "effort": "large"
    },
    {
      "id": "F33",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://faphouse.com/",
      "summary": "Third-party and media transfer is disproportionate before the user chooses or plays content.",
      "evidence": "HAR reports 4.88 MB and 185 requests from third-party origins; 151 images transfer 3.15 MB and scripts transfer 1.48 MB on the initial listing.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-trackers.json"
      ],
      "suggestedFix": "Set a consent-aware third-party budget, defer media to viewport/intent, and cap initial listing depth and bytes.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Fix responsive reflow, zoom, focus, and target sizing",
      "priority": 1,
      "findingIds": [
        "F07",
        "F08",
        "F09",
        "F18"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Stop stacking entry overlays and use semantic top-layer primitives",
      "priority": 2,
      "findingIds": [
        "F05",
        "F06",
        "F10",
        "F28"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Fix names, labels, landmarks, heading order, and contrast",
      "priority": 3,
      "findingIds": [
        "F15",
        "F16",
        "F17"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Cut initial media/script cost and stabilize templates",
      "priority": 4,
      "findingIds": [
        "F12",
        "F13",
        "F14",
        "F19",
        "F32",
        "F33"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Harden cookies, CSP, permissions, and third-party collection",
      "priority": 5,
      "findingIds": [
        "F24",
        "F25",
        "F27"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add humane sign-in validation and autofill tokens",
      "priority": 6,
      "findingIds": [
        "F11",
        "F30",
        "F31"
      ],
      "guidanceId": "validate-input-after-interaction",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Restore crawlable navigation, sitemap, and entity metadata",
      "priority": 7,
      "findingIds": [
        "F21",
        "F22",
        "F23"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Respect color and motion preferences",
      "priority": 8,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Add passkey authentication",
      "priority": 9,
      "findingIds": [
        "F26"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Improve navigation state and transition continuity",
      "priority": 10,
      "findingIds": [
        "F03",
        "F04"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Prepare layout for bidi/localized content",
      "priority": 11,
      "findingIds": [
        "F29"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Resolve browser lifecycle diagnostics",
      "priority": 12,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "html",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T03-39-25-599Z"
}
