{
  "url": "https://th.xhsocial.com",
  "auditedAt": "2026-07-17T20:42:38.574Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Atomic coverage complete across 58 checks and five representative public paths. Logged-in account management, payment, live-chat and destructive registration submission were not covered.",
  "page": {
    "appType": "hybrid",
    "framework": "server-rendered multi-page application with client-side enhancement",
    "notes": "Thai-localized adult media catalogue. Desktop and mobile markup vary by user agent. Public SSR content is substantial; PWA manifest/service worker are present."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "discoverability",
    "har",
    "trace",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "Lighthouse",
    "axe-core",
    "Modern Web Guidance 0.0.172"
  ],
  "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",
    "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"
  ],
  "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": "pass",
      "confidence": "high",
      "method": "screenshot comparison",
      "evidence": "Desktop screenshots under explicit light and dark emulation show the complete surface retints appropriately.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.png",
        "evidence/home-dark.png"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The reduced-motion probe matched prefers-reduced-motion: reduce but still found eight running, infinite 2-second shimmer animations.",
      "findingIds": [
        "F01"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "forced-colors screenshot",
      "evidence": "Forced-colors screenshot keeps navigation, dialog text and controls visible with system colors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/forced-colors.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The platform probe found zero view-transition rules across the loaded stylesheets, while the site exposes many route and modal state changes.",
      "findingIds": [
        "F02"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No scroll-linked animation, parallax, scrollytelling or reveal interaction exists on the representative pages, so there is no implementation to assess.",
      "reason": "No scroll-linked animation, parallax, scrollytelling or reveal interaction exists on the representative pages, so there is no implementation to assess.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No swipe, pull, draggable, carousel or other gesture-driven primary interaction was present on the audited surfaces.",
      "reason": "No swipe, pull, draggable, carousel or other gesture-driven primary interaction was present on the audited surfaces.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The 4,011px homepage and 7,482px categories surface have static chrome; the CSS probe found no scroll-state query or scroll timeline rules.",
      "findingIds": [
        "F03"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/categories-dom.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No tooltip or edge-sensitive anchored transient overlay was exposed in the representative unauthenticated paths.",
      "reason": "No tooltip or edge-sensitive anchored transient overlay was exposed in the representative unauthenticated paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "visual/DOM review",
      "evidence": "Active navigation has a visible underline, routes use descriptive Thai labels, and the 404 offers a clear home recovery link.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The fresh-load desktop screenshot shows a large centered consent dialog covering the content before interaction. Accept and reject are both available, but the interruption dominates the page.",
      "findingIds": [
        "F04"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The signup probe found a DIV with role=dialog and aria-modal=true; no native dialog or popover elements were present in the platform probe.",
      "findingIds": [
        "F05"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "screenshot review",
      "evidence": "Outside the consent interruption, content cards occupy the main surface and chrome remains compact relative to the long content list.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/detail-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "At a requested 360x800 viewport, layout measured scrollWidth 1024px versus clientWidth 360px, 664px of horizontal overflow. Category, detail and signup screenshots show clipped desktop surfaces; the signup panel is almost entirely off-screen.",
      "findingIds": [
        "F06"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png",
        "evidence/categories-mobile.png",
        "evidence/detail-mobile.png",
        "evidence/signup-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The stylesheet probe found zero @container rules, while the reused navigation, cards and signup panel visibly clip when their available width narrows.",
      "findingIds": [
        "F07"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/signup-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Programmatically focused search input and submit button computed outline: none 0px. Lighthouse also reported target-spacing failures.",
      "findingIds": [
        "F08"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "first-viewport and DOM review",
      "evidence": "H1, card grid, search control and category navigation clearly communicate a video-browsing purpose and next actions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The 360px signup screenshot renders its right-side registration panel beyond the viewport, leaving only a narrow clipped strip and making the primary registration options unusable.",
      "findingIds": [
        "F09"
      ],
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/signup-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "404 state probe",
      "evidence": "The deliberate missing route renders a localized not-found explanation, technical-support link and return-home action rather than a blank shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Lighthouse measured LCP at 3.2s (score 0.71), above the 2.5s good threshold, although CLS was 0 and TBT was 0ms.",
      "findingIds": [
        "F10"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "layout observer and Lighthouse",
      "evidence": "Layout observer measured CLS 0.0027 and Lighthouse measured CLS 0, both within the good range.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "trace and Lighthouse",
      "evidence": "Trace recorded zero long tasks and 0ms TBT; Lighthouse also measured TBT 0ms. A separate layout window saw only two startup tasks (71ms and 150ms).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse.json",
        "evidence/home-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "HAR recorded 140 requests and 1,850,742 transferred bytes, including 61 scripts (1,048,900 bytes), 11 stylesheets and multiple parser-inserted render-blocking stylesheet candidates.",
      "findingIds": [
        "F11"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Lighthouse estimated 26KiB unused JavaScript and 57KiB unused CSS; HAR shows a 402KiB index script as the largest response.",
      "findingIds": [
        "F12"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Lighthouse found two unnamed buttons and two links in the mobile homepage that are keyboard-focusable without accessible text.",
      "findingIds": [
        "F13"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Lighthouse measured contrast as low as 1.75:1 and 2.15:1 on the green age-verification banner and 3.29:1 on repeated view-count text, below the 4.5:1 minimum.",
      "findingIds": [
        "F14"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The focus probe found no visible outline on the search input/button; Lighthouse found unnamed controls/links, undermining a predictable keyboard focus walk.",
      "findingIds": [
        "F15"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "screenshot and heading review",
      "evidence": "Screenshots show readable Thai headings/body copy with clear size hierarchy and no text clipping on the Lighthouse mobile variant; contrast defects are recorded separately.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Lighthouse found the mobile viewport disables user scaling and reported undersized/overlapping targets; the 360px raw-CDP layout also overflowed by 664px.",
      "findingIds": [
        "F16"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse console audit",
      "evidence": "Lighthouse errors-in-console audit passed with no entries.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The image audit found 29 of 36 images without width/height, 12 oversized images and 8 below-fold images without lazy loading.",
      "findingIds": [
        "F17"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and permissions probe",
      "evidence": "Lighthouse passed BFCache and deprecation audits and reported best-practices score 1.0; no prompt appeared on load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/runtime-capabilities.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM metadata probes",
      "evidence": "Homepage and representative detail have descriptive, localized titles and meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/routes-metadata.json",
        "evidence/detail-metadata.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "DOM, robots and Lighthouse",
      "evidence": "Links use href, viewport metadata exists, robots.txt is valid, and Lighthouse SEO/crawlable-link audits passed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-files.json",
        "evidence/lighthouse.json",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "robots.txt returned 200, but /sitemap.xml returned 404. Canonicals point from xhsocial.com to the xhamster.com host, which should be intentionally verified across all localized variants.",
      "findingIds": [
        "F18"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-files.json",
        "evidence/routes-metadata.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The representative video detail exposes Open Graph tags but no JSON-LD or microdata, despite representing a rich VideoObject.",
      "findingIds": [
        "F19"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/detail-metadata.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The headers probe found CSP limited to frame-ancestors only and no X-Content-Type-Options or Referrer-Policy. Cookie audit found three insecure issues, including settings and CSRF cookies without Secure and SameSite=None cookies.",
      "findingIds": [
        "F20"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "A fresh-load HAR recorded 116 third-party requests and 1,657,764 third-party bytes while the consent dialog was still displayed; requests included Google accounts, ad/media domains and 80 requests to static-ah.xhcdn.com.",
      "findingIds": [
        "F21"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-desktop.png",
        "evidence/trackers.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The signup surface offers Google, X and email; the platform/runtime probes found no WebAuthn/passkey affordance while authentication is clearly relevant. No permission prompt fired on load.",
      "findingIds": [
        "F22"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/runtime-capabilities.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "HSTS is only one day; nosniff and Referrer-Policy are absent, Permissions-Policy only delegates two client-hint features, and CSP has no script/style/default-src controls.",
      "findingIds": [
        "F23"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "discoverability no-JS comparison",
      "evidence": "Raw HTML returned 200 with title, H1 and description and retained 65% of rendered content words; it is not an empty JS shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-crawler.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "multi-path screenshots and Lighthouse",
      "evidence": "Public category/detail navigation loaded robustly, the consent control remained attached in both themes, and no runtime error was reported.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/categories-mobile.png",
        "evidence/detail-mobile.png",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "pass",
      "confidence": "high",
      "method": "manifest and service-worker probe",
      "evidence": "A valid manifest provides start_url, scope, icons and minimal-ui display, and an active pwa.js service worker registration covers the origin.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/site-files.json",
        "evidence/runtime-capabilities.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No fetch-dependent transactional flow could be safely fault-injected without source or test credentials; the public 404 recovery state was assessed separately as passing runtime recovery.",
      "reason": "No fetch-dependent transactional flow could be safely fault-injected without source or test credentials; the public 404 recovery state was assessed separately as passing runtime recovery.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The Thai document correctly declares lang=th and offers many locale routes, but stylesheet inspection found 705 physical left/right declarations versus only 18 logical-property uses.",
      "findingIds": [
        "F24"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "rendered content and route review",
      "evidence": "Thai content and compact view counts are localized, and a broad locale selector maps to language-specific hosts; no raw locale-sensitive date/currency data was exposed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No dates, appointments, schedules, recurrence or time-zone-sensitive data appeared in the representative public paths.",
      "reason": "No dates, appointments, schedules, recurrence or time-zone-sensitive data appeared in the representative public paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "consent/signup visual and text review",
      "evidence": "Consent presents equally prominent accept and reject actions plus settings/privacy links; signup disclosures describe public data use and partners.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/signup-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No required-field form was exposed without proceeding into account creation; public search has no invalid-input state.",
      "reason": "No required-field form was exposed without proceeding into account creation; public search has no invalid-input state.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No address, payment, sign-in or data-entry field was exposed in the non-destructive first signup step; only provider/email choice links were shown.",
      "reason": "No address, payment, sign-in or data-entry field was exposed in the non-destructive first signup step; only provider/email choice links were shown.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "The signup/account dialog is visually clipped outside the tested 360px viewport, so consent and account choices are not proportionately available on a common form factor.",
      "findingIds": [
        "F25"
      ],
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/signup-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "Image inspection found 12 images more than twice their displayed width, 17 legacy-format entries and 8 below-fold images loaded eagerly.",
      "findingIds": [
        "F26"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "performance trace",
      "evidence": "Trace found no long-running background main-thread work over the 5.7s window; resource waste is separately captured under asset and third-party checks.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact review against mapped Modern Web Guidance",
      "evidence": "HAR attributes 1.66MB of 1.85MB and 116 of 140 requests to third-party origins, disproportionate for the first content view before consent.",
      "findingIds": [
        "F27"
      ],
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "The public media browsing site declares no intent or structured agent-facing task surface; this emerging capability is not expected for this audit.",
      "reason": "The public media browsing site declares no intent or structured agent-facing task surface; this emerging capability is not expected for this audit.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement after representative-path recon",
      "evidence": "No user task on the representative browsing/signup paths requires on-device inference; absence is not a failure for this site.",
      "reason": "No user task on the representative browsing/signup paths requires on-device inference; absence is not a failure for this site.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "low",
      "method": "before/after heap summaries",
      "evidence": "After ten full-page scroll cycles, retained self size rose from 36.94MB to 39.15MB (about 6%) and node count from 686,865 to 732,788, consistent with bounded lazy-loaded content rather than unbounded cycle growth; confidence is low because snapshots were separate fresh sessions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "low",
      "method": "heap and HAR summaries",
      "evidence": "Baseline retained self size was 36.94MB for a media-heavy page, proportionate to the loaded content and 1.85MB network payload.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "low",
      "method": "heap constructor comparison",
      "evidence": "Neither heap summary surfaced Detached constructors among the largest retained constructors; repeated scrolling increased footprint modestly without evidence of runaway listener/timer populations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14",
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F20",
        "F21",
        "F22",
        "F23"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The public media browsing site declares no intent or structured agent-facing task surface; this emerging capability is not expected for this audit. No user task on the representative browsing/signup paths requires on-device inference; absence is not a failure for this site."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage/catalogue entry, first viewport, consent surface, theme, narrow layout, performance, privacy, accessibility and crawlability.",
      "url": "https://th.xhsocial.com/",
      "conditions": [
        "fresh profile",
        "desktop",
        "360x800",
        "prefers-color-scheme light/dark",
        "prefers-reduced-motion reduce",
        "forced-colors active"
      ],
      "result": "issues"
    },
    {
      "id": "categories",
      "description": "Category-index archetype representing long listing/navigation templates.",
      "url": "https://th.xhsocial.com/categories",
      "conditions": [
        "desktop DOM",
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "detail",
      "description": "Representative video detail archetype for title, canonical, social/structured metadata and mobile presentation.",
      "url": "https://th.xhsocial.com/videos/indian-desi-bhabhi-hot-sex-in-saree-creampie-pussy-indian-sex-on-xhamster-2024-xhPxEW4",
      "conditions": [
        "desktop DOM",
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "signup",
      "description": "Primary account-creation entry flow, disclosures, social/email choices and narrow-screen usability.",
      "url": "https://th.xhsocial.com/signup?source=menuSignup",
      "conditions": [
        "fresh unauthenticated profile",
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "error-404",
      "description": "Intentional missing route representing recovery/error state.",
      "url": "https://th.xhsocial.com/does-not-exist-web-uplift-404",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "confidence": "high",
      "summary": "Animations continue when reduced motion is requested",
      "evidence": "The reduced-motion probe matched prefers-reduced-motion: reduce but still found eight running, infinite 2-second shimmer animations.",
      "suggestedFix": "Disable shimmer and other non-essential looping animation inside @media (prefers-reduced-motion: reduce).",
      "effort": "small",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F02",
      "severity": "low",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "confidence": "high",
      "summary": "Route and state changes do not use View Transitions",
      "evidence": "The platform probe found zero view-transition rules across the loaded stylesheets, while the site exposes many route and modal state changes.",
      "suggestedFix": "Progressively enhance route and modal changes with same-document and cross-document View Transitions, retaining an instant fallback.",
      "effort": "medium",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F03",
      "severity": "low",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "user-experience",
      "confidence": "high",
      "summary": "Long pages provide no scroll-state-aware navigation cue",
      "evidence": "The 4,011px homepage and 7,482px categories surface have static chrome; the CSS probe found no scroll-state query or scroll timeline rules.",
      "suggestedFix": "Add a lightweight scroll progress or compacting sticky header using scroll-state/container queries, with a conventional fallback.",
      "effort": "small",
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/categories-dom.json",
        "evidence/platform-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F04",
      "severity": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "confidence": "high",
      "summary": "Cookie dialog obscures most of the first viewport",
      "evidence": "The fresh-load desktop screenshot shows a large centered consent dialog covering the content before interaction. Accept and reject are both available, but the interruption dominates the page.",
      "suggestedFix": "Use a compact, content-preserving consent surface where legally permitted; retain equally prominent accept/reject and a clear settings path.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-desktop.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F05",
      "severity": "low",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "confidence": "high",
      "summary": "Modal surfaces use custom role=dialog containers instead of native dialog",
      "evidence": "The signup probe found a DIV with role=dialog and aria-modal=true; no native dialog or popover elements were present in the platform probe.",
      "suggestedFix": "Use <dialog> for modal flows and popover for transient UI so focus, top-layer placement and dismissal are platform-managed.",
      "effort": "medium",
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/platform-probe.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F06",
      "severity": "critical",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "css-layout",
      "guidanceCategory": "css",
      "confidence": "high",
      "summary": "Desktop layout is forced into narrow viewports",
      "evidence": "At a requested 360x800 viewport, layout measured scrollWidth 1024px versus clientWidth 360px, 664px of horizontal overflow. Category, detail and signup screenshots show clipped desktop surfaces; the signup panel is almost entirely off-screen.",
      "suggestedFix": "Serve a genuinely responsive layout independent of user-agent detection; remove 1024px minimums, use intrinsic/fluid sizing, and verify every primary surface at 320-412px.",
      "effort": "large",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png",
        "evidence/categories-mobile.png",
        "evidence/detail-mobile.png",
        "evidence/signup-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F07",
      "severity": "medium",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "css",
      "confidence": "high",
      "summary": "Components do not adapt at container level",
      "evidence": "The stylesheet probe found zero @container rules, while the reused navigation, cards and signup panel visibly clip when their available width narrows.",
      "suggestedFix": "Define containment for reusable cards, navigation and modal panels and adapt them with size container queries, keeping viewport fallbacks.",
      "effort": "medium",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/signup-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F08",
      "severity": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "confidence": "high",
      "summary": "Keyboard focus is not visibly indicated on key controls",
      "evidence": "Programmatically focused search input and submit button computed outline: none 0px. Lighthouse also reported target-spacing failures.",
      "suggestedFix": "Add a high-contrast :focus-visible style and ensure targets have at least 24px safe spacing, preferably 44px for primary touch controls.",
      "effort": "small",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F09",
      "severity": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "confidence": "high",
      "summary": "Signup flow is clipped and cannot be completed at the tested narrow viewport",
      "evidence": "The 360px signup screenshot renders its right-side registration panel beyond the viewport, leaving only a narrow clipped strip and making the primary registration options unusable.",
      "suggestedFix": "Make the registration dialog fit the visual viewport, stack actions on narrow screens, and test email/social registration through completion at mobile widths.",
      "effort": "medium",
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/signup-probe.json"
      ],
      "pathId": "signup"
    },
    {
      "id": "F10",
      "severity": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "confidence": "high",
      "summary": "Lab LCP is outside the good range",
      "evidence": "Lighthouse measured LCP at 3.2s (score 0.71), above the 2.5s good threshold, although CLS was 0 and TBT was 0ms.",
      "suggestedFix": "Profile the LCP element, prioritize its discovery/delivery, and defer non-critical scripts and styles.",
      "effort": "medium",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F11",
      "severity": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "confidence": "high",
      "summary": "The entry page ships a large, fragmented critical load",
      "evidence": "HAR recorded 140 requests and 1,850,742 transferred bytes, including 61 scripts (1,048,900 bytes), 11 stylesheets and multiple parser-inserted render-blocking stylesheet candidates.",
      "suggestedFix": "Consolidate critical CSS, defer non-critical bundles, reduce request fragmentation and preserve long-lived caching for versioned assets.",
      "effort": "large",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "pathId": "home"
    },
    {
      "id": "F12",
      "severity": "medium",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "confidence": "high",
      "summary": "Unused CSS and JavaScript are shipped on initial load",
      "evidence": "Lighthouse estimated 26KiB unused JavaScript and 57KiB unused CSS; HAR shows a 402KiB index script as the largest response.",
      "suggestedFix": "Split template-specific code, remove dead selectors and load optional features only when their surface is requested.",
      "effort": "medium",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F13",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "confidence": "high",
      "summary": "Interactive controls and links lack accessible names",
      "evidence": "Lighthouse found two unnamed buttons and two links in the mobile homepage that are keyboard-focusable without accessible text.",
      "suggestedFix": "Give every control a programmatic name matching its visible purpose; avoid nested or redundant interactive targets.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F14",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "confidence": "high",
      "summary": "Important text fails minimum color contrast",
      "evidence": "Lighthouse measured contrast as low as 1.75:1 and 2.15:1 on the green age-verification banner and 3.29:1 on repeated view-count text, below the 4.5:1 minimum.",
      "suggestedFix": "Adjust foreground/background tokens to meet WCAG AA in every theme and re-test repeated card metadata and banners.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ],
      "pathId": "home"
    },
    {
      "id": "F15",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "confidence": "high",
      "summary": "Focus visibility and interactive semantics are unreliable",
      "evidence": "The focus probe found no visible outline on the search input/button; Lighthouse found unnamed controls/links, undermining a predictable keyboard focus walk.",
      "suggestedFix": "Use native interactive elements, unique accessible names and a consistent :focus-visible treatment that follows reading order.",
      "effort": "medium",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F16",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "confidence": "high",
      "summary": "Mobile zoom/reflow and target spacing fail accessibility expectations",
      "evidence": "Lighthouse found the mobile viewport disables user scaling and reported undersized/overlapping targets; the 360px raw-CDP layout also overflowed by 664px.",
      "suggestedFix": "Allow pinch zoom, reflow without horizontal scrolling, and increase target size/spacing.",
      "effort": "medium",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile-layout.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F17",
      "severity": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "confidence": "high",
      "summary": "Image delivery lacks stable dimensions and appropriate sizing",
      "evidence": "The image audit found 29 of 36 images without width/height, 12 oversized images and 8 below-fold images without lazy loading.",
      "suggestedFix": "Emit width/height or aspect-ratio, choose responsive source candidates close to rendered size and lazy-load below-fold media.",
      "effort": "medium",
      "artifacts": [
        "evidence/images.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F18",
      "severity": "low",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "confidence": "high",
      "summary": "Sitemap discovery is incomplete",
      "evidence": "robots.txt returned 200, but /sitemap.xml returned 404. Canonicals point from xhsocial.com to the xhamster.com host, which should be intentionally verified across all localized variants.",
      "suggestedFix": "Publish and reference locale-aware sitemap indexes and verify cross-host canonical/hreflang consistency.",
      "effort": "small",
      "artifacts": [
        "evidence/site-files.json",
        "evidence/routes-metadata.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F19",
      "severity": "medium",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "confidence": "high",
      "summary": "Video detail page omits structured video metadata",
      "evidence": "The representative video detail exposes Open Graph tags but no JSON-LD or microdata, despite representing a rich VideoObject.",
      "suggestedFix": "Add accurate schema.org VideoObject JSON-LD matching the visible title, thumbnail, duration, upload date and canonical URL.",
      "effort": "small",
      "artifacts": [
        "evidence/detail-metadata.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F20",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "confidence": "high",
      "summary": "Cookies and CSP do not provide a strong secure baseline",
      "evidence": "The headers probe found CSP limited to frame-ancestors only and no X-Content-Type-Options or Referrer-Policy. Cookie audit found three insecure issues, including settings and CSRF cookies without Secure and SameSite=None cookies.",
      "suggestedFix": "Set Secure on every HTTPS cookie, review SameSite=None necessity, add nosniff and a strict Referrer-Policy, and expand CSP beyond clickjacking protection.",
      "effort": "medium",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F21",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "confidence": "high",
      "summary": "Extensive third-party traffic occurs before a consent choice",
      "evidence": "A fresh-load HAR recorded 116 third-party requests and 1,657,764 third-party bytes while the consent dialog was still displayed; requests included Google accounts, ad/media domains and 80 requests to static-ah.xhcdn.com.",
      "suggestedFix": "Gate non-essential advertising, analytics and identity requests until consent; minimize origin count and document each processor/purpose.",
      "effort": "large",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/home-desktop.png",
        "evidence/trackers.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F22",
      "severity": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "identity",
      "confidence": "high",
      "summary": "Signup offers Google, X and email but no phishing-resistant first-party path",
      "evidence": "The signup surface offers Google, X and email; the platform/runtime probes found no WebAuthn/passkey affordance while authentication is clearly relevant. No permission prompt fired on load.",
      "suggestedFix": "Offer passkey registration and authentication alongside existing methods and request permissions only after a user gesture.",
      "effort": "large",
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/runtime-capabilities.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F23",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "confidence": "high",
      "summary": "Defensive response policies are incomplete",
      "evidence": "HSTS is only one day; nosniff and Referrer-Policy are absent, Permissions-Policy only delegates two client-hint features, and CSP has no script/style/default-src controls.",
      "suggestedFix": "Deploy a least-privilege CSP, longer reviewed HSTS policy, nosniff, strict-origin-when-cross-origin or stricter referrer policy, and an explicit Permissions-Policy.",
      "effort": "medium",
      "artifacts": [
        "evidence/headers.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F24",
      "severity": "medium",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "css",
      "guidanceCategory": "css",
      "confidence": "high",
      "summary": "Localized layout relies overwhelmingly on physical CSS properties",
      "evidence": "The Thai document correctly declares lang=th and offers many locale routes, but stylesheet inspection found 705 physical left/right declarations versus only 18 logical-property uses.",
      "suggestedFix": "Replace directional spacing and positioning with inline/block logical properties and test an RTL locale plus long translated labels.",
      "effort": "large",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/recon.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F25",
      "severity": "medium",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "confidence": "high",
      "summary": "Account entry is not reliably usable on mobile",
      "evidence": "The signup/account dialog is visually clipped outside the tested 360px viewport, so consent and account choices are not proportionately available on a common form factor.",
      "suggestedFix": "Reflow account and consent controls within the viewport and verify registration, login, cancellation and account-management journeys with keyboard and mobile input.",
      "effort": "medium",
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/signup-probe.json"
      ],
      "pathId": "signup"
    },
    {
      "id": "F26",
      "severity": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "confidence": "high",
      "summary": "Asset sizing wastes transfer and decode work",
      "evidence": "Image inspection found 12 images more than twice their displayed width, 17 legacy-format entries and 8 below-fold images loaded eagerly.",
      "suggestedFix": "Serve AVIF/WebP responsive candidates sized to the slot and defer below-fold/decorative media.",
      "effort": "medium",
      "artifacts": [
        "evidence/images.json"
      ],
      "pathId": "home"
    },
    {
      "id": "F27",
      "severity": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "confidence": "high",
      "summary": "Third-party cost dominates the page budget",
      "evidence": "HAR attributes 1.66MB of 1.85MB and 116 of 140 requests to third-party origins, disproportionate for the first content view before consent.",
      "suggestedFix": "Set a third-party byte/request budget, defer optional media and identity scripts, and block non-essential work before consent.",
      "effort": "large",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "pathId": "home"
    }
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "404 probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/axe.json",
      "caption": "axe",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/categories-dom.json",
      "caption": "categories dom",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/categories-mobile.png",
      "caption": "categories mobile",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/detail-dom.json",
      "caption": "detail dom",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/detail-metadata.json",
      "caption": "detail metadata",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/detail-mobile.png",
      "caption": "detail mobile",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/forced-colors.png",
      "caption": "forced colors",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F20",
        "F23"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.json",
      "caption": "heap post scroll",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F04",
        "F21"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-layout.json",
      "caption": "home layout",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light.png",
      "caption": "home light",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "findingIds": [
        "F06",
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F06",
        "F14"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F11",
        "F12",
        "F21",
        "F27"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F11",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "F17",
        "F26"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "lighthouse",
      "findingIds": [
        "F08",
        "F10",
        "F12",
        "F13",
        "F14",
        "F15",
        "F16"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe",
      "findingIds": [
        "F02",
        "F03",
        "F05",
        "F07",
        "F08",
        "F15",
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon",
      "findingIds": [
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "reduced motion",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/routes-metadata.json",
      "caption": "routes metadata",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/runtime-capabilities.json",
      "caption": "runtime capabilities",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "search mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/signup-dom.json",
      "caption": "signup dom",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/signup-email-probe.json",
      "caption": "signup email probe",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-mobile.png",
      "caption": "signup mobile",
      "findingIds": [
        "F06",
        "F07",
        "F09",
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/signup-probe.json",
      "caption": "signup probe",
      "findingIds": [
        "F05",
        "F09",
        "F22",
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/site-files.json",
      "caption": "site files",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F21",
        "F27"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Serve a genuinely responsive layout independent of user-agent detection; remove 1024px minimums, use intrinsic/fluid sizing, and verify every primary surface at 320-412px.",
      "priority": 1,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "css-layout",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Add a high-contrast :focus-visible style and ensure targets have at least 24px safe spacing, preferably 44px for primary touch controls.",
      "priority": 2,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Make the registration dialog fit the visual viewport, stack actions on narrow screens, and test email/social registration through completion at mobile widths.",
      "priority": 3,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Give every control a programmatic name matching its visible purpose; avoid nested or redundant interactive targets.",
      "priority": 4,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Adjust foreground/background tokens to meet WCAG AA in every theme and re-test repeated card metadata and banners.",
      "priority": 5,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Use native interactive elements, unique accessible names and a consistent :focus-visible treatment that follows reading order.",
      "priority": 6,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Allow pinch zoom, reflow without horizontal scrolling, and increase target size/spacing.",
      "priority": 7,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Set Secure on every HTTPS cookie, review SameSite=None necessity, add nosniff and a strict Referrer-Policy, and expand CSP beyond clickjacking protection.",
      "priority": 8,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Gate non-essential advertising, analytics and identity requests until consent; minimize origin count and document each processor/purpose.",
      "priority": 9,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Deploy a least-privilege CSP, longer reviewed HSTS policy, nosniff, strict-origin-when-cross-origin or stricter referrer policy, and an explicit Permissions-Policy.",
      "priority": 10,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Disable shimmer and other non-essential looping animation inside @media (prefers-reduced-motion: reduce).",
      "priority": 11,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Use a compact, content-preserving consent surface where legally permitted; retain equally prominent accept/reject and a clear settings path.",
      "priority": 12,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Define containment for reusable cards, navigation and modal panels and adapt them with size container queries, keeping viewport fallbacks.",
      "priority": 13,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Profile the LCP element, prioritize its discovery/delivery, and defer non-critical scripts and styles.",
      "priority": 14,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Consolidate critical CSS, defer non-critical bundles, reduce request fragmentation and preserve long-lived caching for versioned assets.",
      "priority": 15,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "optimize-script-priority",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Split template-specific code, remove dead selectors and load optional features only when their surface is requested.",
      "priority": 16,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Emit width/height or aspect-ratio, choose responsive source candidates close to rendered size and lazy-load below-fold media.",
      "priority": 17,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Add accurate schema.org VideoObject JSON-LD matching the visible title, thumbnail, duration, upload date and canonical URL.",
      "priority": 18,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Offer passkey registration and authentication alongside existing methods and request permissions only after a user gesture.",
      "priority": 19,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Replace directional spacing and positioning with inline/block logical properties and test an RTL locale plus long translated labels.",
      "priority": 20,
      "findingIds": [
        "F24"
      ],
      "guidanceId": "css",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Reflow account and consent controls within the viewport and verify registration, login, cancellation and account-management journeys with keyboard and mobile input.",
      "priority": 21,
      "findingIds": [
        "F25"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T22",
      "title": "Serve AVIF/WebP responsive candidates sized to the slot and defer below-fold/decorative media.",
      "priority": 22,
      "findingIds": [
        "F26"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T23",
      "title": "Set a third-party byte/request budget, defer optional media and identity scripts, and block non-essential work before consent.",
      "priority": 23,
      "findingIds": [
        "F27"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T24",
      "title": "Progressively enhance route and modal changes with same-document and cross-document View Transitions, retaining an instant fallback.",
      "priority": 24,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    },
    {
      "id": "T25",
      "title": "Add a lightweight scroll progress or compacting sticky header using scroll-state/container queries, with a conventional fallback.",
      "priority": 25,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "shrinking-header-on-scroll",
      "status": "open"
    },
    {
      "id": "T26",
      "title": "Use <dialog> for modal flows and popover for transient UI so focus, top-layer placement and dismissal are platform-managed.",
      "priority": 26,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T27",
      "title": "Publish and reference locale-aware sitemap indexes and verify cross-host canonical/hreflang consistency.",
      "priority": 27,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "html",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-17T20-42-38-574Z"
}
