- Turnstile: quitar clases Tailwind del wrapper (my-3/flex/justify-center)
→ estilo inline neutral centrado, como la web Django.
- login/register/recover: el boton ya NO arranca deshabilitado (gris) por
falta de captcha; se ve activo como en Django. El captcha lo sigue
validando el servidor (devuelve captchaFailed). Se quita el SITE_KEY
cliente ya innecesario.
- reset-password: pagina que habia quedado sin migrar (usaba nw-btn/
nw-input/mx-auto/text-amber) → PageShell + middle-center-table + inputs
planos + recover-button + alert-message, igual que el resto del flujo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reemplazo masivo de los estilos sueltos repetidos por las clases del sistema visual
en ~20 componentes/páginas (auth, cuenta, servicios de personaje, foro, admin, voto):
- inputs -> .nw-input, botones primarios -> .nw-btn, tarjetas -> .nw-card.
Cohesión visual completa con la home y la cabecera.
Verificado: build OK, páginas clave 200/redirect correctos, clases aplicadas.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- lib/recover.ts: requestRecovery(type,email) -> password (crea token en
home_passwordreset + email), accountname (email con las cuentas), activation
(reenvía enlace); respuesta genérica anti-enumeración. resetPassword(token,pass)
re-deriva el verifier SRP6 v2 (bnetMakeRegistration) y actualiza battlenet_accounts,
marca el token usado.
- Routes /api/auth/recover (Turnstile) y /api/auth/reset-password.
- Páginas app/[locale]/recover (RecoverForm: selector de tipo + email + Turnstile) y
reset-password (ResetForm con token de la URL). Catálogos Recover, Reset.
Verificado: recover sin captcha -> captchaFailed; reset token inválido -> invalidLink;
páginas 200. Reutiliza home_passwordreset de Django. Crypto de reset ya validada.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>