{
  "url": "https://stripchat.com",
  "auditedAt": "2026-07-21T18:20:01.992Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete report-mode audit of five representative public paths. Explicitly excluded: authenticated rooms, payments, private messaging, model broadcasting, account deletion and purchase/cancellation because they require credentials, identity/age steps, money, or interaction with live performers.",
  "page": {
    "appType": "hybrid",
    "framework": "React/Redux-style client application",
    "notes": "Public adult live-cam discovery site with JS-rendered listings, account forms, PWA manifest and service worker."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "css-layout",
    "forms",
    "performance",
    "security",
    "privacy",
    "optimize-image-priority",
    "break-up-long-tasks",
    "html",
    "css",
    "passkeys"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/a11y-ui-probe.json",
      "caption": "Audit evidence: a11y-ui-probe.json",
      "findingIds": [
        "F08",
        "F13",
        "F14",
        "F31"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/about-dom.json",
      "caption": "Audit evidence: about-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/about.png",
      "caption": "Audit evidence: about.png",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Audit evidence: cookies.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Audit evidence: discoverability-crawler.png",
      "findingIds": [
        "F18",
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Audit evidence: discoverability-rendered.png",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Audit evidence: discoverability.json",
      "findingIds": [
        "F18",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Audit evidence: headers.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Audit evidence: heap-baseline.heapsnapshot",
      "findingIds": [
        "F28",
        "F29"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Audit evidence: heap-post.heapsnapshot",
      "findingIds": [
        "F28"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark-reduced.png",
      "caption": "Audit evidence: home-dark-reduced.png",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Audit evidence: home-desktop.png",
      "findingIds": [
        "F06",
        "F24"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Audit evidence: home-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "Audit evidence: home-high-contrast.png",
      "findingIds": [
        "F03",
        "F30"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Audit evidence: home-mobile-layout.json",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Audit evidence: home-mobile.png",
      "findingIds": [
        "F05",
        "F06",
        "F07",
        "F24",
        "F31"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Audit evidence: home-summary.json",
      "findingIds": [
        "F11",
        "F12",
        "F20",
        "F27"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Audit evidence: home-trace-summary.json",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "Audit evidence: home-trace.json",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Audit evidence: home.har",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/i18n-probe.json",
      "caption": "Audit evidence: i18n-probe.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Audit evidence: images.json",
      "findingIds": [
        "F16",
        "F26"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-details.json",
      "caption": "Audit evidence: lighthouse-details.json",
      "findingIds": [
        "F03",
        "F13",
        "F15",
        "F17",
        "F18",
        "F30"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-findings.json",
      "caption": "Audit evidence: lighthouse-findings.json",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-performance-details.json",
      "caption": "Audit evidence: lighthouse-performance-details.json",
      "findingIds": [
        "F10",
        "F12"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary-extract.json",
      "caption": "Audit evidence: lighthouse-summary-extract.json",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Audit evidence: lighthouse.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/listing-dom.json",
      "caption": "Audit evidence: listing-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/listing.png",
      "caption": "Audit evidence: listing.png",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/login-dom.json",
      "caption": "Audit evidence: login-dom.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/login-form-probe.json",
      "caption": "Audit evidence: login-form-probe.json",
      "findingIds": [
        "F21",
        "F25",
        "F32"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/login-invalid.png",
      "caption": "Audit evidence: login-invalid.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/login.png",
      "caption": "Audit evidence: login.png",
      "findingIds": [
        "F21",
        "F25",
        "F32"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-css-probe.json",
      "caption": "Audit evidence: platform-css-probe.json",
      "findingIds": [
        "F04",
        "F05",
        "F07"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-probe.json",
      "caption": "Audit evidence: preferences-probe.json",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Audit evidence: recon.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/resource-dom-probe.json",
      "caption": "Audit evidence: resource-dom-probe.json",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Audit evidence: secrets.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/signup-dom.json",
      "caption": "Audit evidence: signup-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup.png",
      "caption": "Audit evidence: signup.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/site-files-probe.json",
      "caption": "Audit evidence: site-files-probe.json",
      "findingIds": [
        "F09",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sw-probe.json",
      "caption": "Audit evidence: sw-probe.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Audit evidence: trackers.json",
      "findingIds": [
        "F20",
        "F27"
      ]
    }
  ],
  "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": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Under prefers-color-scheme: dark the page remains usable, but the computed root color-scheme is normal and the loaded stylesheets are dark-only; native controls cannot consistently inherit an explicit scheme.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark-reduced.png",
        "evidence/preferences-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The reduced-motion probe reported two 250 ms SidebarFadeIn animations under prefers-reduced-motion: reduce.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse found seven color-contrast failures; the high-contrast capture shows the same authored palette rather than preference-aware system colors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-high-contrast.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "CSS inspection found no view-transition rules; the public listing, category and account surfaces swap without a transition contract.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/listing.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "CSS/runtime probe",
      "evidence": "No scroll-linked animation was present, so the page does not use a main-thread scroll-animation anti-pattern.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-css-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Responsive screenshots and runtime probe",
      "evidence": "The audited browse flow uses native scrolling and ordinary links; no custom gesture surface fought platform behavior.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "CSS inspection found no scroll-state, scroll-timeline, or view-transition implementation; the long feed uses static chrome with no progress or post-navigation cue.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "DOM/runtime overlay inspection",
      "evidence": "No tooltip or transient popover requiring anchored positioning appeared on the audited paths; the menu uses a native dialog element.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-css-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "CSS inspection found no scroll-state, scroll-timeline, or view-transition implementation; the long feed uses static chrome with no progress or post-navigation cue.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Desktop and mobile screenshots show an age banner plus a persistent cookie panel; on mobile the cookie panel overlays the content grid and gives Accept All the dominant action.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Desktop and mobile screenshots show an age banner plus a persistent cookie panel; on mobile the cookie panel overlays the content grid and gives Accept All the dominant action.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Visual review",
      "evidence": "Despite the interruption banners, the underlying browse grid dedicates most remaining viewport area to the primary content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile layout metrics",
      "evidence": "At 360x800, scrollWidth and clientWidth were both 360 with zero horizontal overflow and a viewport meta tag.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The CSS probe found zero container-query rules while the same card/navigation patterns are reused across desktop and mobile layouts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The active focus probe found outline-style none and no box shadow for the first 20 focusable elements; 18 visible interactive targets were under 24 px in one dimension.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-ui-probe.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport review",
      "evidence": "The homepage clearly presents live-category browsing, while signup and login expose explicit account actions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Browse walkthrough",
      "evidence": "The public browse journey from homepage to a representative category listing completed without an account wall.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/listing.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "A request to a representative nonexistent path returned HTTP 406 with an empty body, offering no explanation, home link, search, or retry path.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-files-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse measured LCP 5.7 s, CLS 0.125, and TBT 760 ms; the independent mobile layout observer measured CLS 0.1276.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-performance-details.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse measured LCP 5.7 s, CLS 0.125, and TBT 760 ms; the independent mobile layout observer measured CLS 0.1276.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-performance-details.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse measured LCP 5.7 s, CLS 0.125, and TBT 760 ms; the independent mobile layout observer measured CLS 0.1276.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-performance-details.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The HAR recorded 158 requests and 2,459,295 transferred bytes, including 1,353,085 bytes of script and 2,296,321 third-party bytes; the largest bootstrap script alone transferred 724,265 bytes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse estimated 1,150 KiB of unused JavaScript and 124 KiB of unused CSS, consistent with the large shared bootstrap observed in the HAR.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-performance-details.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The DOM probe counted 27 unnamed anchors and three unnamed buttons; Lighthouse independently failed link-name on ten sampled nodes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-ui-probe.json",
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse found seven color-contrast failures across the rendered homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-high-contrast.png"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The homepage heading sequence starts H2, then H1, then H2, and focused controls computed to outline none with no compensating box shadow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-ui-probe.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The About screenshot shows dense 12–14 px gray copy and low-emphasis links on a dark surface; Lighthouse also found seven contrast failures.",
      "pathIds": [
        "about"
      ],
      "artifacts": [
        "evidence/about.png",
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The interaction probe counted 18 visible focusable targets under 24 CSS px in at least one dimension, although the 360 px layout itself did not overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/a11y-ui-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse runtime audit",
      "evidence": "Lighthouse errors-in-console passed with zero detail items.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The image audit found all 36 images missing width/height, 17 oversized, 22 without srcset, and 15 below-fold images without lazy loading.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Lighthouse reported three deprecation warnings, one BFCache failure reason, and Chrome inspector issues.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/lighthouse-findings.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM metadata inspection",
      "evidence": "The page has a descriptive title and a matching meta description.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The discoverability run received HTTP 403 for raw HTML, found only 5% rendered-word coverage, no raw title/H1/description, and classified the page as a JS shell; Lighthouse also failed one crawlable-anchor audit.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/lighthouse-details.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata and site-file fetch",
      "evidence": "Canonical, hreflang, index/follow robots, robots.txt and multiple sitemaps were present and consistent.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata inspection",
      "evidence": "Open Graph/Twitter metadata and WebSite/SearchAction JSON-LD describe the visible public site.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The header audit found no response CSP, nosniff, Referrer-Policy, or Permissions-Policy. The cookie audit found 21 of 26 cookies without Secure; the meta CSP permits unsafe-inline and unsafe-eval.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The HAR attributed 143 requests and 2,296,321 bytes to third-party origins, while the DOM loaded FingerprintJS2 and the tracker probe observed nine third-party origins before consent was accepted.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/resource-dom-probe.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The login probe found username/email and password fields, no navigator.credentials/PublicKeyCredential usage in the page, and no explicit autocomplete tokens.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-form-probe.json",
        "evidence/login.png"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The header audit found no response CSP, nosniff, Referrer-Policy, or Permissions-Policy. The cookie audit found 21 of 26 cookies without Secure; the meta CSP permits unsafe-inline and unsafe-eval.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The no-JavaScript/raw fetch returned 403 and only 5% of rendered words, with no title, H1, or description in raw content; the crawler view shows skeletons rather than useful listings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Cross-path visual/runtime review",
      "evidence": "The observed category, account and menu surfaces rendered without clipped active overlays or broken asynchronous shells in the normal online condition.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/listing.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "pass",
      "confidence": "high",
      "method": "Manifest and service-worker inspection",
      "evidence": "A standalone web app manifest with 192/512 icons exists and an active scoped service worker is registered.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-files-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The representative unknown route returned 406 with an empty response instead of a resilient not-found page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-files-probe.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "DOM locale inspection",
      "evidence": "The English page declares lang=en and exposes extensive hreflang alternatives, including x-default and more than 20 locales.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/i18n-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The representative public pages exposed no user-facing dates, currencies, durations, or numeric locale-sensitive data to judge.",
      "reason": "The representative public pages exposed no user-facing dates, currencies, durations, or numeric locale-sensitive data to judge."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "No event scheduling or displayed time-zone-sensitive data appeared on the audited public paths.",
      "reason": "No event scheduling or displayed time-zone-sensitive data appeared on the audited public paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The cookie panel makes Accept All a bright primary action while Manage is muted and there is no equally direct Reject All action in the first layer.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Invalid-submit visual review",
      "evidence": "The login form retained context after empty submission and did not erase or navigate away from the form.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/login-invalid.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The login probe found empty autocomplete values for username/email and password, and the signup/login controls rely on placeholders instead of persistent visible labels.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-form-probe.json",
        "evidence/login.png"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The login path exposes username/email and password fields but no page use of navigator.credentials or PublicKeyCredential; account creation is also CAPTCHA-gated.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-form-probe.json",
        "evidence/login.png"
      ],
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The image audit found 17 oversized images, 22 without responsive sources, 15 legacy-format images, and all 36 without intrinsic dimensions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Third-party origins account for 2.30 MB of 2.46 MB transferred and 143 of 158 requests, including player, analytics and fingerprinting resources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "Third-party origins account for 2.30 MB of 2.46 MB transferred and 143 of 158 requests, including player, analytics and fingerprinting resources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "This real-time adult entertainment surface has no declared agent-facing task or intent; emerging WebMCP exposure is not assumed appropriate without explicit safety and product scope.",
      "reason": "This real-time adult entertainment surface has no declared agent-facing task or intent; emerging WebMCP exposure is not assumed appropriate without explicit safety and product scope."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "No summarisation or language-model task is part of the observed core experience, so on-device inference is not applicable.",
      "reason": "No summarisation or language-model task is part of the observed core experience, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "issues",
      "confidence": "medium",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "After ten bottom/top scroll cycles, the heap summary grew from 53,877,211 to 74,824,271 self-size bytes (+39%), nodes from 1,144,725 to 1,622,430 (+42%), and closures from 104,937 to 160,682. Separate fresh sessions introduce variance, so leak attribution is medium-confidence, but the growth warrants same-session profiling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "Active browser evidence and artifact review mapped to the exact check",
      "evidence": "The baseline heap summary contains 1,144,725 nodes, 5,112,107 edges, 53.9 MB self size and 104,937 closures before sustained use.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Heap constructor comparison",
      "evidence": "Neither heap summary exposed Detached* constructors among the dominant retained populations; no direct detached-DOM evidence was found.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F30",
        "F14",
        "F15",
        "F31"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22",
        "F23"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F24",
        "F25",
        "F32"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "This real-time adult entertainment surface has no declared agent-facing task or intent; emerging WebMCP exposure is not assumed appropriate without explicit safety and product scope. No summarisation or language-model task is part of the observed core experience, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F28",
        "F29"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Public discovery homepage and primary browse entry point; tested as the highest-traffic listing surface.",
      "url": "https://stripchat.com/",
      "conditions": [
        "desktop 780x493",
        "viewport 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "keyboard focus probe"
      ],
      "result": "issues"
    },
    {
      "id": "listing",
      "description": "British models category, representing category and search/listing templates.",
      "url": "https://stripchat.com/girls/british-models",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "about",
      "description": "About page, representing text/legal/informational content and footer navigation.",
      "url": "https://stripchat.com/about",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "signup",
      "description": "Account creation entry, representing registration and CAPTCHA-gated form UI. Account creation itself was not performed.",
      "url": "https://stripchat.com/signup",
      "conditions": [
        "desktop"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Login and invalid-submit state, representing authentication and form assistance.",
      "url": "https://stripchat.com/login",
      "conditions": [
        "desktop",
        "empty submit"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "severity": "medium",
      "confidence": "high",
      "summary": "The fixed dark palette is not integrated with the user’s color-scheme preference.",
      "evidence": "Under prefers-color-scheme: dark the page remains usable, but the computed root color-scheme is normal and the loaded stylesheets are dark-only; native controls cannot consistently inherit an explicit scheme.",
      "artifacts": [
        "evidence/home-dark-reduced.png",
        "evidence/preferences-probe.json"
      ],
      "suggestedFix": "Declare color-scheme in early metadata and on :root, then expose preference-aware light/dark tokens using light-dark() or prefers-color-scheme.",
      "effort": "small"
    },
    {
      "id": "F02",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Non-essential animation remains active when reduced motion is requested.",
      "evidence": "The reduced-motion probe reported two 250 ms SidebarFadeIn animations under prefers-reduced-motion: reduce.",
      "artifacts": [
        "evidence/preferences-probe.json"
      ],
      "suggestedFix": "Use a prefers-reduced-motion: reduce rule to remove non-essential fades and transitions while preserving state feedback.",
      "effort": "small"
    },
    {
      "id": "F03",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Contrast preferences and baseline contrast are not fully supported.",
      "evidence": "Lighthouse found seven color-contrast failures; the high-contrast capture shows the same authored palette rather than preference-aware system colors.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-high-contrast.png"
      ],
      "suggestedFix": "Fix the reported foreground/background pairs and use forced-colors or prefers-contrast adjustments without suppressing system colors.",
      "effort": "small"
    },
    {
      "id": "F04",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "css",
      "severity": "low",
      "confidence": "high",
      "summary": "Route and state changes do not use declarative transition primitives.",
      "evidence": "CSS inspection found no view-transition rules; the public listing, category and account surfaces swap without a transition contract.",
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/listing.png"
      ],
      "suggestedFix": "Use same-document or cross-document View Transitions for meaningful route/state changes, with reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "F05",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "css",
      "severity": "low",
      "confidence": "high",
      "summary": "Navigation chrome does not respond to scroll state or direct attention after route changes.",
      "evidence": "CSS inspection found no scroll-state, scroll-timeline, or view-transition implementation; the long feed uses static chrome with no progress or post-navigation cue.",
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Add lightweight scroll-state-aware header treatment or progress where it improves orientation, and preserve a clear active route/focus cue.",
      "effort": "medium"
    },
    {
      "id": "F06",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent and age-verification chrome consume a large share of the first viewport.",
      "evidence": "Desktop and mobile screenshots show an age banner plus a persistent cookie panel; on mobile the cookie panel overlays the content grid and gives Accept All the dominant action.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Minimise the consent surface, provide equally prominent choices, reserve space where a legal age notice is required, and use a semantic dismissible dialog only when modality is necessary.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "css-layout",
      "severity": "low",
      "confidence": "high",
      "summary": "Reusable feed and navigation components rely on viewport CSS rather than container responsiveness.",
      "evidence": "The CSS probe found zero container-query rules while the same card/navigation patterns are reused across desktop and mobile layouts.",
      "artifacts": [
        "evidence/platform-css-probe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Define containment for reusable card/nav regions and adapt them with @container where their available space, not the viewport, determines layout.",
      "effort": "medium"
    },
    {
      "id": "F08",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus and small controls make non-pointer use difficult.",
      "evidence": "The active focus probe found outline-style none and no box shadow for the first 20 focusable elements; 18 visible interactive targets were under 24 px in one dimension.",
      "artifacts": [
        "evidence/a11y-ui-probe.json"
      ],
      "suggestedFix": "Add a high-contrast :focus-visible treatment and enlarge compact controls or their hit areas to at least the WCAG minimum, ideally 44 CSS px for primary touch targets.",
      "effort": "small"
    },
    {
      "id": "F09",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Unknown routes return an empty, nonstandard failure response with no recovery UI.",
      "evidence": "A request to a representative nonexistent path returned HTTP 406 with an empty body, offering no explanation, home link, search, or retry path.",
      "artifacts": [
        "evidence/site-files-probe.json"
      ],
      "suggestedFix": "Serve a useful 404 page with normal navigation, search/browse recovery, and an accurate HTTP status.",
      "effort": "small"
    },
    {
      "id": "F10",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Mobile load performance and visual stability miss the Core Web Vitals bar.",
      "evidence": "Lighthouse measured LCP 5.7 s, CLS 0.125, and TBT 760 ms; the independent mobile layout observer measured CLS 0.1276.",
      "artifacts": [
        "evidence/lighthouse-performance-details.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Prioritise the LCP content, reserve media/banner geometry, and reduce startup JavaScript and long tasks; verify with repeat mobile traces.",
      "effort": "large"
    },
    {
      "id": "F11",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The initial page ships a heavy dependency graph dominated by JavaScript and third-party assets.",
      "evidence": "The HAR recorded 158 requests and 2,459,295 transferred bytes, including 1,353,085 bytes of script and 2,296,321 third-party bytes; the largest bootstrap script alone transferred 724,265 bytes.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Split the bootstrap by route, defer optional player/analytics code until intent, reduce font variants, and keep only critical CSS in the initial chain.",
      "effort": "large"
    },
    {
      "id": "F12",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Large amounts of shipped CSS and JavaScript are unused on the audited route.",
      "evidence": "Lighthouse estimated 1,150 KiB of unused JavaScript and 124 KiB of unused CSS, consistent with the large shared bootstrap observed in the HAR.",
      "artifacts": [
        "evidence/lighthouse-performance-details.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Use route/component-level code splitting, remove legacy/shared modules from the discovery entry path, and measure coverage after each split.",
      "effort": "large"
    },
    {
      "id": "F13",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Many links and buttons have no accessible name.",
      "evidence": "The DOM probe counted 27 unnamed anchors and three unnamed buttons; Lighthouse independently failed link-name on ten sampled nodes.",
      "artifacts": [
        "evidence/a11y-ui-probe.json",
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Give icon-only controls an accessible name, ensure card anchors derive a meaningful name, and keep visible and accessible labels aligned.",
      "effort": "medium"
    },
    {
      "id": "F14",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Heading order and focus visibility do not provide a dependable keyboard structure.",
      "evidence": "The homepage heading sequence starts H2, then H1, then H2, and focused controls computed to outline none with no compensating box shadow.",
      "artifacts": [
        "evidence/a11y-ui-probe.json"
      ],
      "suggestedFix": "Place the page H1 before section H2 headings, simplify repeated navigation landmarks, and implement a consistent :focus-visible indicator.",
      "effort": "small"
    },
    {
      "id": "F15",
      "pathId": "about",
      "url": "https://stripchat.com/about",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Secondary and footer copy is cramped and low contrast.",
      "evidence": "The About screenshot shows dense 12–14 px gray copy and low-emphasis links on a dark surface; Lighthouse also found seven contrast failures.",
      "artifacts": [
        "evidence/about.png",
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Increase secondary text contrast and line-height, avoid 12 px body copy, and constrain paragraphs to a comfortable line length.",
      "effort": "small"
    },
    {
      "id": "F16",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "severity": "medium",
      "confidence": "high",
      "summary": "Images omit intrinsic dimensions and many are substantially oversized.",
      "evidence": "The image audit found all 36 images missing width/height, 17 oversized, 22 without srcset, and 15 below-fold images without lazy loading.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Emit width and height (or aspect-ratio), responsive srcset/sizes, and lazy-load below-fold cards while keeping the LCP candidate eager.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page triggers deprecated API, BFCache, and inspector issues.",
      "evidence": "Lighthouse reported three deprecation warnings, one BFCache failure reason, and Chrome inspector issues.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/lighthouse-findings.json"
      ],
      "suggestedFix": "Remove deprecated API calls, resolve the recorded inspector issues, and eliminate avoidable unload or other BFCache blockers.",
      "effort": "medium"
    },
    {
      "id": "F18",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Important content is nearly invisible to non-JavaScript crawlers and some anchors are not crawlable.",
      "evidence": "The discoverability run received HTTP 403 for raw HTML, found only 5% rendered-word coverage, no raw title/H1/description, and classified the page as a JS shell; Lighthouse also failed one crawlable-anchor audit.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/lighthouse-details.json"
      ],
      "suggestedFix": "Serve meaningful listing text and metadata in the initial HTML to permitted crawlers, return a crawler-accessible success response, and replace non-href navigation with real links.",
      "effort": "large"
    },
    {
      "id": "F19",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Security headers and cookie flags are incomplete despite HTTPS.",
      "evidence": "The header audit found no response CSP, nosniff, Referrer-Policy, or Permissions-Policy. The cookie audit found 21 of 26 cookies without Secure; the meta CSP permits unsafe-inline and unsafe-eval.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/recon.json"
      ],
      "suggestedFix": "Send a nonce/hash-based CSP as a response header, add nosniff, strict referrer and permissions policies, and mark every HTTPS cookie Secure with the narrowest workable SameSite setting.",
      "effort": "medium"
    },
    {
      "id": "F20",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "severity": "high",
      "confidence": "high",
      "summary": "The anonymous landing page has an outsized third-party and fingerprinting footprint.",
      "evidence": "The HAR attributed 143 requests and 2,296,321 bytes to third-party origins, while the DOM loaded FingerprintJS2 and the tracker probe observed nine third-party origins before consent was accepted.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/resource-dom-probe.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Gate nonessential analytics/fingerprinting behind consent, remove redundant third parties, and batch/minimise anonymous telemetry.",
      "effort": "large"
    },
    {
      "id": "F21",
      "pathId": "login",
      "url": "https://stripchat.com/login",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "severity": "medium",
      "confidence": "high",
      "summary": "Authentication exposes password-only fields with no passkey path.",
      "evidence": "The login probe found username/email and password fields, no navigator.credentials/PublicKeyCredential usage in the page, and no explicit autocomplete tokens.",
      "artifacts": [
        "evidence/login-form-probe.json",
        "evidence/login.png"
      ],
      "suggestedFix": "Offer WebAuthn/passkeys alongside a password fallback and add correct username/current-password autocomplete tokens.",
      "effort": "medium"
    },
    {
      "id": "F22",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Core public content depends on JavaScript and bot-sensitive rendering.",
      "evidence": "The no-JavaScript/raw fetch returned 403 and only 5% of rendered words, with no title, H1, or description in raw content; the crawler view shows skeletons rather than useful listings.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render core headings, navigation, listing summaries and recovery states, then hydrate enhancements progressively without withholding public content.",
      "effort": "large"
    },
    {
      "id": "F23",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The observed HTTP failure state is blank rather than recoverable.",
      "evidence": "The representative unknown route returned 406 with an empty response instead of a resilient not-found page.",
      "artifacts": [
        "evidence/site-files-probe.json"
      ],
      "suggestedFix": "Return an intentional 404 surface with retained navigation, helpful explanation, and retry/search options.",
      "effort": "small"
    },
    {
      "id": "F24",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent choices are visually asymmetric.",
      "evidence": "The cookie panel makes Accept All a bright primary action while Manage is muted and there is no equally direct Reject All action in the first layer.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Present Accept and Reject with equal prominence, keep granular management available, and avoid loading nonessential tracking before a choice.",
      "effort": "small"
    },
    {
      "id": "F25",
      "pathId": "login",
      "url": "https://stripchat.com/login",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "severity": "medium",
      "confidence": "high",
      "summary": "Login fields omit autofill semantics.",
      "evidence": "The login probe found empty autocomplete values for username/email and password, and the signup/login controls rely on placeholders instead of persistent visible labels.",
      "artifacts": [
        "evidence/login-form-probe.json",
        "evidence/login.png"
      ],
      "suggestedFix": "Add visible labels and autocomplete=username/current-password (and new-password where applicable); preserve password-manager and paste support.",
      "effort": "small"
    },
    {
      "id": "F26",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "optimize-image-priority",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery wastes bytes and risks layout work.",
      "evidence": "The image audit found 17 oversized images, 22 without responsive sources, 15 legacy-format images, and all 36 without intrinsic dimensions.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Generate right-sized AVIF/WebP variants with srcset/sizes, preserve dimensions, and lazy-load below-fold imagery.",
      "effort": "medium"
    },
    {
      "id": "F27",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party code dominates the landing-page resource budget before user intent.",
      "evidence": "Third-party origins account for 2.30 MB of 2.46 MB transferred and 143 of 158 requests, including player, analytics and fingerprinting resources.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Set a third-party budget, defer player and measurement code until interaction/consent, and remove low-value vendors.",
      "effort": "large"
    },
    {
      "id": "F28",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-memory-efficient",
      "principleCheckId": "no-leak-under-repeated-interaction",
      "guidanceId": "performance",
      "severity": "high",
      "confidence": "medium",
      "summary": "Repeated feed scrolling produced large retained-heap growth.",
      "evidence": "After ten bottom/top scroll cycles, the heap summary grew from 53,877,211 to 74,824,271 self-size bytes (+39%), nodes from 1,144,725 to 1,622,430 (+42%), and closures from 104,937 to 160,682. Separate fresh sessions introduce variance, so leak attribution is medium-confidence, but the growth warrants same-session profiling.",
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ],
      "suggestedFix": "Repeat the baseline/interaction/final snapshots in one session, trace retainers for growing objects/closures, and clean up card observers, listeners, media/player state and caches when content leaves the viewport.",
      "effort": "large"
    },
    {
      "id": "F29",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial discovery page has a large memory footprint for a browsing grid.",
      "evidence": "The baseline heap summary contains 1,144,725 nodes, 5,112,107 edges, 53.9 MB self size and 104,937 closures before sustained use.",
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ],
      "suggestedFix": "Virtualise or bound offscreen feed state, delay player construction, reduce retained closures, and define a memory budget for the discovery route.",
      "effort": "large"
    },
    {
      "id": "F30",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Text and essential UI include insufficient-contrast color pairs.",
      "evidence": "Lighthouse found seven color-contrast failures across the rendered homepage.",
      "artifacts": [
        "evidence/lighthouse-details.json",
        "evidence/home-high-contrast.png"
      ],
      "suggestedFix": "Correct each reported foreground/background pair to meet WCAG contrast minimums in default and preference-driven themes.",
      "effort": "small"
    },
    {
      "id": "F31",
      "pathId": "home",
      "url": "https://stripchat.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "A set of visible controls is too small for dependable touch and reflow use.",
      "evidence": "The interaction probe counted 18 visible focusable targets under 24 CSS px in at least one dimension, although the 360 px layout itself did not overflow.",
      "artifacts": [
        "evidence/a11y-ui-probe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Increase control hit areas to at least the WCAG minimum and test 200% zoom plus narrow reflow without obscured controls.",
      "effort": "small"
    },
    {
      "id": "F32",
      "pathId": "login",
      "url": "https://stripchat.com/login",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "passkeys",
      "severity": "medium",
      "confidence": "high",
      "summary": "The account authentication path relies on password entry without a phishing-resistant option.",
      "evidence": "The login path exposes username/email and password fields but no page use of navigator.credentials or PublicKeyCredential; account creation is also CAPTCHA-gated.",
      "artifacts": [
        "evidence/login-form-probe.json",
        "evidence/login.png"
      ],
      "suggestedFix": "Offer passkeys alongside the password fallback, keep recovery explicit, and document clear account cancellation and reauthentication paths.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Server-render public content and resilient 404/recovery states",
      "priority": 1,
      "findingIds": [
        "F18",
        "F22",
        "F23",
        "F09"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Cut startup JavaScript, long tasks and third-party transfer",
      "priority": 2,
      "findingIds": [
        "F10",
        "F11",
        "F12",
        "F20",
        "F27"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Fix accessible names, focus, heading order, contrast and target sizing",
      "priority": 3,
      "findingIds": [
        "F03",
        "F08",
        "F13",
        "F14",
        "F15",
        "F30",
        "F31"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Harden CSP, browser policies and cookie flags",
      "priority": 4,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Make consent balanced and defer nonessential tracking",
      "priority": 5,
      "findingIds": [
        "F06",
        "F20",
        "F24"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Reserve and right-size responsive image geometry",
      "priority": 6,
      "findingIds": [
        "F10",
        "F16",
        "F26"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Profile and bound retained memory in one long-lived session",
      "priority": 7,
      "findingIds": [
        "F28",
        "F29"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Add passkeys, labels and autofill tokens to account forms",
      "priority": 8,
      "findingIds": [
        "F21",
        "F25",
        "F32"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Respect color-scheme, reduced-motion and contrast preferences",
      "priority": 9,
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1100,
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T18-20-01-992Z"
}
