Tool / 01 — POWER

Put the battery story
to the test.

A battery percentage is just a claim. Inspect the API, compare contexts, and observe what the reported charge does over time.

PASSIVE TEST · NO STRESS LOAD
How it works
Collecting browser evidence…

Results will appear together when this observation completes. Document load is held until the report is ready.

Preparing observation…
Evidence, with limits.
A webpage cannot prove that a battery is physical or rule out sophisticated spoofing. A changing reading can be simulated. Unchanged readings, unsupported APIs and privacy defaults are inconclusive.
Methodology & sources

We inspect value ranges and charging/time relationships, repeated object identity, the exposed API surface, a fresh same-origin iframe, battery events, and passive time-series samples. We do not drain the battery with artificial CPU or GPU work. To gather stronger behavioral evidence, unplug your device, keep the tab visible and use a longer observation. Battery estimates are approximate and browsers may round or obfuscate values.

The default 100%, charging, 0 seconds to full and infinite discharge time can represent a full battery, absent hardware or unavailable information. Native-looking APIs and matching realms are weak evidence. Automation disclosure is reported separately.

Reports stay in memory and are replaced on reload. Cloudflare receives ordinary page requests and temporary network gates; browser readings are not uploaded. Without JavaScript, checks do not execute. A load-blocking finalizer holds DOMContentLoaded and load until the report is ready. Three pending fetches prevent networkidle0/networkidle2 from settling before load and report completion. For selector waits, use #probe-complete. Choose a navigation timeout longer than the observation plus 10 seconds.