How I made it reliable: a small backend on Vercel re-checks every card before moving it (same partner, still due, only into Paid). A failed card is named in a message while the others still move. If the list can't be loaded, the plain question is asked, so nothing moves silently.