Set a minimum and maximum, choose how many numbers you want, and decide whether repeats are allowed. Numbers come from your browser's cryptographic random source rather than a predictable pseudo-random sequence, and nothing is sent anywhere.
Numbers are drawn with crypto.getRandomValues, the browser's cryptographic random source, which is seeded from operating-system entropy. That is a genuinely different thing from Math.random, which is a deterministic pseudo-random generator whose sequence can be reconstructed from a handful of outputs. If a draw is contested, the distinction matters.
The naive way to map random bytes into a range - take the remainder - makes low values slightly more likely whenever the range does not divide evenly into the byte space. This generator discards and redraws values that fall in the incomplete final bucket, so every number in your range is exactly equally likely.
With unique picks switched on you get a random sample rather than independent draws - the right choice for raffles, team selection or picking lottery numbers. Leave it off when each draw should be independent, such as simulating dice.
They come from the Web Crypto API, which draws on the operating system's entropy pool. That is the same source used for cryptographic keys, and it is far stronger than the Math.random() function most simple generators use.
Yes, it is well suited to it. The draw happens in your browser and nothing is recorded, so take a screenshot or a screen recording if you need to show entrants that it was fair.
Steuervergleich Kanton Zürich — Gemeindesteuern vergleichen (Deutsch)