Now let me check where PIN setup/change happens in settings to trace the modal flow:
Agora entendo o problema. O fluxo do PIN faz:
handlePinSetup fecha o modal 1 (setShowPinSetup(false)) e abre o modal 2 (setShowPinConfirm(true))useEffect de cleanup do Modal 1 tenta restaurar overflow para o valor original (que era 'hidden' porque o Modal 1 acabou de defini-lo)AnimatePresence, o Modal 1 ainda anima a saida enquanto o Modal 2 monta. Ambos competem pelo document.body.style.overflowoverflow: 'hidden' (o valor que capturou na montagem, que ja era 'hidden' do Modal 1)O problema raiz: capturar overflow via getComputedStyle na montagem pega o valor "sujo" quando modais se encadeiam. Preciso de um sistema de contagem de referencia.
O problema era que cada Modal capturava o overflow atual do body na montagem via getComputedStyle e o restaurava no cleanup. Quando o PIN encadeia dois modais (Setup fecha e Confirm abre quase simultaneamente), o segundo capturava 'hidden' como valor original e nunca restaurava para ''. Substituí por um contador de referencia (openModalCount): o scroll só é restaurado (overflow: '') quando o ultimo modal desmonta, eliminando qualquer conflito entre modais encadeados ou sobrepostos.
Now let me check the AuthProvider to understand how it handles the redirect:
Now I have the full picture. The AuthProvider already wraps dashboard, transactions, and settings, and it initializes the store. But it doesn't redirect to / if there's no profile. I need to add that redirect logic. Let me update the AuthProvider:
Agora o AuthProvider, que ja envolve as paginas /dashboard, /transactions e /settings, verifica se existem perfis cadastrados e se ha um perfil ativo apos a inicializacao. Se nao houver nenhum perfil ou nenhum perfil ativo, o usuario e redirecionado automaticamente para a pagina inicial (/) com router.replace(). Enquanto o redirect esta em andamento, um loading e exibido para evitar flash de conteudo protegido.