// Avatares — personagens em SVG cartoon, tema espacial // Cadetes humanos + alienígenas amigáveis + criaturas espaciais. Plus Bit (mascote) e Geo (Terra). window.Avatars = (function() { // ---------- Cadetes humanos (com capacete) ---------- const Luna = ({ size = 80 }) => ( ); const Teo = ({ size = 80 }) => ( ); const Iris = ({ size = 80 }) => ( ); const Kai = ({ size = 80 }) => ( ); // Nova: Stella (capacete roxo, cabelo trançado) const Stella = ({ size = 80 }) => ( ); // Nova: Nico (capacete amarelo, óculos) const Nico = ({ size = 80 }) => ( {/* Óculos */} ); // ---------- Alienígenas amigáveis ---------- // Zip — alien verde de 3 olhos const Zip = ({ size = 80 }) => ( {/* Bolha do capacete */} {/* Cabeça verde */} {/* Antenas */} {/* 3 olhos */} {/* Sorriso */} {/* Bochechas */} ); // Mira — alienígena rosa fofa, formato gota const Mira = ({ size = 80 }) => ( {/* Olhos grandes */} {/* Sorrisinho */} {/* Brilhos */} ); // Bloop — polvo espacial roxo const Bloop = ({ size = 80 }) => ( {/* Tentáculos */} {/* Olhos */} {/* Boca */} ); // ---------- Criaturas espaciais ---------- // Cometa — cometa com rosto const Cometa = ({ size = 80 }) => ( {/* Cauda */} {/* Núcleo */} {/* Olhos */} {/* Sorriso */} {/* Bochechas */} {/* Brilhos */} ); // Lua — Luinha const Luinha = ({ size = 80 }) => ( {/* Crateras */} {/* Olhos */} {/* Sorriso */} ); // Foguete — Pequeno foguetinho com rosto const Foguete = ({ size = 80 }) => ( {/* Estrelas de fundo */} {/* Corpo do foguete */} {/* Bico */} {/* Janela com rosto */} {/* Aletas */} {/* Chamas */} ); // ---------- Mascote Bit ---------- const Bit = ({ size = 80, mood = 'happy' }) => ( {mood === 'happy' && ( <> )} {mood === 'sad' && ( <> )} {mood === 'wow' && ( <> ! ! )} {mood === 'party' && ( <> )} ); const Geo = ({ size = 80, mood = 'happy' }) => ( ); const list = [ { id: 'luna', name: 'Luna', component: Luna, color: '#fb7185', kind: 'Cadete' }, { id: 'teo', name: 'Téo', component: Teo, color: '#3b82f6', kind: 'Cadete' }, { id: 'iris', name: 'Íris', component: Iris, color: '#10b981', kind: 'Cadete' }, { id: 'kai', name: 'Kai', component: Kai, color: '#f97316', kind: 'Cadete' }, { id: 'stella', name: 'Stella', component: Stella, color: '#a855f7', kind: 'Cadete' }, { id: 'nico', name: 'Nico', component: Nico, color: '#fbbf24', kind: 'Cadete' }, { id: 'zip', name: 'Zip', component: Zip, color: '#4ade80', kind: 'Alien' }, { id: 'mira', name: 'Mira', component: Mira, color: '#f472b6', kind: 'Alien' }, { id: 'bloop', name: 'Bloop', component: Bloop, color: '#a855f7', kind: 'Alien' }, { id: 'cometa', name: 'Cometa', component: Cometa, color: '#fbbf24', kind: 'Espacial' }, { id: 'luinha', name: 'Luinha', component: Luinha, color: '#cbd5e1', kind: 'Espacial' }, { id: 'foguete', name: 'Foguetinho', component: Foguete, color: '#fb7185', kind: 'Espacial' } ]; function get(id) { return list.find(a => a.id === id) || list[0]; } // Patentes — evoluem com estrelas conquistadas const ranks = [ { min: 0, title: 'Recruta', short: 'Recruta', emoji: '🌱', color: '#94a3b8', ring: '#475569' }, { min: 1, title: 'Cadete Iniciante', short: 'Cadete', emoji: '⭐', color: '#fbbf24', ring: '#f59e0b' }, { min: 4, title: 'Cadete Espacial', short: 'Espacial', emoji: '🚀', color: '#38bdf8', ring: '#0284c7' }, { min: 8, title: 'Piloto da Frota', short: 'Piloto', emoji: '🛰️', color: '#a78bfa', ring: '#7c3aed' }, { min: 12, title: 'Tenente Cósmico', short: 'Tenente', emoji: '🌟', color: '#34d399', ring: '#059669' }, { min: 16, title: 'Capitão Estelar', short: 'Capitão', emoji: '💫', color: '#fb7185', ring: '#e11d48' }, { min: 21, title: 'Comandante da Frota Terra', short: 'Comandante', emoji: '👑', color: '#fde047', ring: '#eab308' } ]; function getRank(stars) { const s = Number.isFinite(stars) ? stars : 0; let r = ranks[0]; for (const x of ranks) if (s >= x.min) r = x; const next = ranks.find(x => x.min > s); return { ...r, next }; } // Avatar com aro de patente + emoji da patente const RankedAvatar = ({ avatarId, stars = 0, size = 100 }) => { const av = get(avatarId); const Comp = av.component; const rank = getRank(stars); const ringW = Math.max(3, Math.round(size * 0.04)); const wrapSize = size + ringW * 4; return (
{rank.emoji}
); }; return { Luna, Teo, Iris, Kai, Stella, Nico, Zip, Mira, Bloop, Cometa, Luinha, Foguete, Bit, Geo, list, get, getRank, ranks, RankedAvatar }; })();