How randomness works

We use the Web Crypto API (crypto.getRandomValues()) to generate uniformly distributed integers. When unavailable, we fall back to Math.random() with a visible warning.

  • No server-side state — rolls happen in your browser.
  • Optional “exploding” dice are re-rolled when the max face appears.
  • Keep/Drop logic is applied after all base (and exploding) rolls are collected.