Thin client over the two Identity Toolkit endpoints the password login
flow needs. Takes its Dio by constructor injection so tests can swap in
a FakeAdapter (test/helpers/fake_adapter.dart).
A response-level failure from the Identity Toolkit REST API. A
connectivity failure (no response at all) is left as a raw
DioException instead, so transport-error handling stays in one place —
the caller's existing catch (DioException e) branch.