{
  "url": "https://m.hqporner.com",
  "auditedAt": "2026-07-18T15:39:55.384Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit of six representative routes and global transport/network behavior.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered legacy MPA with jQuery",
    "notes": "Public adult-video catalogue with a UK age-verification gate and extensive third-party advertising/tracking."
  },
  "evidenceUsed": [
    "screenshot",
    "dom+computed-css",
    "layout-metrics",
    "evaluate-probe",
    "discoverability",
    "HAR",
    "trace",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "Lighthouse",
    "heap-summary",
    "robots/sitemap fetch"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "light-dismiss-a-dialog",
    "size-aware-styling",
    "accessibility",
    "performance",
    "security",
    "privacy",
    "validate-input-after-interaction",
    "deprioritize-background-fetches",
    "faster-spa-view-transitions",
    "improve-text-layout-and-legibility",
    "fluid-scaling"
  ],
  "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",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Light and dark emulation screenshots are visually identical, while the DOM reports color-scheme: normal.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Reduced-motion emulation matched and document.getAnimations() returned zero active animations, so no non-essential motion remained to suppress.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Lighthouse contrast testing remained able to inspect controls and text; failures are recorded under inclusive contrast, but no forced-colors-only disappearance was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The UI probe found no view-transition CSS and navigation is conventional full-document replacement.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "DOM/CSS inspection found no scroll event animation implementation or scroll-linked effects, so the page avoids a main-thread scroll-animation anti-pattern.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Representative navigation uses native links and scrolling; no custom pointer/gesture handlers were observed fighting platform behavior.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Layout measured a 16,547px mobile page; screenshots and DOM show static chrome with no scroll progress or scroll-state treatment.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "No tooltip, contextual popover, or edge-positioned menu was present on the representative paths.",
      "status": "not-applicable",
      "reason": "No tooltip, contextual popover, or edge-positioned menu was present on the representative paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "No view-transition/highlight/scroll-marker treatment was found, and card links have empty visible text in the DOM probe.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Mobile and desktop screenshots show a fixed blurred overlay covering the content before interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "DOM CSS shows .ageverif_overlay/.ageverif_banner fixed divs; the primary action is an anchor with onclick and no href.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "HAR recorded 145 requests and the DOM contains several ad-network promotions mixed among listing cards; screenshots show the content behind the gate.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Active inspection across the representative homepage, listing, detail, search, contact and failure paths found the expected outcome for “Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.”; supporting observations are recorded in the referenced artifacts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The UI probe found zero @container rules, while reused listing/ad components are constrained through fixed and viewport media-query CSS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The first focused action computed outline-style:none; 50 of 115 interactive elements measured below 44px in one dimension.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Raw/rendered DOM and page title clearly identify a high-definition video catalogue, with search, category and detail links exposed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Homepage and detail screenshots remain behind the gate; activating Verify My Age produced an empty fixed panel in the category capture rather than completing the journey.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The attempted verification showed a blank modal panel; the contact form marks no field required and provides no visible inline validation before submission.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "confidence": "high",
      "method": "Lighthouse, trace, layout, HAR and DOM resource-attribute confirmation",
      "evidence": "Lighthouse measured LCP 3.4s and CLS 0.204; trace corroborated 2.03s LCP in a separate run.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ],
      "status": "issues",
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "confidence": "high",
      "method": "Lighthouse, trace, layout, HAR and DOM resource-attribute confirmation",
      "evidence": "Lighthouse measured LCP 3.4s and CLS 0.204; trace corroborated 2.03s LCP in a separate run.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ],
      "status": "issues",
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "confidence": "high",
      "method": "Lighthouse, trace, layout, HAR and DOM resource-attribute confirmation",
      "evidence": "Trace recorded zero long tasks and 0ms total blocking time; Lighthouse TBT was 10ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "confidence": "high",
      "method": "Lighthouse, trace, layout, HAR and DOM resource-attribute confirmation",
      "evidence": "HAR measured 145 requests and 6.62MB transferred, including eight parser-blocking stylesheets and six classic scripts without async/defer confirmed by the platform probe.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ],
      "status": "issues",
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "confidence": "high",
      "method": "Lighthouse, trace, layout, HAR and DOM resource-attribute confirmation",
      "evidence": "Lighthouse estimated 250KiB unused JS, including analytics and repeated ad-provider payloads with 45% to 94% waste.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-summary.json"
      ],
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "confidence": "high",
      "method": "Lighthouse accessibility audits, DOM/evaluate probes and mobile screenshots",
      "evidence": "Lighthouse failed image-alt; the image audit found eight missing alt attributes, including the menu icon and age-gate icon.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/ui-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "confidence": "high",
      "method": "Lighthouse accessibility audits, DOM/evaluate probes and mobile screenshots",
      "evidence": "Lighthouse measured 2.83:1 on Verify My Age and 3.06:1 on repeated metadata text, below 4.5:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/ui-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "confidence": "high",
      "method": "Lighthouse accessibility audits, DOM/evaluate probes and mobile screenshots",
      "evidence": "The gate is a generic div and its focused action has outline:none; the action is an anchor without href.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/ui-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "confidence": "high",
      "method": "Lighthouse accessibility audits, DOM/evaluate probes and mobile screenshots",
      "evidence": "Lighthouse measured 2.83:1 on Verify My Age and 3.06:1 on repeated metadata text, below 4.5:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/ui-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "confidence": "high",
      "method": "Lighthouse accessibility audits, DOM/evaluate probes and mobile screenshots",
      "evidence": "Viewport content includes maximum-scale=1,user-scalable=no; the detail probe found videos with no <track> captions; 50 targets are undersized.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/ui-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Lighthouse captured “$(...).nivoSlider is not a function” in custom.js line 206.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The image audit found all 54 images missing width/height, 47 below-fold images not lazy, 46 without srcset and 53 legacy-format assets.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Lighthouse captured “$(...).nivoSlider is not a function” in custom.js line 206.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "confidence": "high",
      "method": "Discoverability/raw HTML, metadata probes, robots and sitemap inspection",
      "evidence": "Homepage and detail probes found descriptive unique titles and meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/detail-probe.json"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "confidence": "high",
      "method": "Discoverability/raw HTML, metadata probes, robots and sitemap inspection",
      "evidence": "Lighthouse failed crawlable-anchors; Verify My Age is an anchor without href and the link probe recorded many empty-text detail links and # actions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/detail-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "confidence": "high",
      "method": "Discoverability/raw HTML, metadata probes, robots and sitemap inspection",
      "evidence": "Homepage returned 200, robots allows crawling, sitemap.xml returned content, and detail/contact pages expose canonical URLs.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/detail-probe.json"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "confidence": "high",
      "method": "Discoverability/raw HTML, metadata probes, robots and sitemap inspection",
      "evidence": "The detail probe found no JSON-LD, Open Graph tags or hreflang despite a clearly identified video entity.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/detail-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets and HAR inspection",
      "evidence": "Headers found no CSP, HSTS, nosniff, frame protection, Referrer-Policy or Permissions-Policy; cookies found three non-Secure and all six SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/trackers.json"
      ],
      "status": "issues",
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets and HAR inspection",
      "evidence": "Tracker capture found 16 third-party origins including Google Analytics and Yandex/Webvisor; HAR attributes 6.61MB of 6.62MB to third-party origins.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/trackers.json"
      ],
      "status": "issues",
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets and HAR inspection",
      "evidence": "Platform probe found no geolocation/notification strings or prompts on load; no authentication surface was part of the public journey.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/trackers.json"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "confidence": "high",
      "method": "Headers, cookies, trackers, secrets and HAR inspection",
      "evidence": "Headers found no CSP, HSTS, nosniff, frame protection, Referrer-Policy or Permissions-Policy; cookies found three non-Secure and all six SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/trackers.json"
      ],
      "status": "issues",
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Discoverability fetched 200 raw HTML with 92% rendered-word coverage, title and h1 present, and no empty JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Homepage and detail screenshots remain behind the gate; activating Verify My Age produced an empty fixed panel in the category capture rather than completing the journey.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "This public media catalogue is not presented as an installable app; offline video delivery is not a proportionate requirement.",
      "status": "not-applicable",
      "reason": "This public media catalogue is not presented as an installable app; offline video delivery is not a proportionate requirement."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "A genuine HTTP 404 response still renders the full-screen verification overlay, hiding any recovery content; verification itself produced an empty panel.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "status": "issues",
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "UI and platform probes both report empty html.lang and html.dir.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/ui-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Representative pages contain no dates, prices, currencies, or locale-sensitive numeric data.",
      "status": "not-applicable",
      "reason": "Representative pages contain no dates, prices, currencies, or locale-sensitive numeric data."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "No event scheduling or time-zone-sensitive concepts appear in the audited routes.",
      "status": "not-applicable",
      "reason": "No event scheduling or time-zone-sensitive concepts appear in the audited routes."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The link probe shows local-dating and AI promotions whose href resolves to the homepage, alongside separate ad-network redirects, without clear ad semantics.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/contact-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The contact probe found Name, Email and Message all required=false and no demonstrated inline error model.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/contact-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "The contact probe found empty autocomplete values and the homepage search explicitly uses autocomplete=off.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/contact-probe.json"
      ],
      "status": "issues",
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "No checkout, subscription, authenticated account-management, or cancellation flow was in the representative public journey.",
      "status": "not-applicable",
      "reason": "No checkout, subscription, authenticated account-management, or cancellation flow was in the representative public journey."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "Image audit found 53 legacy-format images, 46 without responsive sources, 47 eager below-fold images and 54 without intrinsic dimensions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/images.json"
      ],
      "status": "issues",
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "HAR transferred 4.47MB as XHR/fetch, led by five third-party MP4 files, before the user reached core content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/images.json"
      ],
      "status": "issues",
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "confidence": "high",
      "method": "Representative screenshots, rendered DOM and targeted evaluate probes guided by detectableVia",
      "evidence": "HAR measured 6.61MB third-party transfer and 144 of 145 requests; five ad-network MP4 previews account for most bytes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/images.json"
      ],
      "status": "issues",
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "confidence": "high",
      "method": "Discoverability/raw HTML, metadata probes, robots and sitemap inspection",
      "evidence": "The site exposes a browse/watch media catalogue and declares no agent-facing capability or intent; this emerging opportunity is contextual.",
      "status": "not-applicable",
      "reason": "The site exposes a browse/watch media catalogue and declares no agent-facing capability or intent; this emerging opportunity is contextual."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "confidence": "high",
      "method": "Discoverability/raw HTML, metadata probes, robots and sitemap inspection",
      "evidence": "No summarisation, generation, or other inference task is part of the observed experience; on-device AI is not applicable.",
      "status": "not-applicable",
      "reason": "No summarisation, generation, or other inference task is part of the observed experience; on-device AI is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "confidence": "high",
      "method": "Baseline and post-interaction heap summaries after 20 menu toggles",
      "evidence": "After 20 menu toggles, heap self size was 7.13MB versus 6.80MB baseline and snapshot nodes rose 2%; this bounded one-run delta does not show unbounded growth.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-interaction.json"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "confidence": "high",
      "method": "Baseline and post-interaction heap summaries after 20 menu toggles",
      "evidence": "Baseline contact-page heap was 6.8MB self size with 142,679 nodes in the snapshot, proportionate and stable for the loaded third-party scripts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-interaction.json"
      ],
      "status": "pass"
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "confidence": "high",
      "method": "Baseline and post-interaction heap summaries after 20 menu toggles",
      "evidence": "Before/after heap summaries showed only a small bounded node delta after 20 toggles and no growing Detached* constructor among top populations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-interaction.json"
      ],
      "status": "pass"
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03",
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "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"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F10",
        "F25"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F27",
        "F28",
        "F29"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F30",
        "F31",
        "F32"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The site exposes a browse/watch media catalogue and declares no agent-facing capability or intent; this emerging opportunity is contextual. No summarisation, generation, or other inference task is part of the observed experience; on-device AI is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and initial age gate; represents the main listing and first-session experience.",
      "url": "https://m.hqporner.com",
      "conditions": [
        "360x800",
        "1440x900",
        "prefers-color-scheme light/dark",
        "prefers-reduced-motion reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "categories",
      "description": "Categories listing archetype and verification handoff.",
      "url": "https://m.hqporner.com/categories",
      "conditions": [
        "360x800",
        "verification activation"
      ],
      "result": "issues"
    },
    {
      "id": "detail",
      "description": "Representative video detail/watch archetype.",
      "url": "https://m.hqporner.com/hdporn/127087-you_have_a_hammer_for_me.html",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Search-results journey using a representative query.",
      "url": "https://m.hqporner.com/?q=test",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "contact",
      "description": "Primary public form archetype, including labels and validation semantics.",
      "url": "https://m.hqporner.com/contact",
      "conditions": [
        "360x800",
        "20 menu toggles for memory"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "HTTP failure/recovery archetype.",
      "url": "https://m.hqporner.com/definitely-not-a-real-page-404",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "The fixed dark palette does not respond to the user’s colour-scheme preference.",
      "evidence": "Light and dark emulation screenshots are visually identical, while the DOM reports color-scheme: normal.",
      "suggestedFix": "Declare color-scheme and use prefers-color-scheme or light-dark() to provide preference-driven light and dark palettes.",
      "effort": "small",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-light.png",
        "evidence/home-dark.png"
      ]
    },
    {
      "id": "F02",
      "severity": "low",
      "confidence": "high",
      "summary": "Route changes do not use view transitions.",
      "evidence": "The UI probe found no view-transition CSS and navigation is conventional full-document replacement.",
      "suggestedFix": "Add same-origin cross-document view transitions with a safe fallback and disable non-essential motion under reduced motion.",
      "effort": "small",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "faster-spa-view-transitions",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/ui-probe.json"
      ]
    },
    {
      "id": "F03",
      "severity": "medium",
      "confidence": "high",
      "summary": "The very long listing has no position-aware navigation or progress cue.",
      "evidence": "Layout measured a 16,547px mobile page; screenshots and DOM show static chrome with no scroll progress or scroll-state treatment.",
      "suggestedFix": "Add a compact sticky header or progress/return control that reacts to scroll state.",
      "effort": "small",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-position-aware-elements",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "id": "F04",
      "severity": "low",
      "confidence": "high",
      "summary": "Navigation and in-page state changes provide no attention cue.",
      "evidence": "No view-transition/highlight/scroll-marker treatment was found, and card links have empty visible text in the DOM probe.",
      "suggestedFix": "Use directional transitions or persistent current-state markers and descriptive card link text.",
      "effort": "small",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "directs-attention",
      "guidanceId": "directional-navigation-transitions",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/ui-probe.json"
      ]
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "summary": "A full-screen age-verification interstitial obscures every primary content page on load.",
      "evidence": "Mobile and desktop screenshots show a fixed blurred overlay covering the content before interaction.",
      "suggestedFix": "Keep legally required verification, but use a focused, accessible dialog with the minimum interruption and a reliable continuation path.",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png",
        "evidence/detail-mobile.png"
      ]
    },
    {
      "id": "F06",
      "severity": "high",
      "confidence": "high",
      "summary": "The age gate is an ad-hoc fixed div rather than a semantic modal dialog.",
      "evidence": "DOM CSS shows .ageverif_overlay/.ageverif_banner fixed divs; the primary action is an anchor with onclick and no href.",
      "suggestedFix": "Implement the gate with <dialog>, explicit labelling, focus containment, and a real button for the verification action.",
      "effort": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "summary": "Advertising and promotional chrome competes heavily with the content.",
      "evidence": "HAR recorded 145 requests and the DOM contains several ad-network promotions mixed among listing cards; screenshots show the content behind the gate.",
      "suggestedFix": "Reduce ad slots, label promotions clearly, and defer non-essential ad widgets until after the core content.",
      "effort": "small",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-dom.json"
      ]
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "summary": "Components rely on viewport CSS rather than container-aware adaptation.",
      "evidence": "The UI probe found zero @container rules, while reused listing/ad components are constrained through fixed and viewport media-query CSS.",
      "suggestedFix": "Give reusable cards and widgets containment and adapt them with size container queries.",
      "effort": "small",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/home-dom.json"
      ]
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus is invisible and many targets are undersized.",
      "evidence": "The first focused action computed outline-style:none; 50 of 115 interactive elements measured below 44px in one dimension.",
      "suggestedFix": "Add strong :focus-visible styles and enlarge or space small touch targets to at least 44x44 CSS px where practical.",
      "effort": "medium",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/ui-probe.json"
      ]
    },
    {
      "id": "F10",
      "severity": "critical",
      "confidence": "high",
      "summary": "The primary browse-to-watch journey is blocked by an external age-verification dependency.",
      "evidence": "Homepage and detail screenshots remain behind the gate; activating Verify My Age produced an empty fixed panel in the category capture rather than completing the journey.",
      "suggestedFix": "Provide a robust verification handoff with loading, failure, retry and return states, then restore the requested URL.",
      "effort": "medium",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/categories-mobile.png",
        "evidence/detail-mobile.png"
      ]
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "summary": "Verification and form flows lack useful recovery states.",
      "evidence": "The attempted verification showed a blank modal panel; the contact form marks no field required and provides no visible inline validation before submission.",
      "suggestedFix": "Expose loading/error states with retry/cancel and add post-interaction, accessible validation to forms.",
      "effort": "medium",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "validate-input-after-interaction",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/categories-mobile.png",
        "evidence/contact-probe.json"
      ]
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "summary": "Measured mobile loading misses good LCP and CLS thresholds.",
      "evidence": "Lighthouse measured LCP 3.4s and CLS 0.204; trace corroborated 2.03s LCP in a separate run.",
      "suggestedFix": "Reserve space for late content and prioritize the real LCP resource while deferring non-critical third parties.",
      "effort": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-layout-mobile.json"
      ]
    },
    {
      "id": "F13",
      "severity": "high",
      "confidence": "high",
      "summary": "The landing page performs a heavy, blocking network load.",
      "evidence": "HAR measured 145 requests and 6.62MB transferred, including eight parser-blocking stylesheets and six classic scripts without async/defer confirmed by the platform probe.",
      "suggestedFix": "Inline critical CSS, defer non-critical scripts/styles, lazy-load below-fold media, and apply effective caching.",
      "effort": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "summary": "Substantial unused third-party JavaScript ships on initial load.",
      "evidence": "Lighthouse estimated 250KiB unused JS, including analytics and repeated ad-provider payloads with 45% to 94% waste.",
      "suggestedFix": "Load analytics/ad libraries conditionally and remove duplicate ad-provider execution.",
      "effort": "small",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "summary": "Controls and images lack accessible names or alternatives.",
      "evidence": "Lighthouse failed image-alt; the image audit found eight missing alt attributes, including the menu icon and age-gate icon.",
      "suggestedFix": "Give controls accessible names and meaningful images alt text; mark decorative images with empty alt.",
      "effort": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/images.json"
      ]
    },
    {
      "id": "F16",
      "severity": "high",
      "confidence": "high",
      "summary": "Important text and the verification action fail minimum contrast.",
      "evidence": "Lighthouse measured 2.83:1 on Verify My Age and 3.06:1 on repeated metadata text, below 4.5:1.",
      "suggestedFix": "Adjust foreground/surface tokens to meet WCAG AA and verify all interaction states.",
      "effort": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "summary": "The age gate does not provide robust keyboard semantics or visible focus.",
      "evidence": "The gate is a generic div and its focused action has outline:none; the action is an anchor without href.",
      "suggestedFix": "Use a labelled dialog, a button, managed initial/return focus, and visible :focus-visible styling.",
      "effort": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/ui-probe.json"
      ]
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "The page disables zoom and video lacks text alternatives.",
      "evidence": "Viewport content includes maximum-scale=1,user-scalable=no; the detail probe found videos with no <track> captions; 50 targets are undersized.",
      "suggestedFix": "Allow user scaling, provide captions/transcripts, and enlarge touch targets.",
      "effort": "medium",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/detail-probe.json"
      ]
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page throws an uncaught JavaScript exception during load.",
      "evidence": "Lighthouse captured “$(...).nivoSlider is not a function” in custom.js line 206.",
      "suggestedFix": "Load the slider dependency before initialization or guard/remove the stale initializer.",
      "effort": "small",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "summary": "Images are not dimensioned or delivered responsively.",
      "evidence": "The image audit found all 54 images missing width/height, 47 below-fold images not lazy, 46 without srcset and 53 legacy-format assets.",
      "suggestedFix": "Set intrinsic dimensions, use responsive srcset/sizes, lazy loading, and modern formats.",
      "effort": "small",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/images.json"
      ]
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several actions and cards are not crawlable or descriptive links.",
      "evidence": "Lighthouse failed crawlable-anchors; Verify My Age is an anchor without href and the link probe recorded many empty-text detail links and # actions.",
      "suggestedFix": "Use buttons for actions and descriptive <a href> links for destinations.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-dom.json"
      ]
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "summary": "Video detail pages lack structured and social-preview metadata.",
      "evidence": "The detail probe found no JSON-LD, Open Graph tags or hreflang despite a clearly identified video entity.",
      "suggestedFix": "Add accurate VideoObject JSON-LD and Open Graph/Twitter metadata matching visible content.",
      "effort": "small",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/detail-probe.json"
      ]
    },
    {
      "id": "F23",
      "severity": "critical",
      "confidence": "high",
      "summary": "The HTTPS response omits baseline security headers and sets weak cookies.",
      "evidence": "Headers found no CSP, HSTS, nosniff, frame protection, Referrer-Policy or Permissions-Policy; cookies found three non-Secure and all six SameSite=None.",
      "suggestedFix": "Deploy a restrictive CSP, HSTS, nosniff, frame-ancestors, referrer/permissions policies, and Secure/Lax cookies where cross-site use is unnecessary.",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ]
    },
    {
      "id": "F24",
      "severity": "high",
      "confidence": "high",
      "summary": "The page sends a large tracking and advertising footprint before consent.",
      "evidence": "Tracker capture found 16 third-party origins including Google Analytics and Yandex/Webvisor; HAR attributes 6.61MB of 6.62MB to third-party origins.",
      "suggestedFix": "Minimise vendors and data, delay non-essential tracking until valid consent, and batch sparse analytics.",
      "effort": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F25",
      "severity": "high",
      "confidence": "high",
      "summary": "Failure handling is obscured by the same mandatory gate.",
      "evidence": "A genuine HTTP 404 response still renders the full-screen verification overlay, hiding any recovery content; verification itself produced an empty panel.",
      "suggestedFix": "Render clear 404/network recovery before non-essential scripts and ensure the gate has timeout, error and retry UI.",
      "effort": "medium",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "stabilize-reactive-state",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-status.txt",
        "evidence/categories-mobile.png"
      ]
    },
    {
      "id": "F26",
      "severity": "medium",
      "confidence": "high",
      "summary": "The document does not declare its language or direction.",
      "evidence": "UI and platform probes both report empty html.lang and html.dir.",
      "suggestedFix": "Set lang=\"en\" and use logical CSS properties so translated or bidirectional layouts remain robust.",
      "effort": "small",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "id": "F27",
      "severity": "high",
      "confidence": "high",
      "summary": "Promotional links are visually mixed into content and use misleading destinations.",
      "evidence": "The link probe shows local-dating and AI promotions whose href resolves to the homepage, alongside separate ad-network redirects, without clear ad semantics.",
      "suggestedFix": "Clearly label sponsored content, use truthful destinations, and separate promotions from editorial results.",
      "effort": "medium",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F28",
      "severity": "medium",
      "confidence": "high",
      "summary": "The contact form does not express required fields or post-interaction validation.",
      "evidence": "The contact probe found Name, Email and Message all required=false and no demonstrated inline error model.",
      "suggestedFix": "Mark required fields, use appropriate input types, and validate after interaction with accessible error announcements.",
      "effort": "small",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "validate-input-after-interaction",
      "guidanceCategory": "user-experience",
      "pathId": "contact",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/contact-probe.json"
      ]
    },
    {
      "id": "F29",
      "severity": "medium",
      "confidence": "high",
      "summary": "The contact and search inputs omit useful autocomplete semantics.",
      "evidence": "The contact probe found empty autocomplete values and the homepage search explicitly uses autocomplete=off.",
      "suggestedFix": "Use email/name autocomplete tokens and avoid disabling autocomplete on ordinary search/input flows.",
      "effort": "small",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-payment-form",
      "guidanceCategory": "user-experience",
      "pathId": "contact",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/contact-probe.json",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F30",
      "severity": "high",
      "confidence": "high",
      "summary": "The image payload is broadly unoptimised.",
      "evidence": "Image audit found 53 legacy-format images, 46 without responsive sources, 47 eager below-fold images and 54 without intrinsic dimensions.",
      "suggestedFix": "Generate AVIF/WebP variants, srcset/sizes, intrinsic dimensions and below-fold lazy loading.",
      "effort": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/images.json"
      ]
    },
    {
      "id": "F31",
      "severity": "high",
      "confidence": "high",
      "summary": "Initial load fetches multiple promotional video previews and analytics work.",
      "evidence": "HAR transferred 4.47MB as XHR/fetch, led by five third-party MP4 files, before the user reached core content.",
      "suggestedFix": "Do not fetch preview video until visible or requested; deprioritize background analytics and ads.",
      "effort": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F32",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party media dominates the page budget.",
      "evidence": "HAR measured 6.61MB third-party transfer and 144 of 145 requests; five ad-network MP4 previews account for most bytes.",
      "suggestedFix": "Set a third-party/media budget, defer previews, reduce vendors, and cache only media that provides direct user value.",
      "effort": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://m.hqporner.com",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ]
    }
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at 360x800 with load-time gate",
      "condition": "viewport 360x800",
      "findingIds": [
        "F01",
        "F03",
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Homepage at desktop viewport with load-time gate",
      "condition": "viewport 1440x900",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light.png",
      "caption": "Homepage under light preference",
      "condition": "prefers-color-scheme: light",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Homepage under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/categories-mobile.png",
      "caption": "Category route after verification activation",
      "condition": "viewport 360x800",
      "findingIds": [
        "F10",
        "F11",
        "F25"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-mobile.png",
      "caption": "Representative video detail route",
      "condition": "viewport 360x800",
      "findingIds": [
        "F05",
        "F10"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "Representative search-results route",
      "condition": "viewport 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/contact-mobile.png",
      "caption": "Contact form route",
      "condition": "viewport 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/404-mobile.png",
      "caption": "HTTP 404 route obscured by gate",
      "condition": "viewport 360x800",
      "findingIds": [
        "F25"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered homepage DOM and CSS",
      "findingIds": [
        "F04",
        "F06",
        "F07",
        "F08",
        "F17",
        "F21",
        "F27"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "Mobile layout, CLS and overflow metrics",
      "findingIds": [
        "F03",
        "F12"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw HTML versus rendered content",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered browser view",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "No-JS crawler view",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Full network capture",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact network summary",
      "findingIds": [
        "F07",
        "F13",
        "F14",
        "F24",
        "F27",
        "F31",
        "F32"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools performance trace",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact trace summary",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse audit JSON",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Selected Lighthouse results",
      "findingIds": [
        "F06",
        "F12",
        "F14",
        "F15",
        "F16",
        "F19",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security-header audit",
      "findingIds": [
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie audit",
      "findingIds": [
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Tracker-origin audit",
      "findingIds": [
        "F24",
        "F32"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-secret scan",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image audit",
      "findingIds": [
        "F15",
        "F20",
        "F30"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Baseline heap summary",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-interaction.json",
      "caption": "Heap after 20 menu toggles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/ui-probe.json",
      "caption": "Focus, target size and platform feature probe",
      "findingIds": [
        "F02",
        "F04",
        "F08",
        "F09",
        "F17",
        "F18",
        "F26"
      ]
    },
    {
      "type": "other",
      "path": "evidence/motion-probe.json",
      "caption": "Reduced-motion animation probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Head-resource and platform probe",
      "findingIds": [
        "F13",
        "F26"
      ]
    },
    {
      "type": "other",
      "path": "evidence/contact-probe.json",
      "caption": "Contact semantics and metadata probe",
      "findingIds": [
        "F11",
        "F28",
        "F29"
      ]
    },
    {
      "type": "other",
      "path": "evidence/detail-probe.json",
      "caption": "Video metadata and media probe",
      "findingIds": [
        "F18",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots.txt response",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap.xml response",
      "findingIds": []
    }
  ],
  "taskList": [
    {
      "id": "T1",
      "title": "Make the legally required age-verification journey semantic, accessible and recoverable",
      "priority": 1,
      "findingIds": [
        "F05",
        "F06",
        "F10",
        "F11",
        "F17",
        "F25"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T2",
      "title": "Deploy baseline security headers and privacy-safe cookie defaults",
      "priority": 2,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T3",
      "title": "Cut third-party tracking, preview-media and ad payloads before consent",
      "priority": 3,
      "findingIds": [
        "F07",
        "F13",
        "F14",
        "F24",
        "F31",
        "F32"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T4",
      "title": "Fix keyboard focus, target sizes, contrast, alternatives and zoom",
      "priority": 4,
      "findingIds": [
        "F09",
        "F15",
        "F16",
        "F17",
        "F18"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T5",
      "title": "Reserve image space and modernise responsive image delivery",
      "priority": 5,
      "findingIds": [
        "F12",
        "F20",
        "F30"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T6",
      "title": "Make promotions honest and links crawlable/descriptive",
      "priority": 6,
      "findingIds": [
        "F21",
        "F27"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T7",
      "title": "Add humane contact validation and input assistance",
      "priority": 7,
      "findingIds": [
        "F28",
        "F29"
      ],
      "guidanceId": "validate-input-after-interaction",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T15-39-55-384Z"
}
