{
  "url": "https://es.pornhub.com",
  "auditedAt": "2026-07-18T06:18:00.000Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit across six representative paths. The required age gate was treated as applicable site content; media playback and explicit-content interaction were intentionally not needed to assess the templates.",
  "page": {
    "appType": "mpa",
    "framework": "Vue present among several page scripts; primarily server-rendered MPA",
    "notes": "Adult media catalog with mandatory age verification, consent UI, browse/search/category listings, detail pages and account entry."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "lighthouse",
    "heap-summary",
    "raw-http"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "custom-button-actions",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Desktop entry/age gate",
      "condition": "viewport: 1440x900",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Mobile entry showing clipped age gate",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F03",
        "F05",
        "F13",
        "F26"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Entry under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Mobile layout and CLS observer",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F05",
        "F08",
        "F09",
        "F26"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact load performance trace summary",
      "condition": "desktop load",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact network summary",
      "condition": "desktop load",
      "findingIds": [
        "F10",
        "F11",
        "F23",
        "F31",
        "F32"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Homepage raw-vs-rendered discoverability",
      "condition": "JavaScript on/off",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Homepage browser view",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Homepage crawler view",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security header inspection",
      "condition": "main response",
      "findingIds": [
        "F22",
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie attribute inspection",
      "condition": "initial load",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker inventory",
      "condition": "initial load",
      "findingIds": [
        "F23",
        "F32"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image inventory",
      "condition": "homepage",
      "findingIds": [
        "F16",
        "F30"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Lighthouse compact audit summary",
      "condition": "mobile simulation",
      "findingIds": [
        "F08",
        "F09",
        "F11",
        "F16"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-failing-audits.json",
      "caption": "Lighthouse failing-audits extract",
      "condition": "mobile simulation",
      "findingIds": [
        "F15",
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-focus.json",
      "caption": "Preference and focus probe",
      "condition": "dark + reduced motion",
      "findingIds": [
        "F01",
        "F07",
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/mobile-targets.json",
      "caption": "Mobile target-size probe",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F07",
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/runtime-signals.json",
      "caption": "Runtime/CSS/memory signals",
      "condition": "homepage",
      "findingIds": [
        "F01",
        "F02",
        "F03",
        "F06",
        "F24"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Baseline heap summary",
      "condition": "after load",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Heap summary after repeated combobox interaction",
      "condition": "10 repetitions",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-structure.json",
      "caption": "Homepage metadata and semantic structure",
      "condition": "homepage",
      "findingIds": [
        "F04",
        "F10",
        "F12",
        "F18",
        "F19",
        "F28"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/detail-structure.json",
      "caption": "Video detail metadata/media structure",
      "condition": "detail",
      "findingIds": [
        "F14",
        "F18",
        "F20",
        "F21"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/detail-discoverability.json",
      "caption": "Video detail raw-vs-rendered comparison",
      "condition": "JavaScript on/off",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-headers.txt",
      "caption": "robots.txt HTTP redirect evidence",
      "condition": "raw HTTP",
      "findingIds": [
        "F19",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.json",
      "caption": "sitemap 404 evidence",
      "condition": "direct navigation",
      "findingIds": [
        "F20",
        "F27"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/signup-structure.json",
      "caption": "Account route redirect/form evidence",
      "condition": "direct navigation",
      "findingIds": [
        "F24",
        "F29"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-side secret scan",
      "condition": "homepage",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/recon.json",
      "caption": "Homepage route/link/text recon",
      "condition": "homepage",
      "findingIds": [
        "F28"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/listing-desktop.png",
      "caption": "Representative listing template",
      "condition": "desktop 1440x900",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Computed-style and stylesheet-signal probe under prefers-color-scheme: dark",
      "evidence": "The page is dark in both default and emulated-dark conditions, while runtime HTML/CSS signals contain no prefers-color-scheme or color-scheme support; the fixed palette does not respond to the user preference.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-focus.json",
        "evidence/runtime-signals.json",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Emulated reduced-motion Runtime probe",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() returned zero active animations on the entry state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility audit plus screenshot review",
      "evidence": "Lighthouse reported no color-contrast audit failures and the dark entry screen retained high-contrast white/orange controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Rendered HTML/CSS signal inspection",
      "evidence": "The runtime/source signal probe found no view-transition usage, so route and state changes use abrupt swaps.",
      "pathIds": [
        "home",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/runtime-signals.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "CSS signal probe plus layout and trace long-task observers",
      "evidence": "No scroll-linked animations or scroll-timeline signals were present, and layout/trace observers recorded no long tasks; the page does not implement scroll effects with blocking handlers in the observed state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/runtime-signals.json",
        "evidence/home-mobile-layout.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "DOM interaction-model inspection",
      "evidence": "The representative pages use native document scrolling and ordinary links/buttons; no pointer-driven gesture surface or custom gesture requirement appeared in the DOM recon.",
      "pathIds": [
        "home",
        "listing",
        "categories"
      ],
      "artifacts": [
        "evidence/home-structure.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Screenshot and CSS signal inspection",
      "evidence": "The long feed exposes static navigation and no scroll-state/container-query or progress-indicator signal.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/runtime-signals.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "DOM overlay inventory and representative screenshots",
      "evidence": "No tooltip, contextual popover, or viewport-edge anchored menu was present on the inspected entry/listing/detail states, so no drifting manually positioned overlay was observed.",
      "pathIds": [
        "home",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/home-desktop.png",
        "evidence/listing-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Visual hierarchy and link-text review",
      "evidence": "The age gate presents a single prominent heading and paired enter/exit actions, while navigation and media links use descriptive visible labels.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Initial-load screenshot and DOM text review",
      "evidence": "The initial full-screen age gate is required for this adult site and provides immediate Enter, Exit, parental-control and terms choices; cookie consent also offers essential-only and customization controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "DOM primitive inventory",
      "evidence": "The age and consent overlays are custom DIV structures with ARIA roles; the DOM contains zero dialog, popover, and details elements.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-structure.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop screenshot review",
      "evidence": "The required age gate is visually restrained and content-focused, with no decorative imagery competing with its decision text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile screenshot plus layout metrics",
      "evidence": "At 360px the entry modal is visibly clipped on the right: its heading, legal text, and Exit action extend beyond the captured viewport even though overflow is suppressed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Rendered HTML/CSS signal inspection",
      "evidence": "The rendered source signal probe found no @container/container-type use across reused feed and overlay components.",
      "pathIds": [
        "home",
        "listing",
        "categories"
      ],
      "artifacts": [
        "evidence/runtime-signals.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Focus and target-size probes",
      "evidence": "Programmatic focus did not move to the Enter button and its computed outline was none; the mobile probe also counted 85 rendered targets below 24px in one dimension.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences-focus.json",
        "evidence/mobile-targets.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport screenshot walkthrough",
      "evidence": "The entry page states that it is an adult site and makes Enter and Exit the dominant paired actions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Representative route DOM/discoverability walkthrough",
      "evidence": "Direct browse, categories, search-results and detail URLs returned populated server-rendered content, providing a continuous find-and-open-content path without requiring playback for verification.",
      "pathIds": [
        "listing",
        "categories",
        "search",
        "detail"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/detail-discoverability.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Entry-state screenshot and text review",
      "evidence": "The constrained entry state provides explicit Exit, parental-control guidance, terms and consent choices, preserving a safe recovery path.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse and trace/layout measurement",
      "evidence": "Lighthouse measured LCP 4541ms and CLS 0.824; both exceed the good Core Web Vitals thresholds.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse plus layout-shift observer",
      "evidence": "Lighthouse measured CLS 0.824 and the mobile layout observer independently recorded a 0.102 shift around 1.86s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "DevTools trace and Lighthouse",
      "evidence": "The trace measured zero long tasks and 0ms total blocking time; Lighthouse TBT was 32.5ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary confirmed against DOM/source capture",
      "evidence": "The HAR recorded 173 requests and 5.23MB transferred, including seven parser-inserted very-high-priority stylesheets and multiple parser-inserted scripts requiring blocking review.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-structure.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse coverage diagnostics and HAR",
      "evidence": "Lighthouse estimated 294,838 bytes of unused JavaScript and 75,725 bytes of unused CSS; 40 scripts were requested.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse, image and DOM probes",
      "evidence": "Lighthouse reported zero image-alt and label failures; all 37 inspected images had alt text, and the search field has aria-label=\"Search\".",
      "pathIds": [
        "home",
        "detail"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/images.json",
        "evidence/home-structure.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse color-contrast audit",
      "evidence": "Lighthouse reported zero contrast failures on the tested page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Heading/landmark inventory and focus probe",
      "evidence": "The homepage has no H1, overlays use custom role-bearing DIVs, and focusing the primary Enter button did not produce active focus or a visible outline.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/preferences-focus.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile screenshot review",
      "evidence": "At 360px the age-gate heading, paragraphs, links and second action are clipped off-screen, preventing comfortable reading.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Target-size and media-track DOM probes",
      "evidence": "The mobile probe counted 85 rendered controls/links below 24px in one dimension, and the representative detail page exposes two video elements but no caption tracks.",
      "pathIds": [
        "home",
        "detail"
      ],
      "artifacts": [
        "evidence/mobile-targets.json",
        "evidence/detail-structure.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse console audit",
      "evidence": "Lighthouse recorded one console-error item during load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-failing-audits.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse document audit and image inventory",
      "evidence": "Although doctype/charset are present, the image audit found 3 images without dimensions and 20 legacy-format images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices diagnostics",
      "evidence": "Lighthouse reported two deprecated-API warnings and DevTools inspector issues.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-failing-audits.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "DOM metadata probes",
      "evidence": "Homepage and detail both expose the generic title “Pornhub” and no meta description.",
      "pathIds": [
        "home",
        "detail"
      ],
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/detail-structure.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Anchor inventory plus raw HTTP robots request",
      "evidence": "18 of 124 homepage anchors use javascript: URLs, and /robots.txt redirects to the homepage instead of serving robot directives.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/robots-headers.txt"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Detail metadata, robots and sitemap probes",
      "evidence": "The detail response declares noindex,nofollow and canonicalizes to the homepage; hreflang is absent and /sitemap.xml returns 404.",
      "pathIds": [
        "detail"
      ],
      "artifacts": [
        "evidence/detail-structure.json",
        "evidence/sitemap.json",
        "evidence/robots-headers.txt"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Detail-page metadata inventory",
      "evidence": "The representative detail page has no JSON-LD and no Open Graph tags despite representing a video entity.",
      "pathIds": [
        "detail"
      ],
      "artifacts": [
        "evidence/detail-structure.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Security-header and cookie primitives",
      "evidence": "HTTPS and HSTS are present, but CSP and X-Content-Type-Options are missing; cookie audit also found an rp cookie without Secure and all seven cookies using SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Tracker and HAR primitives",
      "evidence": "The load contacted 12 third-party origins, including Google Tag Manager and DoubleClick; 102 requests and 2.29MB were third-party.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Runtime API and account-route probes",
      "evidence": "No permission prompt fired on load, but the site exposes sign-in while the inspected runtime contained no WebAuthn/passkey signal and the account route redirected to the homepage.",
      "pathIds": [
        "home",
        "account"
      ],
      "artifacts": [
        "evidence/runtime-signals.json",
        "evidence/signup-structure.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Security-header primitive",
      "evidence": "HSTS and SAMEORIGIN framing are configured, but CSP/frame-ancestors, Referrer-Policy and Permissions-Policy are absent from the main response.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Discoverability raw-vs-rendered comparison",
      "evidence": "Raw HTML is substantial rather than an empty JS shell; the detail H1 survives without JavaScript and crawler coverage was 37%.",
      "pathIds": [
        "home",
        "detail"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/detail-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile screenshot and layout inspection",
      "evidence": "The age-verification overlay is clipped at 360px, including its legal copy and Exit action, so this critical runtime layer does not remain robust at a common viewport.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "This streaming/search service is intrinsically online; an offline media experience is not a reasonable requirement for the audited public paths.",
      "reason": "This streaming/search service is intrinsically online; an offline media experience is not a reasonable requirement for the audited public paths."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Direct 404 route inspection",
      "evidence": "The sitemap/unknown-resource test returned a bare “404 Not Found openresty” page with no site navigation, explanation, or recovery action.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/sitemap.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "DOM language, visible-text and metadata review",
      "evidence": "html lang=\"es\" is correct, but visible Spanish pages contain substantial untranslated English UI/content and expose no hreflang alternate links.",
      "pathIds": [
        "home",
        "detail"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-structure.json"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "No dates, currencies, durations-as-locale-data, or other locale-formatted values were part of the representative task surfaces.",
      "reason": "No dates, currencies, durations-as-locale-data, or other locale-formatted values were part of the representative task surfaces."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "No scheduled event or time-zone-sensitive flow appeared on the representative paths.",
      "reason": "No scheduled event or time-zone-sensitive flow appeared on the representative paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Entry-state DOM and screenshot review",
      "evidence": "The observed consent layer offers Accept All, Accept Only Essential and Customize choices, while the age gate provides equally visible Enter and Exit actions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "The inspected primary search path has no required input or validation error state, and the account form was not served at its direct route.",
      "reason": "The inspected primary search path has no required input or validation error state, and the account form was not served at its direct route."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "high",
      "method": "Form-control inventory",
      "evidence": "The only available user input was a clearly named search control; no address, payment, sign-in or sign-up field requiring autocomplete assistance was served.",
      "pathIds": [
        "home",
        "account"
      ],
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/signup-structure.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Account-route walkthrough",
      "evidence": "Direct navigation to the account-creation route silently redirected to the homepage, leaving no clear sign-up state, explanation, or recovery path.",
      "pathIds": [
        "account"
      ],
      "artifacts": [
        "evidence/signup-structure.json"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Image primitive",
      "evidence": "Of 37 images, 33 lacked srcset and 20 used legacy formats; three omitted dimensions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR request inventory",
      "evidence": "The initial load made 173 requests, including 38 XHR/fetches and duplicated analytics delivery, before a content choice was made.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR and tracker primitives",
      "evidence": "Third parties accounted for 102 requests and 2.29MB, with ad-network imagery and three Google Tag Manager scripts among the largest costs.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "Agent-facing capabilities are emerging and not declared as an intent for this public adult-media catalog; absence of WebMCP is treated as an opportunity, not a failure.",
      "reason": "Agent-facing capabilities are emerging and not declared as an intent for this public adult-media catalog; absence of WebMCP is treated as an opportunity, not a failure."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon",
      "evidence": "No user task in the representative public paths requires on-device inference, and agent readiness is contextual/emerging.",
      "reason": "No user task in the representative public paths requires on-device inference, and agent readiness is contextual/emerging."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Baseline and post-interaction heap-summary comparison",
      "evidence": "After ten open/close attempts on the language combobox, heap self size increased by 752,176 bytes (2.0%) and closures by 98 (0.2%), with no unbounded retained-growth signal in this bounded sample.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Heap summary and Performance.memory/DOM probe",
      "evidence": "The loaded media feed used 37.99MB heap self size and 1,425 live DOM elements, a bounded footprint for the observed content-rich page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/runtime-signals.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Before/after heap constructor comparison and runtime listener probe",
      "evidence": "No Detached* constructor appeared among either heap summary’s largest constructors; closures changed only from 52,191 to 52,289 and instrumentable inline listeners were bounded at eight.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/runtime-signals.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F09",
        "F10",
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19",
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F22",
        "F23",
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F30",
        "F31",
        "F32"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Derived from check outcomes."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage, age-verification and consent entry state; represents global navigation and the main feed.",
      "url": "https://es.pornhub.com/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "listing",
      "description": "Video listing template; represents browse/navigation and repeated media cards.",
      "url": "https://es.pornhub.com/video",
      "conditions": [
        "desktop 1440x900"
      ],
      "result": "issues"
    },
    {
      "id": "categories",
      "description": "Category index template; represents taxonomy navigation.",
      "url": "https://es.pornhub.com/categories",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "detail",
      "description": "Representative video detail page, inspected without starting playback; represents media metadata and controls.",
      "url": "https://es.pornhub.com/view_video.php?viewkey=686455fc15a41",
      "conditions": [
        "desktop 1440x900",
        "JavaScript-disabled crawler comparison"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Search-results template for the query “podcast”; represents the primary find-content journey.",
      "url": "https://es.pornhub.com/video/search?search=podcast",
      "conditions": [
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "account",
      "description": "Direct account-creation route; represents sign-up/account entry.",
      "url": "https://es.pornhub.com/user/create_account",
      "conditions": [
        "direct navigation"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "The fixed dark palette does not respond to color-scheme preference.",
      "evidence": "Dark emulation remains usable but source/runtime probes contain no color-scheme preference support.",
      "suggestedFix": "Declare color-scheme and provide preference-driven light/dark tokens with light-dark() or prefers-color-scheme.",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/preferences-focus.json",
        "evidence/runtime-signals.json",
        "evidence/home-dark.png"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F02",
      "severity": "low",
      "confidence": "high",
      "summary": "Route and state changes do not use View Transitions.",
      "evidence": "No view-transition signal was found across the rendered source.",
      "suggestedFix": "Add same-document or cross-document View Transitions to meaningful route/state changes, with reduced-motion handling.",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/runtime-signals.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "summary": "The long feed has no scroll-state-aware navigation cue.",
      "evidence": "No scroll-state query or progress affordance was found.",
      "suggestedFix": "Use a shrinking sticky header or lightweight progress/scrollability affordance driven by scroll-state where useful.",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "css",
      "artifacts": [
        "evidence/runtime-signals.json",
        "evidence/home-mobile.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F04",
      "severity": "medium",
      "confidence": "high",
      "summary": "Critical overlays use custom DIVs instead of semantic dialog primitives.",
      "evidence": "DOM inventory found custom role=alertdialog/dialog structures and zero dialog/popover/details elements.",
      "suggestedFix": "Use <dialog> for the age/consent modal and declarative controls/light dismiss where policy permits.",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/home-structure.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F05",
      "severity": "critical",
      "confidence": "high",
      "summary": "The age gate is clipped at 360px.",
      "evidence": "Mobile screenshot cuts off heading, legal copy and the Exit action despite no reported scroll overflow.",
      "suggestedFix": "Make the modal inline-size: min(100% - spacing, max width), remove fixed minimum widths, allow wrapping, and verify reflow at 320–400px.",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "summary": "Reusable components expose no container-query adaptation.",
      "evidence": "Rendered CSS/HTML signals contain no @container or container-type usage.",
      "suggestedFix": "Apply container-type and size-aware component styles where cards/overlays are reused at different widths.",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "css",
      "artifacts": [
        "evidence/runtime-signals.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus and target sizing are unreliable.",
      "evidence": "Primary-button focus did not become active or visible; 85 rendered targets were below 24px in one dimension.",
      "suggestedFix": "Restore native focusability, add a strong :focus-visible ring, and enlarge compact links/buttons to accessible target sizes.",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/preferences-focus.json",
        "evidence/mobile-targets.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F08",
      "severity": "high",
      "confidence": "high",
      "summary": "Core Web Vitals are outside the good range.",
      "evidence": "Lighthouse measured LCP 4.54s and CLS 0.824.",
      "suggestedFix": "Prioritize the LCP element, reserve layout space, and defer non-critical scripts/styles; verify LCP <=2.5s and CLS <=0.1.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "summary": "Late content causes severe visual instability.",
      "evidence": "CLS was 0.824 in Lighthouse and 0.102 in the mobile layout observer.",
      "suggestedFix": "Reserve dimensions for banners/images and stabilize font/ad slots before paint.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "summary": "The critical network path is large and render-blocking.",
      "evidence": "HAR recorded 173 requests, 5.23MB, seven high-priority parser stylesheets and parser scripts.",
      "suggestedFix": "Consolidate critical CSS, defer non-critical styles/scripts, and set intentional preload priorities.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-preload-priority",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-structure.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "summary": "Substantial unused JavaScript and CSS ship on first load.",
      "evidence": "Lighthouse estimated 294,838 unused JS bytes and 75,725 unused CSS bytes.",
      "suggestedFix": "Code-split route features and conditionally load ads/analytics and page-specific styles.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "summary": "Heading semantics and keyboard focus are incomplete.",
      "evidence": "Homepage has no H1 and the primary Enter control showed no active/visible programmatic focus.",
      "suggestedFix": "Add one descriptive H1, use semantic landmarks/dialog, and preserve a logical visible focus order.",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/preferences-focus.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F13",
      "severity": "critical",
      "confidence": "high",
      "summary": "Legal and action text does not reflow on mobile.",
      "evidence": "The 360px screenshot clips multiple lines and controls off the viewport.",
      "suggestedFix": "Remove fixed-width modal internals and test text wrapping/zoom at narrow widths.",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "artifacts": [
        "evidence/home-mobile.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "summary": "Small targets and missing video caption tracks reduce access.",
      "evidence": "85 rendered controls/links are below 24px in one dimension; the detail page has two videos and zero tracks.",
      "suggestedFix": "Increase target sizes and provide synchronized captions/subtitles or an equivalent transcript for media.",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "artifacts": [
        "evidence/mobile-targets.json",
        "evidence/detail-structure.json"
      ],
      "effort": "large",
      "pathId": "detail",
      "url": "https://es.pornhub.com/view_video.php?viewkey=686455fc15a41"
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page logs a console error during load.",
      "evidence": "Lighthouse console audit reported one item.",
      "suggestedFix": "Resolve the recorded runtime/network exception and keep production loads console-clean.",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/lighthouse-failing-audits.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery has avoidable structural and format issues.",
      "evidence": "Three images lack dimensions and 20 use legacy formats.",
      "suggestedFix": "Set intrinsic width/height or aspect-ratio and serve modern responsive sources.",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "summary": "Deprecated APIs and inspector issues remain.",
      "evidence": "Lighthouse found two deprecation warnings and logged DevTools Issues.",
      "suggestedFix": "Replace deprecated APIs and clear all production DevTools Issues.",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/lighthouse-failing-audits.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "Page titles are generic and descriptions are absent.",
      "evidence": "Homepage and detail both report “Pornhub” and no meta description.",
      "suggestedFix": "Generate unique descriptive titles and meta descriptions per template/entity.",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/detail-structure.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F19",
      "severity": "high",
      "confidence": "high",
      "summary": "Crawler navigation and robots delivery are broken.",
      "evidence": "18 anchors use javascript: and /robots.txt redirects to the homepage.",
      "suggestedFix": "Use real href URLs for navigation and serve a valid robots.txt with an explicit policy.",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/home-structure.json",
        "evidence/robots-headers.txt"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F20",
      "severity": "high",
      "confidence": "high",
      "summary": "Indexing signals conflict on detail pages.",
      "evidence": "Detail is noindex,nofollow, canonicals to home, has no hreflang, and sitemap.xml is 404.",
      "suggestedFix": "Choose an intentional indexing policy; for public pages use self-canonicals, aligned robots/sitemap, and locale alternates.",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/detail-structure.json",
        "evidence/sitemap.json",
        "evidence/robots-headers.txt"
      ],
      "effort": "medium",
      "pathId": "detail",
      "url": "https://es.pornhub.com/view_video.php?viewkey=686455fc15a41"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "summary": "Video pages lack structured and social metadata.",
      "evidence": "No JSON-LD or Open Graph tags were found on the representative detail page.",
      "suggestedFix": "Add accurate VideoObject JSON-LD and Open Graph metadata matching visible content.",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "artifacts": [
        "evidence/detail-structure.json"
      ],
      "effort": "small",
      "pathId": "detail",
      "url": "https://es.pornhub.com/view_video.php?viewkey=686455fc15a41"
    },
    {
      "id": "F22",
      "severity": "high",
      "confidence": "high",
      "summary": "Transport hardening and cookie attributes are incomplete.",
      "evidence": "CSP and nosniff are missing; rp lacks Secure and all seven cookies use SameSite=None.",
      "suggestedFix": "Add a restrictive CSP and nosniff; mark all HTTPS cookies Secure and use Lax/Strict unless cross-site behavior is required.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F23",
      "severity": "high",
      "confidence": "high",
      "summary": "The pre-consent third-party footprint is large.",
      "evidence": "12 third-party origins, 102 requests and 2.29MB include GTM and DoubleClick.",
      "suggestedFix": "Default to essential-only, gate optional tags on consent, minimize events and batch approved analytics.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F24",
      "severity": "medium",
      "confidence": "high",
      "summary": "No phishing-resistant authentication signal was found.",
      "evidence": "Sign-in exists, but runtime/account probes found no WebAuthn/passkey surface and account navigation redirected home.",
      "suggestedFix": "Offer passkeys/WebAuthn in sign-in and account management while keeping prompts in context.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "security",
      "artifacts": [
        "evidence/runtime-signals.json",
        "evidence/signup-structure.json"
      ],
      "effort": "large",
      "pathId": "account",
      "url": "https://es.pornhub.com/user/create_account"
    },
    {
      "id": "F25",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several browser-enforced defensive policies are absent.",
      "evidence": "Referrer-Policy and Permissions-Policy are missing, and no CSP frame-ancestors policy is served.",
      "suggestedFix": "Add least-privilege Referrer-Policy and Permissions-Policy and express framing in CSP.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "artifacts": [
        "evidence/headers.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F26",
      "severity": "high",
      "confidence": "high",
      "summary": "The critical overlay is not resilient at narrow widths.",
      "evidence": "The required age-verification layer clips its content and second action at 360px.",
      "suggestedFix": "Rebuild the overlay with intrinsic sizing, semantic dialog behavior, and viewport-edge-safe reflow.",
      "principleId": "be-resilient",
      "principleCheckId": "resilient-runtime-behaviour",
      "guidanceId": "resilient-context-menus-and-nested-dropdowns",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F27",
      "severity": "medium",
      "confidence": "high",
      "summary": "HTTP failure state is a dead end.",
      "evidence": "The tested 404 response is only “404 Not Found openresty” with no recovery action.",
      "suggestedFix": "Serve a branded lightweight 404 with explanation, search/home links and preserved language.",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/sitemap.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F28",
      "severity": "medium",
      "confidence": "high",
      "summary": "Localization signals and translation completeness are inconsistent.",
      "evidence": "lang=es is present, but visible strings remain English and no hreflang alternates exist.",
      "suggestedFix": "Finish Spanish localization, use logical properties, and publish hreflang links for supported locales.",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "internationalization",
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-structure.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F29",
      "severity": "high",
      "confidence": "high",
      "summary": "The account creation journey silently redirects to home.",
      "evidence": "The direct create-account URL finishes at the homepage without an account form or explanation.",
      "suggestedFix": "Preserve a clear account route, state prerequisites, and provide an actionable recovery path.",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "autofill-sign-up-form",
      "guidanceCategory": "forms",
      "artifacts": [
        "evidence/signup-structure.json"
      ],
      "effort": "medium",
      "pathId": "account",
      "url": "https://es.pornhub.com/user/create_account"
    },
    {
      "id": "F30",
      "severity": "medium",
      "confidence": "high",
      "summary": "Most images are not responsive or modern-format.",
      "evidence": "33/37 images lack srcset and 20 use legacy formats.",
      "suggestedFix": "Generate AVIF/WebP responsive variants with srcset/sizes and retained intrinsic dimensions.",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/images.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F31",
      "severity": "medium",
      "confidence": "high",
      "summary": "The entry load performs excessive background/network work.",
      "evidence": "173 requests include 38 XHR/fetches before the user enters.",
      "suggestedFix": "Defer optional fetching until intent/consent and batch low-priority telemetry.",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    },
    {
      "id": "F32",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party scripts and ad media dominate the resource budget.",
      "evidence": "Third parties consume 102 requests and 2.29MB, including large ad images and GTM bundles.",
      "suggestedFix": "Set a third-party budget, remove low-value vendors, defer ad media and cache proportionately.",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://es.pornhub.com/"
    }
  ],
  "taskList": [
    {
      "id": "T1",
      "title": "Fix age-gate reflow, semantics, focus and target sizes",
      "priority": 1,
      "findingIds": [
        "F04",
        "F05",
        "F07",
        "F12",
        "F13",
        "F14",
        "F26"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T2",
      "title": "Stabilize layout and reduce LCP-critical network work",
      "priority": 2,
      "findingIds": [
        "F08",
        "F09",
        "F10",
        "F11"
      ],
      "guidanceId": "optimize-preload-priority",
      "status": "open"
    },
    {
      "id": "T3",
      "title": "Gate and reduce third-party analytics/advertising",
      "priority": 3,
      "findingIds": [
        "F23",
        "F31",
        "F32"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T4",
      "title": "Repair titles, descriptions, canonical/robots/sitemap and video metadata",
      "priority": 4,
      "findingIds": [
        "F18",
        "F19",
        "F20",
        "F21"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T5",
      "title": "Harden CSP, cookies and browser policies",
      "priority": 5,
      "findingIds": [
        "F22",
        "F25"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T6",
      "title": "Modernize responsive image delivery",
      "priority": 6,
      "findingIds": [
        "F16",
        "F30"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T7",
      "title": "Restore account flow and add passkey support",
      "priority": 7,
      "findingIds": [
        "F24",
        "F29"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T8",
      "title": "Clear console, deprecation and DevTools issues",
      "priority": 8,
      "findingIds": [
        "F15",
        "F17"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T9",
      "title": "Finish Spanish localization and locale metadata",
      "priority": 9,
      "findingIds": [
        "F28"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Add preference-driven theming and restrained transitions/navigation cues",
      "priority": 10,
      "findingIds": [
        "F01",
        "F02",
        "F03",
        "F06"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Provide a recoverable branded 404 state",
      "priority": 11,
      "findingIds": [
        "F27"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T06-10-02-638Z"
}
