33fb9627a8
has_legal_moves: was only checking the top face-up card of each tableau column as a move source. In Klondike any face-up card can anchor a movable run, so mid-column cards were missed, causing premature game-over declarations. Now iterates all face-up cards in each column. Also tightened the source set: stock (face-down) cards were included as placement sources producing false positives; waste now only considers its top card (the one actually reachable by the player). Waste flash: card_positions rendered exactly `visible` waste cards, so the card sliding off-pile was despawned the same frame the draw tween started, causing a one-frame flash. Now renders `visible + 1` cards; the extra card sits at x=0 (hidden under the stack) and disappears naturally once the tween positions the new top card over it. Adds regression test: non-top face-up tableau card as only legal move. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>