Sistema de Ícones — migração lucide-react → unplugin-icons
lucide-react removido por completo e substituído por unplugin-icons apoiado em três datasets Iconify (@iconify-json/lucide, @iconify-json/simple-icons, @iconify-json/mdi) mais uma coleção custom lida via FileSystemIconLoader de app/icons/custom/. Cada ícone agora resolve para um componente SVG inline em build-time — zero fetch em runtime, SSR-safe no Cloudflare Workers, e o chunk manual vendor-lucide foi descontinuado.
API de uso por dataset:import Trophy from "~icons/lucide/trophy" para ícones genéricos de UI, ~icons/simple-icons/<name> para logos de marca (WhatsApp, Facebook, X, Instagram, TikTok), ~icons/mdi/<name> para esportes e equivalentes a emojis, e ~icons/custom/<name> para SVGs próprios em app/icons/custom/ (auto-discovered). Naming kebab-case obrigatório (AlarmClock → alarm-clock, XCircle → x-circle).
Tipo IconComponent substitui LucideIcon em todo o codebase via app/types/icon.ts (superset de SVGProps<SVGSVGElement> com alias legacy de size). unplugin-icons não suporta a prop size do Lucide — codemod scripts/migrate-icon-size-prop.mjs converteu 471 ocorrências de size={X} para width={X} height={X}.
Registry string-driven em app/icons/registry.ts para configs que referenciam ícones por string (ex: icon: "mdi:soccer") consumidos via <Icon name="..." /> ou <SmartIcon icon={...} /> (smart dispatch que renderiza o ícone registrado ou cai no texto literal — preserva configs legados com emoji).
Exceções aceitáveis para SVG inline: spinners/loaders animados customizados, checkmarks de success animados, indicadores visuais brand-specific que não existem em nenhum dataset Iconify, e seals de regulação (ANJL, Anatel, Compulsafe) servidos via <img> apontando para public/assets/seals/.
Migração automatizada via codemods em scripts/: migrate-lucide-to-unplugin-icons.mjs (converte imports nomeados em default imports kebab-case, ordenado via biome check --write), migrate-icon-size-prop.mjs (size → width/height em JSX) e migrate-emoji-icons.mjs (emoji literais → IconName registrado). Fix posterior em toKebabCase para acrônimos consecutivos (XCircle → x-circle, antes virava xcircle quebrado).
Semana 06–12/04 — Onboarding de depósito: banner de bônus, auto-abertura e prefill
FirstDepositBonusBanner entra no DepositModal (94fe5c7b7), visível enquanto o formulário de depósito está ativo, para expor a oferta de primeiro depósito no exato momento da decisão. 62ff8e4a1 ajusta a margem e renomeia o maxLabel não consumido para _maxLabel, mantendo o Biome quieto sem apagar o campo.
O modal de depósito volta a abrir sozinho para quem tem saldo baixo (bf390c85e), replicando o useOpenModalAfterTime do front Vue/Nuxt legado: abre após login ou registro quando o saldo é ≤ R$ 0,99, pula contas restritas (autoexclusão, somente-saque), respeita cooldown de 12 h gravado em localStorage, espera 1 s para que modais de validação e bloqueio tenham prioridade, e limpa a chave no logout.
?value= na URL pré-preenche o valor do depósito (c34c93d93), fechando o ciclo de campanhas que mandam o usuário direto para um valor sugerido. O namespace de i18n de pagamentos ganha as mensagens de bônus de primeiro depósito nos três idiomas (core f31c309).
Adicionado motor de validações no core SDK: stores Zustand, hooks e serviços para gerenciar fluxo de validação de jogadores por contexto (depósito, saque, casino, esportes)
Implementado ValidationBlockerOverlay: tela bloqueante com anti-tamper (MutationObserver + interval), bloqueio de ESC e carrossel de steps
Criado ValidationStepsModal: modal fechável para validações contextuais, com visual idêntico ao overlay porém com botão de fechar
Adicionados 10 componentes de step: Email, Telefone, Endereço, Documentos, Senha, Limites, KYC, Termos, GPS e Conta Bancária
Todos os modais tematizados com tokens auth.* do theme.config.ts
Gates de validação conectados nos módulos existentes: GameIframe (antes de abrir jogo), DepositModal, WithdrawModal, Sports layout, e seções da conta do usuário (endereço, documentos, limites, autoexclusão, timeout)
14 rotas de API criadas para todos os endpoints de validação
Utilitário buildValidationSnapshot adicionado
AuthInitializer conectado com sincronização de runtime
Pacote validations publicado no core com motor de regras, tipos TypeScript e testes unitários