Manifest position 840 · CrUX rank bucket 1000
https://nl.xhamster.com
Coverage complete
Coverage-complete model-led audit of six representative paths; account-only, payment, playback-after-verification, and destructive account actions were not exercised.
All 58 atomic check outcomes
| Principle / check | Status | Confidence | Evidence or reason |
|---|---|---|---|
respect-user-preferencesrespects-color-scheme | pass | high | Light and dark emulation changed foreground colors (48,48,48 vs 245,245,245), and CSS included a color-scheme preference signal. |
respect-user-preferencesrespects-reduced-motion | issues | high | Under prefers-reduced-motion: reduce, eight 2-second animations remained running; CSS inspection found no prefers-reduced-motion rule. F01 medium: Reduced-motion preference is ignored. |
respect-user-preferencesrespects-contrast | issues | high | CSS inspection found no prefers-contrast or forced-colors handling. Lighthouse measured ratios as low as 1.75:1 on the age banner and 3.29:1 on view counts. F02 high: High-contrast users receive low-contrast text and no contrast-specific adaptation. |
implement-natural-interactionsview-transitions | issues | high | Rendered CSS contained no view-transition declarations and representative routes are full-document navigations with abrupt swaps. F03 low: Route changes have no continuity transition. |
implement-natural-interactionsscroll-driven-animations | pass | high | CSS/animation inspection found no scroll-linked decorative motion, so no main-thread scroll animation anti-pattern was active on sampled pages. |
implement-natural-interactionsphysical-gestures | pass | high | Sampled flows use native scrolling and links; no custom swipe/pointer gesture surface that fights platform behavior was observed. |
provide-guided-navigationscroll-state-aware-chrome | issues | high | At scrollY 1200 the 84px age-verification bar remained sticky at top; CSS had no scroll-state query or scroll progress treatment. F04 low: Sticky chrome does not adapt as content scrolls. |
provide-guided-navigationanchored-positioning | issues | high | The page exposes multiple header/dropdown controls, while CSS inspection found no anchor-name, position-anchor, or position-try rules. F05 low: Menus and transient controls do not use resilient anchor positioning. |
provide-guided-navigationdirects-attention | pass | high | Active navigation is underlined, category tabs expose current state, and the 404 route provides a clear return-to-home link. |
maximize-content-reduce-noiseno-intrusive-interruptions | pass | high | The required consent modal presents equal Accept/Reject actions; an active rejection probe confirmed it dismisses fully and restores page hit-testing. |
maximize-content-reduce-noisesemantic-dismissible-primitives | issues | high | The visible modal blocks the page, but DOM inspection found 0 dialog, 0 popover, and 0 details elements. F06 medium: The consent modal and menu overlays are custom rather than semantic primitives. |
maximize-content-reduce-noisereduced-chrome | issues | high | Desktop screenshots show two navigation rows, a persistent verification banner, a 190px sidebar, consent UI, and promotional cards surrounding the video grid/player. F07 medium: Dense chrome and promotions crowd the primary content. |
adapt-to-the-form-factorresponsive-no-horizontal-scroll | issues | high | Layout measurements on both home and video pages reported scrollWidth 1024, visual viewport 360, and 664px horizontal overflow. The mobile screenshot shows clipped navigation and cards. F08 critical: The mobile layout renders a 1024px desktop canvas inside a 360px viewport. |
adapt-to-the-form-factorcomponent-level-responsiveness | issues | high | CSS inspection found no @container rules, while the same sidebar/card layout remains desktop-sized and clipped in the 360px condition. F09 high: Reused content components do not adapt to their available container. |
adapt-to-the-form-factorinput-modality-aware | issues | high | Programmatically focusing the first visible link produced outline-style none and no box shadow. Lighthouse also found 20px-high targets and insufficient spacing. F10 high: Keyboard focus is invisible and some touch targets are undersized. |
support-core-task-successclear-purpose-and-primary-action | pass | high | Homepage/category/detail pages expose descriptive H1s, clear media cards, search, and direct primary actions in the first viewport. |
support-core-task-successprimary-flow-completion | pass | high | Homepage links lead to a representative detail route; category browsing, sign-up method selection, and 404 recovery remained navigable. |
support-core-task-successclear-system-state-and-recovery | pass | high | The unknown route presents a localized not-found explanation, contact/return action, and alternative content rather than a blank shell. |
be-fast-and-stablegood-core-web-vitals | issues | high | Lighthouse measured LCP 3.9s and FCP 3.0s (performance 0.83); the separate trace measured LCP 1.98s, showing condition-sensitive performance. F11 high: Mobile largest-contentful paint misses the good threshold. |
be-fast-and-stablevisual-stability | pass | high | Layout observer measured CLS 0 on home and video samples; Lighthouse also reported CLS 0. |
be-fast-and-stableefficient-main-thread | issues | high | The trace recorded 2 long tasks, a longest task of 188.28ms, and 151.79ms total blocking time. F12 medium: Startup JavaScript creates blocking main-thread work. |
be-fast-and-stableefficient-resource-delivery | issues | high | HAR recorded 144 requests, 62 scripts, 11 stylesheets, 1.77MB transferred, and multiple parser-inserted VeryHigh-priority stylesheets; Lighthouse LCP was 3.9s. F13 high: The startup dependency graph is request-heavy and delays rendering. |
be-fast-and-stabletrim-unused-and-duplicate-code | issues | high | Lighthouse found 26,972 wasted JS bytes in assetsLoader and 94.9%/89.7% waste in two mobile stylesheets; HAR recorded 62 scripts. F14 medium: Substantial unused CSS and JavaScript ship on mobile. |
be-inclusivenames-roles-labels | issues | high | Lighthouse failed button-name and label-content-name-mismatch, including an unnamed filter button and video links whose accessible name omits visible duration text. F15 high: Some interactive controls lack or mismatch accessible names. |
be-inclusivesufficient-contrast | issues | high | Lighthouse reported 1.75:1 age-banner secondary text, 2.15:1 banner primary text, and 3.29:1 view counts against their backgrounds. F16 high: Text and essential UI fail WCAG contrast. |
be-inclusivestructure-and-focus | issues | high | The focused GB link had no visible outline. Lighthouse found a ul with direct div, complementary, and role=button children instead of li elements. F17 high: Focus and list semantics do not provide a reliable keyboard/AT structure. |
be-inclusivelegible-text | pass | high | Desktop content uses readable sizing and clear hierarchy, with headings and labels remaining legible outside the separately reported contrast/reflow failures. |
be-inclusivezoom-reflow-targets-and-media | issues | high | Lighthouse found user-scalable=no in the effective mobile viewport and undersized targets; 360px layout evidence recorded 664px horizontal overflow. F18 critical: Zoom/reflow is restricted and mobile content does not reflow. |
follow-best-practicesno-console-errors | pass | high | Lighthouse errors-in-console audit passed with no logged browser errors. |
follow-best-practicessound-document-and-assets | issues | high | The image audit found 29 of 36 images missing dimensions and 12 oversized relative to display size, despite valid doctype/charset and correct sampled aspect ratios. F19 medium: Image markup does not reserve or consistently right-size media. |
follow-best-practicesbrowser-platform-hygiene | pass | high | Lighthouse passed deprecations, BFCache, valid source maps and prompt-related best-practice audits; no permission prompt appeared on load. |
be-discoverabletitle-and-description | pass | high | Homepage and video detail expose unique descriptive titles and localized meta descriptions. |
be-discoverablecrawlable-and-mobile-friendly | pass | high | Links have real href values, a viewport meta exists, and robots.txt permits the homepage and primary public routes. |
be-discoverablecanonical-and-indexing-signals | issues | high | The page had a canonical URL and robots.txt allowed core pages, but exposed no hreflang links across its many language hosts; /sitemap.xml returned 404. F20 medium: Localized indexing signals are incomplete. |
be-discoverablestructured-and-shareable-metadata | issues | high | The representative detail page had useful Open Graph metadata but no JSON-LD VideoObject; og:image:type declared image/jpeg for a .webp URL. F21 low: Video pages omit structured entity data. |
be-private-and-securesecure-transport-and-headers | issues | high | CSP is only frame-ancestors self, offering no script/style XSS policy. The settings and x_csrf_token cookies were not Secure; settings also used SameSite=None. F22 high: Transport is HTTPS, but CSP and cookie protection are incomplete. |
be-private-and-securedata-minimisation-and-third-parties | issues | high | HAR attributed 117 of 144 requests and 1.66MB of 1.77MB to non-main origins; tracker enumeration found 14 third-party origins, including Google, tsydndicate and collector endpoints. F23 high: The initial page makes a very broad cross-origin request set. |
be-private-and-securein-context-permissions-and-modern-auth | issues | high | No permission prompt appeared on load, but the sign-up surface offered Google, X and email/password only; no passkey text or WebAuthn flow was exposed. F24 medium: Authentication offers federated/email methods but no phishing-resistant passkey path. |
be-private-and-securedefensive-browser-policies | issues | high | Headers lacked X-Content-Type-Options and Referrer-Policy. Permissions-Policy only set two client-hint directives and the CSP had no broader XSS controls. F25 medium: Several browser-enforced defenses are absent or too narrow. |
be-resilientprogressive-enhancement | pass | high | Discoverability fetch found 88% raw/rendered content overlap, no empty app mount, and a usable crawler screenshot. |
be-resilientresilient-runtime-behaviour | pass | high | Consent rejection fully removed the fixed overlay, representative menus/content rendered, and recovery routes remained usable. |
be-resilientoffline-and-installable | pass | high | A manifest is linked, an active pwa.js service worker is registered, and xh-offline-cache-1.6.5 exists. |
be-resilientnetwork-and-http-failure-states | pass | high | A real unknown URL returns a localized 404 state with explanation, home recovery and alternatives. |
be-internationalisedlang-dir-and-logical-properties | issues | high | html lang was correctly nl, but inspected CSS contained about 695 physical left/right declarations versus 26 logical inline/block declarations. F26 medium: Localized markup relies heavily on physical CSS directions. |
be-internationalisedlocale-aware-data | issues | high | The Dutch page renders values such as 8.7M and 600.5K; Dutch formatting convention uses comma decimals and locale-aware compact notation. F27 medium: Abbreviated counts are not formatted for the Dutch locale. |
be-internationalisedtime-zone-correctness | not-applicable | high | Sampled public pages expose durations and relative counts but no dates, appointments, recurring events, or user-entered time-zone data to judge. |
be-trustworthyno-dark-patterns | pass | high | Consent Accept and Reject have equal prominence, privacy explanations are linked, and sign-up disclosure states public/partner data use. |
be-trustworthyhumane-error-handling | issues | high | Empty submission displayed Dutch required/password messages, but inputs had no aria-invalid and no role=alert/live-region messages were found. F28 medium: Sign-up errors are visible but not programmatically announced. |
be-trustworthytrustworthy-input-assistance | issues | high | The email input used autocomplete=off while the password correctly used new-password; required semantics were not exposed on either field. F29 medium: The sign-up email field disables useful autofill. |
be-trustworthysafe-commercial-and-account-flows | pass | high | The sampled sign-up flow labels free registration, exposes login alternatives, states age verification and data-use terms before commitment. |
be-sustainableoptimised-assets | issues | high | Image inspection found 12 oversized images, 29 missing dimensions, 8 below-fold images not lazy, and 16 legacy-format detections. F30 medium: Thumbnail delivery wastes image bytes and omits layout reservations. |
be-sustainableno-wasteful-work | issues | high | The page loaded 62 scripts totaling about 1.01MB and the trace recorded 151.79ms blocking time, while Lighthouse identified large unused CSS/JS portions. F31 medium: Startup does disproportionate script work for a content listing. |
be-sustainablethird-party-and-media-budget | issues | high | Non-main origins accounted for 1.66MB and 117 requests; scripts alone transferred 1.01MB before a video was played. F32 medium: Cross-origin scripts and media dominate the transfer budget. |
be-agent-readystructured-agent-capabilities | not-applicable | high | No declared agent-facing transaction or productivity capability was identified; this emerging check is not required for the sampled adult media publication surface. |
be-agent-readyon-device-inference | not-applicable | high | No summarisation, composition, or inference task is part of the sampled core journeys, so on-device inference is not applicable. |
be-memory-efficientno-leak-under-repeated-interaction | pass | medium | After ten bottom/top scroll cycles, heap self size increased about 3.2MB (8.9%), consistent with lazy-loaded feed content rather than demonstrated unbounded growth; no Detached constructor dominated. |
be-memory-efficientbounded-footprint | issues | high | Baseline heap summary contained 678,439 nodes and 36.1MB self size; after repeated scrolling it reached 743,136 nodes and 39.3MB. F33 medium: The initial heap footprint is large for a listing before playback. |
be-memory-efficientno-detached-dom-or-unbounded-listeners | pass | medium | Baseline/post heap summaries showed no Detached constructor among dominant populations; no evidence of accumulating detached DOM was observed. |
Provenance
Canonical report: results/atomic/reports/0840-nl_xhamster_com.json
Report SHA-256: 257322a9e190fb37c6c577ac35f4d671040ef13714e685dc740c939ae89b81f0
Local retained report: runs/2026-07-17T17-27-24-856Z/atomic-reports/nl_xhamster_com/2026-07-23T08-45-22-987Z/report.json
Local evidence root: runs/2026-07-17T17-27-24-856Z/atomic-reports/nl_xhamster_com/2026-07-23T08-45-22-987Z
Catalog SHA-256: sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7
Raw screenshots, HARs, traces, heaps, and other browser artifacts are retained at the local evidence root and intentionally are not committed. Artifact paths in the canonical report are relative to that root.