// Screens — Login & Mission Map (Home) const { useState, useEffect } = React; function StarfieldBg() { return ( ); } function LoginScreen({ onLogin }) { const [users, setUsers] = useState([]); const [mode, setMode] = useState('choose'); const [name, setName] = useState(''); const [nick, setNick] = useState(''); const [avatar, setAvatar] = useState('luna'); const [error, setError] = useState(''); const [filterKind, setFilterKind] = useState('Todos'); useEffect(() => { window.AppStorage.getUsers().then(setUsers); }, []); async function handleCreate() { if (!name.trim() || !nick.trim()) { setError('Preencha seu nome e apelido!'); return; } const id = nick.trim().toLowerCase().replace(/\s+/g, '_') + '_' + Date.now().toString(36).slice(-4); const user = { id, name: name.trim(), nick: nick.trim(), avatar }; await window.AppStorage.createUser(user); await window.AppStorage.setCurrentUserId(id); onLogin(user); } async function handlePick(u) { await window.AppStorage.setCurrentUserId(u.id); onLogin(u); } const kinds = ['Todos', 'Cadete', 'Alien', 'Espacial']; const filteredAvatars = filterKind === 'Todos' ? window.Avatars.list : window.Avatars.list.filter(a => a.kind === filterKind); return (
🌍

Missão Planeta Azul

Vire um(a) Cadete da Frota Terra!

{mode === 'choose' && (
{users.length > 0 && (

Já sou cadete!

{users.map(u => { const Av = window.Avatars.get(u.avatar).component; return ( ); })}
)}
)} {mode === 'new' && (

Crie sua conta de cadete

Escolha seu personagem:
{kinds.map(k => ( ))}
{filteredAvatars.map(a => { const Av = a.component; return ( ); })}
{error &&
{error}
}
)}
); } function StarBadge({ stars, max = 3, size = 'sm' }) { return (
{Array.from({ length: max }).map((_, i) => ( ))}
); } function MissionMap({ user, progress, onOpenMission, onOpenGlossary, onOpenMural, onOpenTrophies, onOpenVideos, onLogout }) { const Av = window.Avatars.get(user.avatar).component; const missions = window.MISSIONS; const totalStars = missions.reduce((sum, m) => sum + (Number.isFinite(progress.missions[m.id]?.stars) ? progress.missions[m.id].stars : 0), 0); const maxStars = missions.length * 3; const fuelPct = Math.min(100, Math.round((totalStars / maxStars) * 100)); const rank = window.Avatars.getRank(totalStars); // Sequential unlock: mission N is unlocked if mission N-1 is completed (>=1 star). function isUnlocked(idx) { if (idx === 0) return true; const prev = missions[idx - 1]; return (progress.missions[prev.id]?.stars || 0) >= 1; } return (
{user.nick} {rank.emoji} {rank.title}
Combustível 🚀
{fuelPct}%
Estrelas
⭐ {totalStars}/{maxStars}
Medalhas
🏅 {(progress.badges || []).length}

Mapa de Missões

Complete cada missão para virar Comandante da Frota Terra!

{missions.map((m, idx) => { const mp = progress.missions[m.id]; const stars = mp?.stars || 0; const completed = mp?.completed || false; const locked = !isUnlocked(idx); const total = m.questions.length; // resume info const resume = mp?.resume; const answered = resume?.answeredCount || (completed ? total : 0); const pct = Math.round((answered / total) * 100); const inProgress = !completed && answered > 0; return ( ); })}
); } window.Screens = { LoginScreen, MissionMap, StarBadge, StarfieldBg };