import React, { useState, useEffect } from 'react' import { Eye, EyeOff } from 'lucide-react' import { toast } from 'sonner' import { useAuth } from '../../contexts/AuthContext' import { useLanguage } from '../../contexts/LanguageContext' import { t } from '../../i18n/translations' import { DeepVoidBackground } from '../common/DeepVoidBackground' import { OnboardingModeSelector } from './OnboardingModeSelector' import type { UserMode } from '../../lib/onboarding' export function LoginPage() { const { language } = useLanguage() const { login } = useAuth() const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [showPassword, setShowPassword] = useState(false) const [error, setError] = useState('') const [loading, setLoading] = useState(false) const [expiredToastId, setExpiredToastId] = useState(null) const [mode, setMode] = useState('beginner') useEffect(() => { if (sessionStorage.getItem('from401') === 'true') { const id = toast.warning(t('sessionExpired', language), { duration: Infinity }) setExpiredToastId(id) sessionStorage.removeItem('from401') } }, [language]) const handleLogin = async (e: React.FormEvent) => { e.preventDefault() setError('') setLoading(true) const result = await login(email, password, mode) setLoading(false) if (result.success) { if (expiredToastId) toast.dismiss(expiredToastId) } else { const msg = result.message || t('loginFailed', language) setError(msg) toast.error(msg) } } return (
{/* Logo + Title */}
NOFX

Welcome back

Sign in to your account

{/* Card */}
{/* Email */}
setEmail(e.target.value)} className="w-full bg-zinc-950/80 border border-zinc-700/80 rounded-xl px-4 py-3 text-sm text-white placeholder-zinc-600 focus:outline-none focus:border-nofx-gold/60 focus:ring-1 focus:ring-nofx-gold/30 transition-all" placeholder="you@example.com" required autoFocus />
{/* Password */}
setPassword(e.target.value)} className="w-full bg-zinc-950/80 border border-zinc-700/80 rounded-xl px-4 py-3 pr-11 text-sm text-white placeholder-zinc-600 focus:outline-none focus:border-nofx-gold/60 focus:ring-1 focus:ring-nofx-gold/30 transition-all" placeholder="••••••••" required />
{/* Error */} {error && (

{error}

)} {/* Submit */}
) }