Build and push server image / build-and-push (push) Successful in 34s
The card being dragged never moved -- it just faded in place while a static outline highlighted whatever was underneath the finger. Now the card tracks the pointer 1:1 (translate + a slight scale-up "lift"), gets a stronger shadow while airborne, and leaves its grid slot looking like an empty gap until dropped (transform doesn't remove it from layout flow, so the reserved space stays put -- no reflow needed until drop). pointer-events:none while dragging so elementFromPoint's drop-target hit-test sees through to the card underneath instead of hitting the translated one. Also: a short vibration tick when the touch hold-to-arm fires and another on a successful drop (Chrome/Android only, iOS Safari has no Vibration API -- harmless no-op there), and trimmed the arm delay from 350ms to 250ms now that there's actual feedback confirming the hold registered.