The deal is generated by a SHA-256 stream, the same one the deal verifier reproduces. This audit plays a million deals and checks, with standard statistical tests, that every card is equally likely to land in every position: the shuffle favors no rank, suit, or seat.
| Test (categories) | χ² | df | p-value | Result |
|---|---|---|---|---|
| Starter card (52) | 65.09 | 51 | 0.089 | uniform |
| Your first card (52) | 59.12 | 51 | 0.203 | uniform |
| Opponent's first card (52) | 58.68 | 51 | 0.215 | uniform |
| Starter rank (13) | 23.08 | 12 | 0.027 | uniform |
A fair shuffle produces χ² near the degrees of freedom and p-values spread across (0,1); values here are unremarkable, exactly as expected from a uniform process. (A rigged shuffle would show a tiny p-value, under 0.001 say, on the biased quantity.) N = 1,000,000; seeds derived as the game derives per-hand seeds.
No tools, no downloads, no setup. Click the button and your own browser shuffles fifty thousand fresh deals using the exact same SHA-256 shuffle the game uses, then runs the same chi-square tests you see above. It all happens on your device; nothing is sent anywhere.
The identical audit ships as a small, dependency-free Python script in the game's source. From the project folder:
python3 tools/shuffle_uniformity.py 1000000
Runs a full million deals in seconds. The chi-square p-value is computed in pure Python (regularized incomplete gamma), with nothing hidden behind a library. The in-browser version above uses the same deal algorithm and the same test.
This is one of three independent fairness guarantees: (1) per-deal reproducibility from a pre-committed seed (the offline verifier), (2) this statistical uniformity audit, and (3) the AI's structural inability to see your hidden cards (an automated no-peek test in the game's test suite, explained in the AI deep dive). Together: fair cards, an unbiased shuffle, and an AI that can't see your hand.