Cryptographically secure shuffle using the Fisher-Yates algorithm. The browser's (or NodeJS) crypto services are used to generate strong random numbers.