I traced the cause using the browser developer tools. During login, the full API call returns HTTP 400 with this response body:
{"error_description":"Missing username.","success":false}
The account was accidentally created with a trailing dot in the email address, a dot immediately before the @. Gmail delivered the activation email normally because Gmail ignores dots in the local part, so the mistake went unnoticed at sign-up. However, the backend now can't resolve that malformed address as a username, which is what produces the 400 "Missing username" error and blocks login. It was working before but I assume that some backend change triggered this.
Since the email is the account identifier and I can't get into the account to change it, I can't fix this myself.
------------------------------
Aleksandar Markovic
------------------------------