- signIn agora limpa logto_state/nonce/verifier antes de começar
- Evita mismatch quando user tenta logar de novo no mesmo browser
- handleCallback limpa estado se /oidc/token retorna 400 invalid_grant
- Resolve loop 'Falha no login' em modo anônimo re-login
- Hooks como useTasks, useObra, useCronogramas usavam user.id
- Logto usa user.sub como identificador
- Adiciona id= sub no LogtoUser e no getUser() response
- Resolve os 400 Bad Request do Supabase (uuid=undefined)
- Logto EXIGE PKCE, sem isso retorna 400 invalid_request
- client.ts: restaura generatePkce() com crypto.subtle
- Adiciona /callback route + Callback.tsx que processa ?code=
- useAuth expõe handleCallback() no contexto
- nginx já tem fallback SPA, então /callback carrega index.html
e React Router mostra a página de Callback
- Removi PKCE que usava crypto.subtle.digest + btoa
- Provavelmente crypto.subtle não funciona bem no navegador quando chamado via webpack/rollup tree-shaken
- Versão sem PKCE funciona pra apps SPA com confidential=false (que é nosso caso)