The browser source is crypto.getRandomValues(), which the Web Cryptography specification defines as cryptographically strong random values. The tool catches source failure and returns no output; Math.random() is never a fallback.
Each character index is drawn from a 32-bit unsigned value. Values above the largest exact multiple of the active alphabet size are discarded before modulo reduction, avoiding the modulo bias that occurs when 2^32 is not divisible by the alphabet size.
When every selected set is required, the engine generates a complete string uniformly from the combined alphabet and rejects any string missing a set. Conditioning a uniform sample this way keeps all accepted strings equally likely, unlike inserting required characters and shuffling with biased indexes.
The conditional output count is calculated exactly with inclusion-exclusion over the selected disjoint character sets. Its base-2 logarithm is shown as search-space bits. This is a generator-policy measurement, not an online crack-time estimate or overall account rating.
The range is 8 through 128 whole characters and the default is 20. NIST SP 800-63B-4 recommends a minimum of 15 for single-factor passwords, allows a minimum of 8 when the password is part of MFA, says verifiers should permit at least 64, and advises against verifier composition rules.
Normal generation stays in browser memory and analytics records only aggregate option metadata, not the result. Clipboard, reveal, download, screenshots, browser extensions, device security, password-manager storage, transit to the destination, and verifier-side hashing remain outside this generator's protection.