Task: https://hola-tech.sg.larksuite.com/record/EOD0rye8eeqNclcZGftl8yU6gDd
Fix: Lock Submit application before async validation; keep it disabled/loading throughout the request, including after closing and reopening the form; unlock after validation, server or connection errors so retry works. Existing API payloads and backend/provider behavior are unchanged.
Verified: 1,572 frontend tests (145 suites), TypeScript, full lint with 0 errors, and independent source review. Maestro on native iOS passed all 3 local-fixture scenarios / 68 commands: six taps produce one POST; reopening stays blocked during the active request; server/network failure permits one successful retry. Reproducible flows and fixture are committed under fe/.maestro/card-create-single-flight/.
Limits: Maestro uses a synthetic local API, not a real issuer. Android, physical devices and backend/provider idempotency were not tested. The existing 15-second transport timeout is unchanged.