// login.jsx — 로그인 화면(실제 인증). 이메일+비밀번호 → 서버 세션 쿠키 발급 → 앱 진입. // ※ 데모 계정 목록은 없다. 신원은 서버 세션에서만 도출된다. const Login = ({ onLogin }) => { const [email, setEmail] = React.useState(''); const [pw, setPw] = React.useState(''); const [err, setErr] = React.useState(''); const [busy, setBusy] = React.useState(false); const onSubmit = (e) => { e.preventDefault(); if (busy) return; setErr(''); if (!email.trim() || !pw) { setErr('이메일과 비밀번호를 입력하세요.'); return; } setBusy(true); window.RAlly.login(email.trim(), pw).then(({ status, data }) => { setBusy(false); if (status === 200 && data && data.ok && data.user) { setPw(''); window.RAlly.setUser(data.user); onLogin(data.user); } else { setErr((data && data.error) || '로그인에 실패했습니다.'); } }).catch(() => { setBusy(false); setErr('서버에 연결할 수 없습니다. 잠시 후 다시 시도하세요.'); }); }; return (