// Mock data and state for the entire app const initialTasks = [ { id: 't1', title: 'Reunião com diretoria do projeto', time: '09:00', duration: 60, category: 'trabalho', priority: 'alta', done: true, subtasks: [{ id: 's1', title: 'Preparar apresentação', done: true }, { id: 's2', title: 'Revisar números do Q2', done: true }], date: 'hoje' }, { id: 't2', title: 'Pagar fatura do cartão Nubank', time: '14:00', category: 'pessoal', priority: 'alta', done: false, aiSuggested: true, date: 'hoje' }, { id: 't3', title: 'Treino de pernas — academia', time: '18:30', duration: 75, category: 'saude', priority: 'media', done: false, date: 'hoje' }, { id: 't4', title: 'Ler 30 páginas — Atomic Habits', time: '21:00', category: 'estudo', priority: 'baixa', done: false, date: 'hoje' }, { id: 't5', title: 'Comprar presente da Marina', time: '—', category: 'pessoal', priority: 'media', done: false, date: 'amanha' }, { id: 't6', title: 'Enviar relatório mensal ao Roberto', time: '10:00', category: 'trabalho', priority: 'alta', done: false, date: 'amanha' }, { id: 't7', title: 'Consulta com dermatologista', time: '15:30', category: 'saude', priority: 'media', done: false, date: 'amanha' }, ]; const initialHabits = [ { id: 'h1', name: 'Beber 2L de água', icon: 'drop', color: '#6FB8FF', streak: 23, target: 8, current: 5, unit: 'copos', done: false, history: gen(30, 0.82) }, { id: 'h2', name: 'Ler 30 minutos', icon: 'book', color: '#FFB547', streak: 11, target: 1, current: 0, unit: 'sessão', done: false, history: gen(30, 0.71) }, { id: 'h3', name: 'Treinar', icon: 'dumbbell', color: '#FF7A6B', streak: 47, target: 1, current: 1, unit: 'sessão', done: true, history: gen(30, 0.92) }, { id: 'h4', name: 'Meditar', icon: 'meditate', color: '#B197FC', streak: 8, target: 1, current: 1, unit: 'sessão', done: true, history: gen(30, 0.65) }, { id: 'h5', name: 'Sem redes sociais antes das 10h', icon: 'lock', color: '#5EE3A8', streak: 5, target: 1, current: 1, unit: 'dia', done: true, history: gen(30, 0.55) }, ]; function gen(days, prob) { const a = []; for (let i = 0; i < days; i++) a.push(Math.random() < prob); return a; } const initialGoals = [ { id: 'g1', title: 'Comprar meu primeiro apartamento', deadline: 'Dez 2026', progress: 64, savedReais: 84300, targetReais: 132000, category: 'financeiro', etapas: [ { id: 'e1', title: 'Reservar R$ 40k de entrada', done: true }, { id: 'e2', title: 'Pesquisar bairros em SP', done: true }, { id: 'e3', title: 'Conseguir aprovação Caixa', done: true }, { id: 'e4', title: 'Visitar 5 imóveis', done: false }, { id: 'e5', title: 'Negociar com corretor', done: false }, { id: 'e6', title: 'Assinar contrato', done: false }, ] }, { id: 'g2', title: 'Correr meia maratona — 21km', deadline: 'Set 2026', progress: 42, category: 'saude', etapas: [ { id: 'e1', title: 'Conseguir correr 5km sem parar', done: true }, { id: 'e2', title: 'Bater 10km em treino', done: true }, { id: 'e3', title: 'Inscrição na Maratona SP', done: false }, { id: 'e4', title: 'Treino longo de 18km', done: false }, { id: 'e5', title: 'Provar tênis novo no longão', done: false }, ] }, { id: 'g3', title: 'Aprender inglês fluente (C1)', deadline: 'Jun 2027', progress: 28, category: 'estudo', etapas: [ { id: 'e1', title: 'Concluir nível B2 no Cambly', done: true }, { id: 'e2', title: '30 min de aula por dia', done: true }, { id: 'e3', title: 'Assistir 1 filme por semana sem legenda', done: false }, { id: 'e4', title: 'Fazer simulado TOEFL', done: false }, ] }, ]; const initialFinance = { saldo: 12_847.30, entradas: 8_500.00, saidas: 5_320.45, budget: 6_000.00, cartao: 2_140.80, cartaoLimite: 8_000.00, vencimento: '12 de Junho', transactions: [ { id: 'x1', title: 'iFood — Cardápio Sushi Yamato', cat: 'alimentacao', value: -78.40, time: 'hoje, 13:24', icon: 'cup' }, { id: 'x2', title: 'Salário — Mensal', cat: 'investimentos', value: 8500.00, time: 'hoje, 09:00', icon: 'wallet' }, { id: 'x3', title: 'Uber — Casa → Escritório', cat: 'transporte', value: -23.90, time: 'hoje, 08:14', icon: 'car' }, { id: 'x4', title: 'Spotify Premium', cat: 'lazer', value: -21.90, time: 'ontem', icon: 'headphones' }, { id: 'x5', title: 'Mercado Pão de Açúcar', cat: 'mercado', value: -342.18, time: 'ontem', icon: 'cup' }, { id: 'x6', title: 'Posto Shell — Combustível', cat: 'transporte', value: -180.00, time: '2 dias atrás', icon: 'car' }, { id: 'x7', title: 'Aluguel — Junho/26', cat: 'moradia', value: -2200.00, time: '3 dias atrás', icon: 'home' }, { id: 'x8', title: 'Cinema CineMark — IMAX', cat: 'lazer', value: -68.00, time: '4 dias atrás', icon: 'star' }, ], cofrinhos: [ { id: 'c1', name: 'Viagem para o Japão', icon: 'plane', color: '#FF8FB1', saved: 4250, target: 18000 }, { id: 'c2', name: 'Carro novo — entrada', icon: 'car', color: '#6FB8FF', saved: 12800, target: 25000 }, { id: 'c3', name: 'Reserva de emergência', icon: 'shield', color: '#5EE3A8', saved: 8400, target: 30000 }, ], categoriaGastos: [ { cat: 'Moradia', value: 2200, color: '#B197FC', percent: 41 }, { cat: 'Alimentação', value: 940, color: '#FFB547', percent: 18 }, { cat: 'Transporte', value: 620, color: '#6FB8FF', percent: 12 }, { cat: 'Mercado', value: 510, color: '#5EE3A8', percent: 10 }, { cat: 'Lazer', value: 380, color: '#FF8FB1', percent: 7 }, { cat: 'Outros', value: 670, color: '#FF7A6B', percent: 12 }, ], }; const conquistasData = [ { id: 'a1', name: 'Primeira Centena', desc: '100 tarefas concluídas', icon: 'check', unlocked: true, color: '#5EE3A8', rarity: 'comum' }, { id: 'a2', name: 'Maratonista', desc: '30 dias seguidos de hábitos', icon: 'flame', unlocked: true, color: '#FFB547', rarity: 'rara' }, { id: 'a3', name: 'Mente Sã', desc: '7 dias meditando', icon: 'meditate', unlocked: true, color: '#B197FC', rarity: 'rara' }, { id: 'a4', name: 'Madrugador', desc: '10 dias acordando antes das 6h', icon: 'sun', unlocked: true, color: '#FF7A3D', rarity: 'épica' }, { id: 'a5', name: 'Mestre dos Hábitos', desc: '100 dias seguidos', icon: 'crown', unlocked: false, color: '#FFB547', rarity: 'lendária' }, { id: 'a6', name: 'Foco Total', desc: '50 sessões de Pomodoro', icon: 'pomodoro', unlocked: false, color: '#FF7A6B', rarity: 'épica' }, { id: 'a7', name: 'Investidor', desc: 'Reserva de emergência completa', icon: 'shield', unlocked: false, color: '#5EE3A8', rarity: 'lendária' }, { id: 'a8', name: 'Bibliotecário', desc: 'Ler 12 livros', icon: 'book', unlocked: false, color: '#FFB547', rarity: 'épica' }, ]; const eventsToday = [ { id: 'ev1', title: 'Reunião diretoria — Q2 review', start: 9, end: 10.25, color: '#B197FC', location: 'Sala 4 · Escritório' }, { id: 'ev2', title: 'Almoço com Camila', start: 12.5, end: 13.5, color: '#5EE3A8', location: 'Sushi Yamato' }, { id: 'ev3', title: 'Pomodoro: Projeto JuFlow', start: 14, end: 16, color: '#FF7A6B', location: 'Foco profundo' }, { id: 'ev4', title: 'Treino de pernas', start: 18.5, end: 19.75, color: '#FFB547', location: 'Academia Smart Fit' }, { id: 'ev5', title: 'Jantar em família', start: 20.5, end: 22, color: '#FF8FB1', location: 'Casa dos pais' }, ]; const aiConversations = [ { from: 'ai', text: 'Bom dia, Lucas. ☀️ Acabei de ver sua agenda. Você tem 4 tarefas para hoje e 2 reuniões. O que prefere encarar primeiro?' }, { from: 'me', text: 'Posso adiar a reunião das 9?' }, { from: 'ai', text: 'A das 9 é o review de Q2 com a diretoria — alta prioridade. Sugiro manter. Posso reorganizar o resto do dia para você ter 90min de foco profundo entre 14h e 16h. Aceita?' }, { from: 'me', text: 'Aceita. E me lembra do treino' }, { from: 'ai', text: 'Feito. 18:30, treino de pernas. Vou enviar lembrete às 18:00 com sua playlist habitual. ✨' }, ]; const suggestionsAI = [ 'Resumo da minha semana', 'Onde estou gastando demais?', 'Crie um plano de estudos para inglês', 'Como anda meu progresso de hábitos?', 'Sugira 3 hábitos para 2026', ]; Object.assign(window, { initialTasks, initialHabits, initialGoals, initialFinance, conquistasData, eventsToday, aiConversations, suggestionsAI, });