screen.orientation agrees with the screen's own dimensions
Check id orientation-vs-screen-dims
What an ordinary browser yields
orientation.type agrees with the screen's own width/height; portrait implies height > width.
What a detector infers
screen.orientation.type and screen.width/height are both device-space values sourced from the same display metrics, so they must agree: a type starting with "portrait" implies screen.height > screen.width. The check reads screen.orientation.type and compares that predicate against the reported dimensions. It deliberately stays in device space and does not consult the CSS (orientation:) media query, which is viewport-space — a half-screen snapped desktop window genuinely resolves portrait while the screen is landscape, so crossing that boundary would misfire on real browsers. Two degenerate cases are excluded from scoring rather than guessed at: a square screen (1080x1080 panels exist) and a zero-width or zero-height screen carry no orientation information. A mismatch is informative because it indicates an orientation value from one persona layered over host screen dimensions from another — typically a mobile persona applied to a landscape host. Severity is critical.
How to resolve it
Keep screen.orientation.type consistent with screen.width and screen.height. Both are device-space, so a physically rotated monitor still satisfies this — set them together as one coherent display description rather than overriding orientation independently.
Read in the wild by
Kasada
Collects screen orientation in both the main-window and iframe realms, alongside the screen's own width and height. The CSS orientation media feature is collected as well, as a separate viewport-space probe.
window_screen_orientation, iframe_screen_orientation, window_screen_width, window_screen_height, plus media_orientation — source label: "ips.js 427-probe teardown (emro.cat, Apr 2026)"
Every attribution traces to a published artifact. See the sources and their limits.
Nearby checks in Screen & display
- the outer window fits within the screen
window-boundsThe check asserts only the zoom-invariant bound: window.outerWidth/outerHeight must be non-zero and must fit within the screen. - a non-touch desktop has a fine pointer + hover
pointer-hover-desktopThis check applies only when the UA identifies a desktop platform (Windows, Macintosh, Mac OS X, X11, Linux, CrOS, and not Android/Mobile)… - maxTouchPoints coheres with pointer media
touch-pointer-coherenceA one-directional coherence test: if navigator.maxTouchPoints is greater than zero, matchMedia("(any-pointer: coarse)") is expected to… - screen dimensions resolve via native prototype getters
screen-descriptorsFor width, height, availWidth, availHeight, colorDepth and pixelDepth this asks two questions: does the screen instance carry an own… - a mobile UA has a real touch stack
touch-createevent-coherenceThis check asserts in one direction only: if navigator.userAgent matches iPhone, iPad, iPod or Android, then the environment must also have… - visualViewport agrees with innerWidth/innerHeight
visual-viewport-vs-windowwindow.innerWidth and visualViewport.width are two independent readings of one viewport, and they are related by exactly one thing: the… - the CSS layout viewport width equals window.innerWidth
css-viewport-vs-innerwidth-coherencewindow.innerWidth and the width CSS media queries evaluate against are the same quantity read two ways. matchMedia("(min-width: Npx)") is… - navigation timing milestones run in their spec-defined causal order
nav-timing-orderAkamai Bot Manager v2 devotes an entire signal category to timing — navigation timing, resource timing, first paint, DOM-ready — and this…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Screen & display checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Screen & display — the family orientation-vs-screen-dims belongs to.