Each password is assembled in three steps:
- One character is drawn at random from each enabled set (uppercase, lowercase, digits, symbols) so no selected set is accidentally missing.
- The remaining positions are filled with random draws from the combined pool of all enabled sets.
- The characters are shuffled with a Fisher–Yates shuffle driven by
crypto.getRandomValues(), so the guaranteed characters don't sit in predictable positions.
Length matters more than complexity: every extra character multiplies the search space by the pool size, which is why the slider goes up to 64.