Adds src/lib/cardReadyGate.ts: after a tile click, poll the detail fingerprint
until it has both changed from the previous artifact and stabilized across
consecutive samples, instead of waiting a hardcoded 280ms and hoping.
- Faster on quick machines (proceeds as soon as the card is stable), correct on
slow ones (waits up to the budget).
- Robust to particle/hover-glow animation: requiring two consecutive equal
samples ignores single-frame noise, and if the card never fully stabilizes it
still proceeds once the content has changed rather than looping on an animated
frame.
- ESC/stop abort is honored between polls via checkAbort.
autoScanLoop now uses waitForCardReady for both the initial read and the one
retry; CLICK_SETTLE_MS removed. 6 new unit tests; 94 total green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>