## AC-2 — Login com e-mail e senha

**PRD:** `docs/prd/identificacao-e-acesso.md`

**Como** participante, **quero** entrar na minha conta com e-mail e senha,
**para** acessar meus bolões e meu histórico de outro device ou depois de
sair.

**Prioridade:** Must — sem login não há como voltar à própria conta, e a
decisão de recuperar pontos ao reentrar depende disso.

**Critérios de aceite:**

- Dado que informo e-mail e senha corretos, quando faço login, então entro na
  minha conta com meus bolões.
- Dado que informo senha errada, então o login é recusado com mensagem que
  **não** revela se o e-mail existe.
- Dado que erro a senha várias vezes seguidas, então novas tentativas são
  limitadas.
- Dado que já estou logado em outro device, quando faço login aqui, então a
  outra sessão continua válida.
- Dado que faço login vindo de um link de convite, então entro no bolão do
  convite depois de autenticar.

**Tasks:**

_Backend_
- [x] `BE-1` Endpoint de login com verificação de senha por hash (depende de AC-1 BE-1)
- [x] `BE-2` Resposta genérica para credencial inválida, sem distinguir e-mail inexistente de senha errada (depende de BE-1)
- [x] `BE-3` Limitar tentativas de login por conta e por origem (depende de BE-1)

_Mobile_
- [x] `FE-1` Tela de login com estado de submissão e erro claro (depende de BE-1)
- [x] `FE-2` Após login vindo de convite, seguir para o bolão (depende de CC-5 BE-1)
- ~~`FE-3` Acesso à recuperação de senha a partir da tela de login~~ —
  **cancelada em 03/08**: não há recuperação de senha nesta versão (`AC-4`
  cancelada). A tela de login não deve oferecer "esqueci minha senha", para
  não prometer o que não existe.

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano com senha errada repetida, e-mail inexistente e login vindo de convite

**Riscos/Dependências:**

- Depende de AC-1.
- **Mensagem de erro que revela se o e-mail existe** é o erro mais comum
  aqui, e vaza quem participa dos bolões.

- **07/08 — QA:** plano em `docs/testes/AC-2-plano.md`, execução em
  `docs/testes/AC-2-execucao.md` (**10/10 ✅**). A tela de login não tinha **nenhum**
  teste; agora tem cinco, em `test/login_page_test.dart`.
- `AC-2-09` trava a decisão de 03/08: nenhum link de "esqueci minha senha". O caso
  falha se alguém acrescentar o link achando que está melhorando a tela — a pessoa
  tentaria, não receberia nada e concluiria que o app está quebrado.
- `AC-2-08` tem consequência concreta: dois toques no botão criariam duas sessões e
  consumiriam o rate limit da própria conta — a pessoa se bloquearia sozinha.
