Guia do Oráculo: Sua Luz no Caminho do Tarot e Baralho Cigano

Encontre clareza imediata para suas dúvidas sobre amor, carreira e espiritualidade. Conecte-se agora aos melhores tarólogos online em um ambiente 100% sigiloso e acolhedor.

Como Funciona

  • 🪙
    Compre Minutos

    Créditos rápidos e seguros

  • 🔮
    Escolha o Tarólogo

    Veja quem está online agora

  • 💬
    Inicie a Consulta

    Respostas em tempo real

24 HORAS
LIBERAÇÃO IMEDIATA
🛟 Precisa de ajuda?
CLIQUE E FALE COM SUPORTE ONLINE

Nossos Oraculistas do Guia do Oráculo

Conecte-se com especialistas em Tarot e Búzios.

Adquira seus Créditos

Escolha a melhor opção para sua jornada de autoconhecimento.

10 Minutos R$ 5,00 Escolher
20 Minutos R$ 15,00 Escolher
MAIS VENDIDO
30 Minutos R$ 24,00 Escolher
40 Minutos R$ 34,00 Escolher
50 Minutos R$ 44,00 Escolher
60 Minutos R$ 50,00 Escolher
70 Minutos R$ 60,00 Escolher
NÍVEL ORÁCULO
100 Minutos R$ 80,00 Escolher
Horóscopo Diário — Conselhos e Mensagens por Signo :root { color-scheme: light; } :root.dark { color-scheme: dark; }/* Smooth gradients + subtle noise */ .bg-aurora { background: radial-gradient(900px 500px at 10% 10%, rgba(99,102,241,.18), transparent 55%), radial-gradient(800px 450px at 90% 20%, rgba(236,72,153,.16), transparent 55%), radial-gradient(700px 420px at 40% 95%, rgba(34,197,94,.14), transparent 55%), radial-gradient(900px 520px at 85% 85%, rgba(14,165,233,.14), transparent 55%); }.glass { background: rgba(255,255,255,.7); border: 1px solid rgba(15,23,42,.08); backdrop-filter: blur(10px); } .dark .glass { background: rgba(2,6,23,.55); border: 1px solid rgba(148,163,184,.14); }.card { box-shadow: 0 1px 0 rgba(2,6,23,.04), 0 8px 30px rgba(2,6,23,.08); } .dark .card { box-shadow: 0 1px 0 rgba(255,255,255,.03), 0 10px 40px rgba(0,0,0,.35); }.shimmer { background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.55) 45%, rgba(255,255,255,0) 90%); background-size: 200% 100%; animation: shimmer 1.4s infinite; } .dark .shimmer { background: linear-gradient(90deg, rgba(2,6,23,0) 0%, rgba(148,163,184,.25) 45%, rgba(2,6,23,0) 90%); background-size: 200% 100%; } @keyframes shimmer { 0% { background-position: 0% 0; } 100% { background-position: 200% 0; } }.focus-ring:focus { outline: none; box-shadow: 0 0 0 4px rgba(99,102,241,.22); }/* Simple enter animation */ .fade-in { animation: fadeIn .35s ease-out both; } @keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }/* Scrollbar (webkit) */ ::-webkit-scrollbar { height: 12px; width: 12px; } ::-webkit-scrollbar-thumb { background: rgba(100,116,139,.35); border-radius: 999px; border: 3px solid transparent; background-clip: content-box; } .dark ::-webkit-scrollbar-thumb { background: rgba(148,163,184,.28); border: 3px solid transparent; background-clip: content-box; }
Horóscopo diário automático (atualiza pela data)

Horóscopo Diário — conselhos e mensagens para cada signo

Escolha seu signo para ver o conselho do dia, vibração energética e dicas rápidas para amor, trabalho e bem-estar. O texto muda automaticamente a cada dia.

Data:

Vibração
Sorte
Cor: · Número:
Foco do dia
Mensagem principal
Amor
Trabalho
Bem-estar
Mantra do dia
Atualiza diariamente Seed: —

Conteúdo gerado automaticamente para fins de entretenimento e reflexão pessoal.

// --------- Data & helpers --------- const SIGNS = [ { key: 'aries', name: 'Áries', dates: '21/03 – 19/04', element: 'Fogo', vibe: 'Iniciativa', icon: '', color: 'indigo', glyph: '♈' }, { key: 'taurus', name: 'Touro', dates: '20/04 – 20/05', element: 'Terra', vibe: 'Constância', icon: '', color: 'emerald', glyph: '♉' }, { key: 'gemini', name: 'Gêmeos', dates: '21/05 – 20/06', element: 'Ar', vibe: 'Curiosidade', icon: '', color: 'sky', glyph: '♊' }, { key: 'cancer', name: 'Câncer', dates: '21/06 – 22/07', element: 'Água', vibe: 'Acolhimento', icon: '', color: 'blue', glyph: '♋' }, { key: 'leo', name: 'Leão', dates: '23/07 – 22/08', element: 'Fogo', vibe: 'Confiança', icon: '', color: 'amber', glyph: '♌' }, { key: 'virgo', name: 'Virgem', dates: '23/08 – 22/09', element: 'Terra', vibe: 'Precisão', icon: '', color: 'lime', glyph: '♍' }, { key: 'libra', name: 'Libra', dates: '23/09 – 22/10', element: 'Ar', vibe: 'Equilíbrio', icon: '', color: 'pink', glyph: '♎' }, { key: 'scorpio', name: 'Escorpião', dates: '23/10 – 21/11', element: 'Água', vibe: 'Profundidade', icon: '', color: 'violet', glyph: '♏' }, { key: 'sagittarius', name: 'Sagitário', dates: '22/11 – 21/12', element: 'Fogo', vibe: 'Expansão', icon: ' ', color: 'orange', glyph: '♐' }, { key: 'capricorn', name: 'Capricórnio', dates: '22/12 – 19/01', element: 'Terra', vibe: 'Estrutura', icon: '', color: 'slate', glyph: '♑' }, { key: 'aquarius', name: 'Aquário', dates: '20/01 – 18/02', element: 'Ar', vibe: 'Originalidade', icon: '', color: 'cyan', glyph: '♒' }, { key: 'pisces', name: 'Peixes', dates: '19/02 – 20/03', element: 'Água', vibe: 'Intuição', icon: '', color: 'teal', glyph: '♓' }, ];const VIBE_LABELS = [ { label: 'Alto astral', hint: 'Energia boa para avançar com leveza.' }, { label: 'Concentrado', hint: 'Menos distrações, mais resultado.' }, { label: 'Intuitivo', hint: 'Confie nos sinais e na sua percepção.' }, { label: 'Prático', hint: 'O que é simples hoje vira progresso.' }, { label: 'Social', hint: 'Conversas certas abrem portas.' }, { label: 'Renovação', hint: 'Hora de limpar e recomeçar com intenção.' }, ];const FOCUS_TOPICS = [ { label: 'Comunicação', hint: 'Diga o essencial. Escute com atenção.' }, { label: 'Rotina & hábitos', hint: 'Pequenos ajustes têm grande efeito.' }, { label: 'Coragem', hint: 'Um passo honesto vale mais que perfeição.' }, { label: 'Amor-próprio', hint: 'Seu ritmo é o melhor guia hoje.' }, { label: 'Finanças', hint: 'Clareza antes de gastar ou prometer.' }, { label: 'Criatividade', hint: 'Transforme uma ideia em algo palpável.' }, { label: 'Paciência', hint: 'O tempo também trabalha a seu favor.' }, { label: 'Limites', hint: 'Gentileza não é ausência de limites.' }, { label: 'Oportunidades', hint: 'Diga sim ao que expande sem te esgotar.' }, { label: 'Autocuidado', hint: 'Energia bem cuidada rende mais.' }, ];const TITLE_TEMPLATES = [ 'O dia pede {action} com {tone}', 'Sua energia hoje favorece {action}', 'O universo te convida a {action}', 'Foco em {action}: o resto se alinha', 'Menos pressa, mais {tone}: avance em {action}', ];const ACTIONS = [ 'dar o primeiro passo', 'concluir uma pendência', 'organizar prioridades', 'conversar com sinceridade', 'definir limites saudáveis', 'cuidar do seu corpo e mente', 'se abrir para novas ideias', 'aprender algo curto e útil', 'fechar ciclos com maturidade', 'simplificar a rotina', 'colocar uma ideia em prática', 'celebrar pequenas vitórias', ];const TONES = [ 'leveza', 'firmeza', 'clareza', 'autenticidade', 'calma', 'coragem', 'delicadeza', 'confiança', 'equilíbrio', 'consistência', ];const MAIN_PARAGRAPHS = [ 'Hoje, a melhor estratégia é agir com consciência: escolha uma coisa para resolver e faça bem feito. Evite prometer mais do que dá para cumprir — seu futuro eu vai agradecer.', 'O dia ganha força quando você respeita seu ritmo. Se bater ansiedade, volte ao básico: água, respiração, pausa curta. Um ajuste pequeno pode destravar grandes decisões.', 'Conversas têm peso especial. Fale com objetividade e escute sem montar resposta na cabeça. Acordos claros evitam ruídos e aproximam quem está no mesmo caminho.', 'Se algo parece confuso, trate como sinal de refinamento: ajuste, teste, recomece. Nem tudo é para ser resolvido no impulso — algumas respostas chegam com paciência.', 'Energia boa para alinhar intenção e ação. O que você faz em silêncio hoje vira resultado amanhã. Foque no processo, e não apenas no aplauso.', 'Cuidado com excesso de comparação. Sua trajetória é única: coloque atenção no que você controla e solte o que é expectativa dos outros. Segurança se constrói por dentro.', 'Sutilezas contam: um gesto, uma mensagem, um pedido bem feito. O universo responde melhor quando você é claro sobre o que quer e gentil com o que sente.', 'Você pode sentir vontade de mudar tudo de uma vez. Prefira o caminho inteligente: comece pelo que dá mais retorno com menos desgaste. Coerência é o seu superpoder hoje.', ];const SPIRITUAL_MESSAGES = [ 'Mensagem: seu coração sabe quando é hora de avançar e quando é hora de recuar. Confie na sensação de paz como bússola.', 'Mensagem: ao cortar excessos, você abre espaço para o essencial. Desapegar também é um ato de amor.', 'Mensagem: o que é seu não te deixa em dúvida por muito tempo. Observe os sinais repetidos — eles são convites.', 'Mensagem: sua energia muda quando você muda a narrativa. Fale consigo como falaria com alguém que você ama.', 'Mensagem: disciplina pode ser leve. Um compromisso pequeno hoje vira consistência amanhã.', 'Mensagem: nem tudo precisa de resposta imediata. Silêncio também é direção.', ];const ALERTS = [ 'Alerta: cuidado com impulsos e respostas no calor do momento. Respire antes de decidir.', 'Alerta: não assuma responsabilidades que não são suas. Delegar também é maturidade.', 'Alerta: evite gastar para compensar emoções. Procure conforto que realmente nutre.', 'Alerta: perfeccionismo pode atrasar. Feito com presença vale mais que perfeito.', 'Alerta: não ignore sinais do corpo. Uma pausa pode ser o melhor “sim” do dia.', 'Alerta: ciúmes e comparações drenam energia. Volte ao que você valoriza.', ];const LOVE = [ 'Aproxime com honestidade e sem jogos. Um gesto simples pode virar ponte.', 'Se estiver em casal, ajuste expectativas; se estiver só, diga claramente o que procura.', 'Boa fase para conversas maduras. Evite indiretas e escolha transparência.', 'Carinho aumenta quando você se coloca no centro com respeito. Limites são afeto.', 'Atração cresce com presença. Menos tela, mais olho no olho.', ];const WORK = [ 'Organize a lista em 3 prioridades e resolva a primeira antes de abrir novas abas.', 'Bom dia para negociar e alinhar prazos. Documente acordos para evitar ruído.', 'Ideias criativas aparecem em pausas curtas. Anote tudo e refine depois.', 'Evite fazer tudo sozinho(a). Pedir ajuda pode acelerar o que importa.', 'Trate o básico com excelência: revisão, detalhes e consistência fazem diferença.', ];const HEALTH = [ 'Beba água, alongue 3 minutos e dê uma volta curta. O corpo pede movimento gentil.', 'Diminua estímulos no fim do dia. Seu sono é seu investimento mais inteligente.', 'Alimente-se com mais cor e menos pressa. Mastigar também é autocuidado.', 'Se a mente acelerar, volte à respiração: 4 segundos inspira, 6 expira, por 2 minutos.', 'Faça uma limpeza de energia: arrume um canto da casa e sinta a leveza voltar.', ];const MANTRAS = [ 'Eu escolho clareza e avanço com confiança.', 'Eu honro meus limites e cuido da minha energia.', 'Eu confio no processo e faço a minha parte.', 'Eu me comunico com verdade e acolho o que sinto.', 'Eu priorizo o essencial e deixo o resto ir.', 'Eu mereço paz, consistência e bons encontros.', ];const COLORS = [ 'Azul', 'Verde', 'Roxo', 'Rosa', 'Amarelo', 'Laranja', 'Vermelho', 'Turquesa', 'Branco', 'Dourado', 'Prata', 'Vinho' ];const LUCKY = [ 'Abertura', 'Proteção', 'Criatividade', 'Equilíbrio', 'Persistência', 'Coragem', 'Clareza', 'Harmonia', 'Foco', 'Renovação' ];const WEEKDAYS = ['domingo','segunda-feira','terça-feira','quarta-feira','quinta-feira','sexta-feira','sábado'];function pad2(n){ return String(n).padStart(2,'0'); } function toISODate(d){ return `${d.getFullYear()}-${pad2(d.getMonth()+1)}-${pad2(d.getDate())}`; }function hashString(str) { // FNV-1a 32-bit let h = 0x811c9dc5; for (let i = 0; i >> 0; }function mulberry32(seed) { return function() { let t = seed += 0x6D2B79F5; t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296; } }function pick(rng, arr) { return arr[Math.floor(rng() * arr.length)]; }function sentenceCase(s) { return s.charAt(0).toUpperCase() + s.slice(1); }function makeIcon(glyph) { // Minimal, crisp icon container return `
${glyph}
`; }function setTheme(mode) { const root = document.documentElement; if (mode === 'dark') root.classList.add('dark'); else root.classList.remove('dark'); localStorage.setItem('theme', mode); }function getTheme() { const saved = localStorage.getItem('theme'); if (saved === 'dark' || saved === 'light') return saved; return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; }function buildReading(sign, isoDate, variant) { const base = `${isoDate}|${sign.key}|v${variant}`; const seed = hashString(base); const rng = mulberry32(seed);const vibeObj = pick(rng, VIBE_LABELS); const focusObj = pick(rng, FOCUS_TOPICS);const action = pick(rng, ACTIONS); const tone = pick(rng, TONES); const title = pick(rng, TITLE_TEMPLATES) .replaceAll('{action}', action) .replaceAll('{tone}', tone);// 2 main paragraphs + one spiritual + one alert const p1 = pick(rng, MAIN_PARAGRAPHS); const p2 = pick(rng, MAIN_PARAGRAPHS); const spirit = pick(rng, SPIRITUAL_MESSAGES); const alert = pick(rng, ALERTS);const love = pick(rng, LOVE); const work = pick(rng, WORK); const health = pick(rng, HEALTH);const lucky = pick(rng, LUCKY); const color = pick(rng, COLORS); const number = 1 + Math.floor(rng() * 99); const mantra = pick(rng, MANTRAS);// A tiny personalization by element const elementLine = { 'Fogo': 'Use sua chama com direção: iniciativa + respeito aos seus limites.', 'Terra': 'Seu poder está no consistente: faça o simples com excelência.', 'Ar': 'Ideias brilham quando você filtra o excesso: escolha clareza.', 'Água': 'Seu sentir é bússola: acolha emoções sem se afogar nelas.', }[sign.element] || '';return { seedShort: seed.toString(16).slice(0, 8).toUpperCase(), title: sentenceCase(title), body: [ `${elementLine}`, p1, p2, spirit, alert, ].filter(Boolean), vibe: vibeObj.label, vibeHint: vibeObj.hint, focus: focusObj.label, focusHint: focusObj.hint, lucky, color, number, love, work, health, mantra, }; }// --------- UI state --------- const els = { dateLabel: document.getElementById('dateLabel'), weekdayLabel: document.getElementById('weekdayLabel'), signList: document.getElementById('signList'), search: document.getElementById('search'), btnClear: document.getElementById('btnClear'), btnTheme: document.getElementById('btnTheme'), btnToday: document.getElementById('btnToday'), btnRandom: document.getElementById('btnRandom'), btnSave: document.getElementById('btnSave'), btnAll: document.getElementById('btnAll'), btnCloseAll: document.getElementById('btnCloseAll'), allSection: document.getElementById('allSection'), allGrid: document.getElementById('allGrid'), btnCopyLink: document.getElementById('btnCopyLink'), btnCopyText: document.getElementById('btnCopyText'), btnHelp: document.getElementById('btnHelp'), helpModal: document.getElementById('helpModal'), btnCloseHelp: document.getElementById('btnCloseHelp'),heroIcon: document.getElementById('heroIcon'), heroSign: document.getElementById('heroSign'), heroDates: document.getElementById('heroDates'), heroTag: document.getElementById('heroTag'),metricVibe: document.getElementById('metricVibe'), metricVibeHint: document.getElementById('metricVibeHint'), metricLuck: document.getElementById('metricLuck'), metricColor: document.getElementById('metricColor'), metricNumber: document.getElementById('metricNumber'), metricFocus: document.getElementById('metricFocus'), metricFocusHint: document.getElementById('metricFocusHint'),mainTitle: document.getElementById('mainTitle'), mainBody: document.getElementById('mainBody'), love: document.getElementById('love'), work: document.getElementById('work'), health: document.getElementById('health'), mantra: document.getElementById('mantra'), seedLabel: document.getElementById('seedLabel'),footerYear: document.getElementById('footerYear'), };const state = { isoDate: toISODate(new Date()), variant: 0, selectedKey: null, filteredKeys: new Set(SIGNS.map(s => s.key)), };function setLabelsForDate() { const d = new Date(state.isoDate + 'T12:00:00'); const dd = pad2(d.getDate()); const mm = pad2(d.getMonth()+1); const yyyy = d.getFullYear(); els.dateLabel.textContent = `${dd}/${mm}/${yyyy}`; els.weekdayLabel.textContent = sentenceCase(WEEKDAYS[d.getDay()]); }function getSelectedSign() { return SIGNS.find(s => s.key === state.selectedKey) || SIGNS[0]; }function applyHeroAccent(sign) { // Use a rotating gradient based on sign element const map = { 'Fogo': 'from-amber-500 via-orange-500 to-rose-500', 'Terra': 'from-emerald-500 via-lime-500 to-teal-500', 'Ar': 'from-sky-500 via-indigo-500 to-cyan-500', 'Água': 'from-blue-500 via-violet-500 to-teal-500', }; const grad = map[sign.element] || 'from-indigo-500 via-purple-500 to-pink-500'; els.heroIcon.className = `grid h-12 w-12 place-items-center rounded-2xl bg-gradient-to-br ${grad} text-white shadow-sm`; els.heroIcon.innerHTML = makeIcon(sign.glyph); }function renderSignList() { const q = (els.search.value || '').trim().toLowerCase(); els.signList.innerHTML = '';const filtered = SIGNS.filter(s => { if (!q) return true; return s.name.toLowerCase().includes(q) || s.element.toLowerCase().includes(q); });state.filteredKeys = new Set(filtered.map(s => s.key));for (const sign of filtered) { const active = sign.key === state.selectedKey; const btn = document.createElement('button'); btn.className = `focus-ring group flex items-center gap-3 rounded-2xl p-3 text-left ring-1 transition ${ active ? 'bg-indigo-600 text-white ring-indigo-500/30' : 'bg-white/60 text-slate-800 ring-slate-900/5 hover:bg-white dark:bg-slate-900/50 dark:text-slate-100 dark:ring-white/10 dark:hover:bg-slate-900' }`;btn.innerHTML = `
${sign.glyph}
${sign.name}
${sign.element}
${sign.dates}
`;btn.addEventListener('click', () => { state.selectedKey = sign.key; persistUrl(); renderSignList(); renderHero(); closeAll(); window.scrollTo({ top: 0, behavior: 'smooth' }); });els.signList.appendChild(btn); }if (filtered.length === 0) { els.signList.innerHTML = `
Nenhum signo encontrado. Tente “Leão”, “Água” ou “Ar”.
`; } }function renderHero() { const sign = getSelectedSign(); applyHeroAccent(sign);els.heroSign.textContent = sign.name; els.heroDates.textContent = sign.dates; els.heroTag.textContent = `${sign.element} • ${sign.vibe}`;const reading = buildReading(sign, state.isoDate, state.variant);els.metricVibe.textContent = reading.vibe; els.metricVibeHint.textContent = reading.vibeHint;els.metricLuck.textContent = reading.lucky; els.metricColor.textContent = reading.color; els.metricNumber.textContent = reading.number;els.metricFocus.textContent = reading.focus; els.metricFocusHint.textContent = reading.focusHint;els.mainTitle.textContent = reading.title; els.mainBody.innerHTML = reading.body.map(p => `

${p}

`).join(''); els.love.textContent = reading.love; els.work.textContent = reading.work; els.health.textContent = reading.health; els.mantra.textContent = reading.mantra;els.seedLabel.textContent = `Seed: ${reading.seedShort} · ${state.isoDate}`;// Update copyable content els.btnCopyText.dataset.copy = composeShareText(sign, reading); }function composeShareText(sign, reading) { const url = new URL(location.href); url.searchParams.set('sign', sign.key); return `Horóscopo Diário — ${sign.name} (${els.dateLabel.textContent})\n\n${reading.title}\n\n- Conselho: ${reading.body[0]}\n- Amor: ${reading.love}\n- Trabalho: ${reading.work}\n- Bem-estar: ${reading.health}\n- Mantra: ${reading.mantra}\n\nCor: ${reading.color} | Número: ${reading.number}\n\nLink: ${url.toString()}`; }function renderAllGrid() { els.allGrid.innerHTML = ''; for (const sign of SIGNS) { const reading = buildReading(sign, state.isoDate, state.variant); const card = document.createElement('button'); card.className = 'focus-ring rounded-2xl bg-white/60 p-4 text-left ring-1 ring-slate-900/5 hover:bg-white transition dark:bg-slate-900/50 dark:ring-white/10 dark:hover:bg-slate-900'; card.innerHTML = `
${sign.glyph}
${sign.name}
${reading.title}
${reading.vibe}
Amor
${reading.love}
Trabalho
${reading.work}
Bem-estar
${reading.health}
Cor: ${reading.color} Nº: ${reading.number} Foco: ${reading.focus}
`; card.addEventListener('click', () => { state.selectedKey = sign.key; persistUrl(); renderSignList(); renderHero(); closeAll(); window.scrollTo({ top: 0, behavior: 'smooth' }); }); els.allGrid.appendChild(card); } }function openAll() { renderAllGrid(); els.allSection.classList.remove('hidden'); els.allSection.classList.add('fade-in'); els.btnAll.textContent = 'Atualizar lista'; }function closeAll() { els.allSection.classList.add('hidden'); els.btnAll.textContent = 'Ver todos'; }function persistUrl() { const url = new URL(location.href); url.searchParams.set('sign', state.selectedKey); history.replaceState({}, '', url); }function loadFromUrlOrStorage() { const url = new URL(location.href); const urlSign = url.searchParams.get('sign'); const saved = localStorage.getItem('mySign'); const key = urlSign || saved || 'aries'; state.selectedKey = SIGNS.some(s => s.key === key) ? key : 'aries'; }async function copyToClipboard(text) { try { await navigator.clipboard.writeText(text); return true; } catch { // fallback const ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.left = '-9999px'; document.body.appendChild(ta); ta.select(); try { document.execCommand('copy'); document.body.removeChild(ta); return true; } catch { document.body.removeChild(ta); return false; } } }function toast(msg) { const el = document.createElement('div'); el.className = 'fixed bottom-4 left-1/2 z-50 -translate-x-1/2 rounded-2xl bg-slate-900 px-4 py-3 text-sm font-semibold text-white shadow-lg ring-1 ring-white/10 dark:bg-white dark:text-slate-900 dark:ring-slate-900/10 fade-in'; el.textContent = msg; document.body.appendChild(el); setTimeout(() => { el.style.opacity = '0'; el.style.transform = 'translate(-50%, 8px)'; el.style.transition = 'all .25s ease'; }, 1500); setTimeout(() => el.remove(), 1900); }// --------- Events --------- els.btnTheme.addEventListener('click', () => { const next = document.documentElement.classList.contains('dark') ? 'light' : 'dark'; setTheme(next); });els.btnToday.addEventListener('click', () => { state.isoDate = toISODate(new Date()); state.variant = 0; setLabelsForDate(); renderHero(); if (!els.allSection.classList.contains('hidden')) renderAllGrid(); toast('Atualizado para hoje.'); });els.btnRandom.addEventListener('click', () => { // Changes variant (still deterministic for the chosen variant) state.variant = (state.variant + 1) % 7; renderHero(); if (!els.allSection.classList.contains('hidden')) renderAllGrid(); toast('Nova leitura gerada.'); });els.btnSave.addEventListener('click', () => { localStorage.setItem('mySign', state.selectedKey); toast('Signo salvo!'); });els.btnAll.addEventListener('click', () => { if (els.allSection.classList.contains('hidden')) openAll(); else openAll(); // Scroll into view for better UX setTimeout(() => els.allSection.scrollIntoView({ behavior: 'smooth', block: 'start' }), 50); });els.btnCloseAll.addEventListener('click', closeAll);els.search.addEventListener('input', renderSignList); els.btnClear.addEventListener('click', () => { els.search.value = ''; renderSignList(); els.search.focus(); });els.btnCopyLink.addEventListener('click', async () => { const sign = getSelectedSign(); const url = new URL(location.href); url.searchParams.set('sign', sign.key); const ok = await copyToClipboard(url.toString()); toast(ok ? 'Link copiado.' : 'Não foi possível copiar.'); });els.btnCopyText.addEventListener('click', async () => { const text = els.btnCopyText.dataset.copy || ''; const ok = await copyToClipboard(text); toast(ok ? 'Texto copiado.' : 'Não foi possível copiar.'); });function openHelp() { els.helpModal.classList.remove('hidden'); els.helpModal.classList.add('fade-in'); }function closeHelp() { els.helpModal.classList.add('hidden'); }els.btnHelp?.addEventListener('click', openHelp); els.btnCloseHelp?.addEventListener('click', closeHelp);// Click outside to close els.helpModal?.addEventListener('click', (e) => { const t = e.target; if (t && t.dataset && t.dataset.overlay === '1') closeHelp(); });// ESC to close window.addEventListener('keydown', (e) => { if (e.key === 'Escape' && els.helpModal && !els.helpModal.classList.contains('hidden')) closeHelp(); });// --------- Init --------- (function init() { setTheme(getTheme()); loadFromUrlOrStorage(); setLabelsForDate(); renderSignList(); renderHero(); els.footerYear.textContent = `© ${new Date().getFullYear()} · Horóscopo Diário`;// If user navigates with back/forward window.addEventListener('popstate', () => { loadFromUrlOrStorage(); renderSignList(); renderHero(); }); })();