Manifest position 162 · CrUX rank bucket 1000
https://www.eporner.com
Coverage complete
Coverage-complete audit of the public age gate and representative public legal/support templates. Porn listing, playback, biometric submission, and authenticated account completion were excluded.
All 58 atomic check outcomes
| Principle / check | Status | Confidence | Evidence or reason |
|---|---|---|---|
respect-user-preferencesrespects-color-scheme | issues | high | The UI remains the same hard-coded black theme and the CSS probe found no color-scheme, prefers-color-scheme, or light-dark() support; the only theme switch is a cookie. F01 medium: Hard-coded theme ignores the system color preference |
respect-user-preferencesrespects-reduced-motion | issues | high | The age gate contains an indefinitely repeating SVG <animate>; the only prefers-reduced-motion rule found targets an unrelated view counter, so the age animation continues under reduce. F02 medium: Indefinite age-gate animation continues under reduced motion |
respect-user-preferencesrespects-contrast | pass | high | The terms page remains readable and controls remain visible under forced-colors: active and prefers-contrast: more. |
implement-natural-interactionsview-transitions | issues | medium | No view-transition CSS or API use was found; the primary gate-to-account state swaps abruptly into a custom overlay. F03 low: Primary state changes are abrupt |
implement-natural-interactionsscroll-driven-animations | pass | high | No scroll-linked animation or parallax was present on the representative templates, so no main-thread scroll animation anti-pattern was observed. |
implement-natural-interactionsphysical-gestures | pass | medium | No custom pointermove, swipe, pull, carousel, or other gesture-driven interaction was present on the audited paths; native scrolling remained in control. |
provide-guided-navigationscroll-state-aware-chrome | issues | medium | The 10,158px terms page provides no scroll progress or scroll-state-aware header behavior; CSS inspection found no scroll-state/container mechanism. F04 low: Long legal pages offer no scroll-state guidance |
provide-guided-navigationanchored-positioning | not-applicable | high | The audited templates expose no tooltip, anchored popover, or edge-positioned menu for which CSS anchor positioning is applicable. |
provide-guided-navigationdirects-attention | pass | medium | Legal pages use a prominent page heading and section headings, and opening the account overlay moves focus into its login input, giving a visible destination after navigation. |
maximize-content-reduce-noiseno-intrusive-interruptions | pass | medium | The age gate is a legally required access boundary rather than an advertising interstitial; legal content is not obscured on load apart from a shallow dismissible cookie strip. |
maximize-content-reduce-noisesemantic-dismissible-primitives | issues | high | The account flow uses #EPmodal-overlay custom divs, has no <dialog> or role=dialog, exposes no close/cancel control, and remains open after Escape. F05 high: Custom account overlay traps the user |
maximize-content-reduce-noisereduced-chrome | pass | medium | The age gate and legal pages devote most of the viewport to the primary content; navigation chrome is compact rather than dominating the page. |
adapt-to-the-form-factorresponsive-no-horizontal-scroll | pass | high | Home, terms, and contact each reported scrollWidth 360, clientWidth 360, horizontalOverflowPx 0, with a valid viewport meta tag. |
adapt-to-the-form-factorcomponent-level-responsiveness | issues | medium | The CSS probe found no @container or container-type use; reused header and content components depend only on viewport media queries. F06 low: Components only adapt at viewport breakpoints |
adapt-to-the-form-factorinput-modality-aware | issues | high | Mobile footer links are only 14px high and several header controls are 30x30px; Lighthouse failed target-size while keyboard focus itself remained visible. F07 high: Many touch targets are too small |
support-core-task-successclear-purpose-and-primary-action | pass | high | The entry page clearly explains the age requirement and gives one prominent verification action; legal/support pages use descriptive H1 headings. |
support-core-task-successprimary-flow-completion | issues | high | The verification CTA first opens a registration/sign-in wall with multiple identity providers before the advertised selfie verification step, adding an avoidable account detour to the core flow. F08 high: Verification CTA inserts an account wall |
support-core-task-successclear-system-state-and-recovery | issues | high | The account overlay cannot be cancelled with Escape and has no close control; an arbitrary missing URL also returns HTTP 200 with the age gate instead of an actionable not-found state. F09 high: Recovery states are missing or misleading |
be-fast-and-stablegood-core-web-vitals | issues | high | Home Lighthouse measured LCP 2.95s, outside the good <=2.5s range; contact measured 2.38s and the trace measured 1.87s, so the regression is concentrated on the entry gate. F10 medium: Entry-page LCP misses the good threshold |
be-fast-and-stablevisual-stability | pass | high | All three mobile layout captures and both Lighthouse runs reported CLS 0 with no observed layout shifts. |
be-fast-and-stableefficient-main-thread | pass | high | The trace and layout observers found no long tasks, and Lighthouse reported total blocking time 0ms on home and contact. |
be-fast-and-stableefficient-resource-delivery | issues | high | Home loads parser-blocking jQuery 3.4.1 and ajax3.js without async/defer; Lighthouse attributes 2.16s of home LCP to render delay. F11 medium: Legacy scripts block parsing on the entry gate |
be-fast-and-stabletrim-unused-and-duplicate-code | pass | medium | Audited pages transfer 74-93KB of JavaScript and Lighthouse did not report a large unused/duplicate-code opportunity; no third-party script dominates total weight. |
be-inclusivenames-roles-labels | issues | high | Home logo lacks alt text, contact mobile header links lack accessible names, and the custom account overlay lacks dialog semantics. F12 high: Images and controls lack accessible names |
be-inclusivesufficient-contrast | issues | high | The green age-estimation message is #0a910a on #222 at 3.83:1, below the required 4.5:1 for its text size. F13 medium: Age-estimation status text fails contrast |
be-inclusivestructure-and-focus | issues | high | The entry page has no main landmark or H1, its UL directly contains a BR, and the custom modal has no dialog role or keyboard dismissal even though initial button focus is visible. F14 high: Entry semantics and modal focus behavior are incomplete |
be-inclusivelegible-text | issues | high | Legal and support copy is rendered around 12.5px with dense justified paragraphs; the fixed cookie strip overlaps the last visible lines on mobile. F15 medium: Legal/support text is cramped |
be-inclusivezoom-reflow-targets-and-media | issues | high | Reflow succeeds and scaling is not disabled, but numerous footer/content links are only 14px high and mobile header controls are 30x30px, below accessible target guidance. F07 high: Many touch targets are too small |
follow-best-practicesno-console-errors | pass | medium | Both Lighthouse runs scored Best Practices 1.00 and reported no console-error or uncaught-exception failure. |
follow-best-practicessound-document-and-assets | issues | high | Although doctype and UTF-8 are valid, all 2 home images and all 23 contact images omit intrinsic width/height; the entry UL also contains an invalid BR child. F16 low: Image sizing and list markup are unsound |
follow-best-practicesbrowser-platform-hygiene | pass | medium | No deprecated-API, paste-prevention, notification/geolocation-on-load, or BFCache issue was surfaced on the representative pages. |
be-discoverabletitle-and-description | issues | high | The public entry page has a descriptive title but no meta description; Lighthouse failed the meta-description audit. F17 medium: Homepage has no meta description |
be-discoverablecrawlable-and-mobile-friendly | pass | high | Representative links use real href values, viewport meta is present, robots.txt allows the public site and declares a sitemap, and contact Lighthouse SEO scored 1.00. |
be-discoverablecanonical-and-indexing-signals | issues | high | The homepage has no canonical URL, and an arbitrary nonexistent URL returns HTTP 200 with the age gate, creating a soft-404/indexing ambiguity despite a valid sitemap. F18 medium: Canonical and 404 indexing signals are ambiguous |
be-discoverablestructured-and-shareable-metadata | pass | medium | The contact entity exposes six Open Graph tags and eleven hreflang links; the generic age gate has no rich entity requiring JSON-LD. |
be-private-and-securesecure-transport-and-headers | issues | high | HTTPS and HSTS are present, but CSP only says upgrade-insecure-requests, X-Content-Type-Options and Referrer-Policy are absent, and epcolor is neither Secure nor SameSite-protected. F19 high: Browser defenses and cookie flags are incomplete |
be-private-and-securedata-minimisation-and-third-parties | issues | high | Self-hosted Piwik analytics loads before choice while the only cookie notice action is [X] and continued use is treated as consent; the modal also loads Google identity iframes. F20 high: Analytics runs before meaningful consent |
be-private-and-securein-context-permissions-and-modern-auth | pass | medium | Camera access is behind explicit verification and Start camera actions, not requested on load; authentication offers several federated providers in addition to password login. |
be-private-and-securedefensive-browser-policies | issues | high | HSTS and SAMEORIGIN framing protection are present, but the CSP has no source restrictions or frame-ancestors, and Referrer-Policy/nosniff are missing. F19 high: Browser defenses and cookie flags are incomplete |
be-resilientprogressive-enhancement | issues | high | Core text is server-rendered, but the only age-verification action is an onclick button with no form or href fallback, so the primary flow cannot proceed without JavaScript. F21 high: Core age verification has no no-JS path |
be-resilientresilient-runtime-behaviour | issues | high | The custom account overlay remains after Escape and offers no close/cancel control, so runtime state can trap users rather than recovering predictably. F05 high: Custom account overlay traps the user |
be-resilientoffline-and-installable | not-applicable | high | The audited product is an intrinsically network-dependent streaming service, not an installable/offline app; no offline product intent was declared. |
be-resilientnetwork-and-http-failure-states | issues | high | A nonexistent route returns HTTP 200 and the normal age gate, with no not-found explanation, back link, search, or recovery state. F09 high: Recovery states are missing or misleading |
be-internationalisedlang-dir-and-logical-properties | issues | high | Legal pages declare lang=en and expose hreflang, but the entry page has no lang or dir and CSS contains no logical-property strategy. F22 medium: Entry language and bidirectional foundations are missing |
be-internationalisedlocale-aware-data | not-applicable | high | The representative gate, legal and support pages display no dates, currencies, localized numbers, durations, or calendars requiring locale-aware formatting. |
be-internationalisedtime-zone-correctness | not-applicable | high | The representative paths contain no events, schedules, stored times, or recurring time concepts for which time-zone/DST handling applies. |
be-trustworthyno-dark-patterns | issues | high | The gate promises a simple AI verification but first opens registration/sign-in and only later reveals live-selfie/AgeGo options; the cookie notice equates continued use with consent and offers no reject/settings choice. F23 high: Verification and consent disclosures are not transparent |
be-trustworthyhumane-error-handling | pass | medium | The camera flow contains role=status, role=alert, aria-live messaging, Retry and Stop camera controls, plus a detailed camera-access help disclosure. |
be-trustworthytrustworthy-input-assistance | issues | high | Login and password fields omit appropriate autocomplete tokens, and the focused login input is explicitly autocomplete=off, obstructing password-manager/autofill assistance. F24 medium: Sign-in fields block autofill assistance |
be-trustworthysafe-commercial-and-account-flows | issues | high | Account registration is inserted before verification and the resulting overlay has no close control or Escape dismissal, making the commitment neither clear nor easily reversible. F23 high: Verification and consent disclosures are not transparent |
be-sustainableoptimised-assets | issues | medium | The entry spends 169KB on a JPEG background, retains a legacy GIF badge, and contact loads legacy JPEG thumbnails; image elements lack intrinsic dimensions and responsive source selection. F25 low: Decorative and thumbnail assets use avoidable legacy delivery |
be-sustainableno-wasteful-work | issues | high | The contact page fetches multiple adult gallery thumbnails that render at 0x0 on the support template, while analytics also starts before a user choice. F26 medium: Support page fetches invisible media |
be-sustainablethird-party-and-media-budget | pass | medium | The audited static paths transfer 202-284KB, autoplay no media, and contact uses a self-hosted analytics endpoint; overall media/script weight is modest for the product. |
be-agent-readystructured-agent-capabilities | not-applicable | high | No developer intent or user journey indicates that this age-gated media site should expose transactional WebMCP capabilities; its public static content is already server-rendered and it exposes a conventional webmaster API. |
be-agent-readyon-device-inference | not-applicable | high | No summarisation, writing, classification, or other user task on the audited gate/legal/support paths would clearly benefit from built-in on-device inference. |
be-memory-efficientno-leak-under-repeated-interaction | pass | medium | After loading the modal, 20 create/login switches increased heap from 33,591,228 to 33,786,970 bytes (0.6%) and nodes from 141,778 to 143,902 (1.5%), modest bounded growth rather than an unbounded pattern. |
be-memory-efficientbounded-footprint | pass | medium | The loaded gate uses 4.33MB before the account/identity UI and about 33.6MB after that UI loads; the footprint is material but proportionate to the federated-login and camera-capable flow. |
be-memory-efficientno-detached-dom-or-unbounded-listeners | pass | medium | Neither compared heap summary reports Detached* constructors, and Object/Array populations remain nearly flat across 20 modal mode switches; no unbounded retained-listener/timer signature was observed. |
Provenance
Canonical report: results/atomic/reports/0162-www_eporner_com.json
Report SHA-256: 239ce98bb96a849597db42334cc76a6b139bcfff538087d303d8a81da8d5d34b
Local retained report: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_eporner_com/2026-07-25T22-16-35-992Z/report.json
Local evidence root: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_eporner_com/2026-07-25T22-16-35-992Z
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.