// =========================================
// SYSTEM: i18n + theme + a11y context + Settings menu
// =========================================
const { useState: _us, useEffect: _ue, useContext: _uc, useRef: _useRef, createContext: _cc } = React;

// ---------- Translations ----------
const COPY = {
  pt: {
    'nav.product': 'Produto',
    'nav.compare': 'Comparar',
    'nav.pricing': 'Preços',
    'nav.login': 'Entrar',
    'nav.cta': 'Auditar grátis',
    'hero.pill': '2,3% do seu GMV está sumindo agora',
    'hero.h.1': 'Marketplace cobrou',
    'hero.h.2': 'a mais',
    'hero.h.3': '. A gente ',
    'hero.h.4': 'prova',
    'hero.h.5': '. E recupera ',
    'hero.h.6': 'automático',
    'hero.sub': 'Auditcash audita cada venda em tempo real, abre contestação no padrão de cada canal e devolve dinheiro pro seu caixa. Sem planilha. Sem advogado.',
    'hero.cta.primary': 'Auditar grátis · 15 dias',
    'hero.cta.secondary': 'Ver demo',
    'hero.proof.1': 'Auditoria grátis 15 dias',
    'hero.proof.2': 'Só paga se recuperar',
    'hero.proof.3': 'Setup em 8 min',
    'hero.video.label': 'Auditando em tempo real',
    'loss.label': 'Seu GMV mensal',
    'loss.monthly': 'Perda média/mês',
    'loss.yearly': 'Perda anual',
    'loss.cta': 'Recuperar',
    'logos.label': 'Conecta direto com',
    'counter.eyebrow': 'Recuperado para vendedores · ao vivo',
    'counter.month': 'Este mês',
    'counter.sellers': 'Vendedores ativos',
    'counter.approval': 'Aprovação',
    'ba.eyebrow': 'Antes / Depois',
    'ba.title.1': 'A mesma operação, com e',
    'ba.title.2': 'sem',
    'ba.title.3': 'Auditcash.',
    'ba.before': 'Sem Auditcash',
    'ba.after': 'Com Auditcash',
    'ba.cinema.alt': 'À esquerda, mesa caótica de madrugada com pilha de planilhas, calculadora e monitor exibindo Excel cheio de erros vermelhos. À direita, a mesma mesa em luz natural da manhã, organizada, com laptop moderno exibindo o dashboard Auditcash em verde.',
    'product.detect.alt': 'Card de tabela de divergências em dark mode com três linhas destacadas em vermelho — comissão fora da tabela, SKU #ML-8842371, valor −R$ 412,80.',
    'product.recon.alt': 'Três cards verticais — Pedido, Repasse e Banco — todos com valor R$ 412,80 e check verde OK, conectados por linha de fluxo. Pill no rodapé: 100% reconciliado, margem real R$ 18.420.',
    'product.openfin.alt': 'Três cards de banco empilhados em perspectiva 3D, cada um com saldo em monospace e pill verde sincronizado. Badge superior: Open Finance · Banco Central.',
    'product.audit.alt': 'Timeline vertical com cinco eventos de auditoria, cada um com timestamp e protocolo hash. Badge superior com cadeado: Imutável · exportável.',
    'product.contest.alt': 'Modal de contestação aberta sobre dashboard, com quatro chips (Canal, Valor, Evidência, Protocolo) já marcados, botão Protocolar em verde, e toast com protocolo aprovado.',
    'comp.eyebrow': 'vs. tudo que você já tentou',
    'comp.title.1': '"Mas eu já tenho planilha."',
    'comp.title.2': 'A gente sabe.',
    'comp.head.1': 'Planilha + analista',
    'comp.head.2': 'Contador / consultoria',
    'pricing.eyebrow': 'Preço sem risco',
    'pricing.title.1': 'Se a gente',
    'pricing.title.2': 'não recupera',
    'pricing.title.3': ', você não paga.',
    'pricing.sub': '3 planos fixos pra quem quer previsibilidade e 1 plano Performance (0,7% sobre o recuperado · mín. R$ 297/mês) pra quem fatura acima de R$ 1MM/mês. Todos com 15 dias de teste — começa só quando você conecta seu Mercado Livre.',
    'pricing.perf.badge': 'Pra quem fatura R$ 1MM+/mês',
    'pricing.perf.name': 'Performance',
    'pricing.perf.range': 'GMV acima de R$ 1MM/mês · sem mensalidade',
    'pricing.perf.prefix': 'Você paga',
    'pricing.perf.per': 'do que recuperarmos',
    'pricing.perf.zero': 'mínimo mensal',
    'pricing.perf.cta': 'Começar sem pagar nada',
    'pricing.guarantee.1': 'Sem contrato de fidelidade. Cancele quando quiser.',
    'pricing.guarantee.2': '30 dias de garantia',
    'pricing.guarantee.3': '— se não encontrar divergências nos primeiros 30 dias, devolvemos 100% do valor pago.',
    'cta.eyebrow': 'Pare de adivinhar',
    'cta.title.1': 'Comece a',
    'cta.title.2': 'auditar',
    'cta.sub': 'Conecte seus marketplaces hoje e veja, em até 48 horas, quanto sua operação está deixando escapar.',
    'cta.primary': 'Começar 30 dias grátis',
    'cta.secondary': 'Agendar demo',
    'cta.micro': 'sem cartão · sem contrato · cancele quando quiser',
    'footer.tagline': 'Conciliação financeira ponta-a-ponta para vendedores de marketplace. Do pedido ao crédito no banco — auditado, sem planilha.',
    'footer.tagline.short': 'Conciliação fintech B2B',
    'footer.cta.h1': 'Conecte um marketplace e veja sua primeira divergência em 8 minutos.',
    'footer.trust.security': 'Dados protegidos · permissão de leitura',
    'footer.trust.openfin': 'Regulamentado pelo Banco Central',
    'footer.trust.soc': 'Auditoria independente · em andamento',
    'footer.product': 'Produto',
    'footer.product.features': 'Funcionalidades',
    'footer.product.compare': 'Comparar',
    'footer.product.integrations': 'Integrações',
    'footer.product.pricing': 'Preços',
    'footer.product.demo': 'Agendar demo',
    'footer.company': 'Empresa',
    'footer.company.about': 'Sobre nós',
    'footer.company.blog': 'Blog',
    'footer.company.cases': 'Cases',
    'footer.company.careers': 'Carreiras',
    'footer.company.contact': 'Contato',
    'footer.legal': 'Legal',
    'footer.legal.privacy': 'Política de Privacidade',
    'footer.legal.terms': 'Termos de Uso',
    'footer.legal.security': 'Segurança',
    'footer.legal.status': 'Status da plataforma',
    'footer.resources': 'Recursos',
    'footer.res.docs': 'Documentação',
    'footer.res.changelog': 'Novidades',
    'footer.res.glossary': 'Glossário',
    'footer.res.help': 'Central de ajuda',
    'footer.status': 'Todos os sistemas operando',
    'settings.title': 'Configurações',
    'settings.lang': 'Idioma',
    'settings.theme': 'Tema',
    'settings.theme.light': 'Claro',
    'settings.theme.dark': 'Escuro',
    'settings.theme.auto': 'Automático',
    'settings.access': 'Acessibilidade',
    'settings.size': 'Tamanho do texto',
    'settings.contrast': 'Alto contraste',
    'settings.motion': 'Reduzir animações',
    'settings.colorblind': 'Daltonismo',
    'settings.cb.none': 'Padrão',
    'settings.cb.deut': 'Deuteranopia',
    'settings.cb.prot': 'Protanopia',
    'settings.cb.trit': 'Tritanopia',
    'settings.calm': 'Modo calmo',
    'settings.calm.sub': 'Reduz estímulos · ideal para TEA/TDAH',
    'settings.narrate': 'Narrar página',
    'settings.narrate.sub': 'Ler em voz alta · síntese de voz',
    'settings.dyslexia': 'Fonte dislexia',
    'settings.video.caption': 'O vídeo do hero não contém áudio',
    'skip.content': 'Pular para o conteúdo',
    // Hero pill
    'hero.pill.accountants': 'Feito por contadores · já nasceu auditado',
    // Live counter ticker
    'counter.ticker.seller': 'Vendedor',
    'counter.ticker.now': 'agora',
    // Hero live dashboard
    'hpd.live': 'Recuperado ao vivo',
    'hpd.month': 'Este mês',
    'hpd.flag.commission16to12': 'Comissão 16% → 12%',
    'hpd.flag.shipping.inflated': 'Frete inflado',
    'hpd.flag.payout.crossed': 'Payout cruzado',
    'hpd.flag.commission.recovered': 'Comissão recuperada',
    // Pain section
    'pain.eyebrow': 'O que tá acontecendo agora no seu caixa',
    'pain.title.1': 'Em',
    'pain.title.2': 'cada',
    'pain.title.3': 'R$ 100 que você vende, R$ 2,30 somem.',
    'pain.title.4': 'Sistematicamente.',
    'pain.lead': 'Comissão errada, frete inflado, payout sumido. Toda hora. Em todo marketplace. E ninguém te avisa.',
    'pain.cta': 'Quero ver minha perda',
    'pain.cta.meta': 'Auditoria grátis por 15 dias após conectar Mercado Livre',
    'pain.div.ttl': 'Comissão divergente detectada',
    'pain.div.status.critical': 'Crítico',
    'pain.div.expected': 'Esperado (12%)',
    'pain.div.charged': 'Cobrado (16%)',
    'pain.div.row.category': 'Categoria',
    'pain.div.row.category.val': 'Eletrônicos · Smartphones',
    'pain.div.row.rate': 'Alíquota correta',
    'pain.div.row.rate.val': '12,00% (Mercado Livre Clássico)',
    'pain.div.row.applied': 'Aplicada',
    'pain.div.row.applied.val': '16,00% (Premium)',
    'pain.div.row.recur': 'Recorrência',
    'pain.div.row.recur.val': '11 pedidos · últimos 14 dias',
    'pain.div.impact': 'Impacto acumulado',
    'pain.div.contest.btn': 'Contestar agora',
    // How it works
    'how.eyebrow': 'Como funciona',
    'how.title.1': 'Auditoria contínua, do',
    'how.title.2': 'pedido',
    'how.title.3': 'ao',
    'how.title.4': 'banco',
    'how.lead': 'Sem planilha. Sem cruzamento manual. Sem perder uma divergência sequer.',
    // Step labels
    'how.step.connect.lab': 'Conexão',
    'how.step.connect.t1': 'Conecta',
    'how.step.connect.t2': 'tudo',
    'how.step.connect.t3': 'em minutos.',
    'how.step.connect.d': 'OAuth nativo com Mercado Livre, Shopee, Amazon e mais. Sua conta bancária via Open Finance regulamentado pelo Banco Central. Sem exportar relatório, sem credencial compartilhada.',
    'how.step.monitor.lab': 'Monitoramento',
    'how.step.monitor.t1': 'Cada pedido, na',
    'how.step.monitor.t2': 'linha do tempo',
    'how.step.monitor.t3': '.',
    'how.step.monitor.d': 'O Auditcash captura pedido, comissão, frete, repasse e crédito bancário em tempo real. Cada transação fica registrada com timestamp, valor e protocolo — auditável de ponta a ponta.',
    'how.step.detect.lab': 'Detecção',
    'how.step.detect.t1': 'O motor de regras',
    'how.step.detect.t2': 'não dorme',
    'how.step.detect.t3': '.',
    'how.step.detect.d': 'Confronta o que foi vendido com o que foi cobrado e o que foi pago. Sinaliza comissões fora da tabela, frete inflado, payout faltando e estornos duplicados — por canal, SKU e categoria.',
    'how.step.contest.lab': 'Contestação',
    'how.step.contest.t1': 'Um clique.',
    'how.step.contest.t2': 'Protocolada.',
    'how.step.contest.d': 'Gera o arquivo no padrão exato de cada marketplace, registra o protocolo no canal certo, e acompanha o status até a resposta. Sua equipe só precisa decidir — o resto é automatizado.',
    'how.step.recover.lab': 'Recuperação',
    'how.step.recover.t1': 'O valor',
    'how.step.recover.t2': 'volta',
    'how.step.recover.t3': 'pra sua conta.',
    'how.step.recover.d': 'O Auditcash confirma o crédito via Open Finance, fecha o ciclo, e atualiza o histórico. Exportável para Excel, CSV e seus principais ERPs — pronto para o fiscal, sem dor de cabeça.',
    // Connect card
    'connect.ttl': 'Conexões ativas',
    'connect.sub': '4 contas conectadas · OAuth + Open Finance',
    'connect.status.connected': 'Conectado',
    'connect.bank.itau': 'Itaú · Open Finance',
    // Timeline (StepMonitor)
    'tl.ttl': 'Linha do tempo · Pedido #ML-8842371',
    'tl.created': 'Pedido criado',
    'tl.commission.applied': 'Comissão aplicada',
    'tl.commission.applied.sub': '28 set · 14:22 · 16% (esperado 12%)',
    'tl.shipping.discount': 'Frete descontado',
    'tl.divergence.detected': 'Divergência detectada',
    'tl.divergence.detected.sub': '28 set · 14:24 · automático',
    'tl.payout': 'Payout no Itaú',
    // StepDetect
    'detect.ttl': 'Motor de regras · 14 SKUs varridos',
    'detect.sub': '2 divergências encontradas',
    'detect.flag.commission': 'Comissão 16% vs 12% esperado',
    'detect.flag.shipping': 'Frete inflado R$ 32,40',
    // StepContest
    'contest.ttl': 'Contestação · protocolo ML-CT-29841',
    'contest.sub': 'Aberta automaticamente em 28 set · 14:25',
    'contest.step.detected': 'Detectada',
    'contest.step.formatted': 'Formatada',
    'contest.step.filed': 'Protocolada',
    'contest.step.response': 'Resposta ML',
    'contest.step.confirm': 'Confirmação',
    'contest.row.type': 'Tipo',
    'contest.row.type.val': 'Reajuste de comissão',
    'contest.row.order': 'Pedido',
    'contest.row.amount': 'Valor solicitado',
    'contest.row.deadline': 'Prazo de resposta',
    'contest.row.deadline.val': 'até 03 out 14:25',
    // StepRecover
    'recover.lab': 'Recuperado neste mês',
    'recover.sublab': 'Creditado de volta na sua conta. Cada transação fechada com protocolo, valor e data — pronto para o seu time fiscal.',
    'recover.item.meta': 'contestações aprovadas',
    // Metrics
    'metrics.l1': 'recuperados por clientes do Auditcash em 12 meses',
    'metrics.l2': 'de receita bruta recuperada em média, por vendedor ativo',
    'metrics.l3': 'tempo médio de resposta dos marketplaces após contestação automática',
    'metrics.l4': 'taxa de aprovação das contestações abertas via Auditcash',
    // Before/After
    'ba.url.before': 'planilhas/conciliacao-out-2026.xlsx',
    'ba.url.after': 'app.auditcash.com.br/dashboard',
    'ba.title.before': 'Conciliação manual · outubro',
    'ba.title.after': 'Auditcash · outubro 2026',
    'ba.sub.before': 'Atualizada 3 dias atrás · 47 abas · cruzamento manual',
    'ba.sub.after': 'Sincronizado há 4 min · automático · 100% reconciliado',
    'ba.badge.before': 'Desatualizado',
    'ba.badge.after': 'Em dia',
    'ba.kpi.div': 'Divergências',
    'ba.kpi.div.sub.before': 'não detectadas',
    'ba.kpi.div.sub.after': 'detectadas em 8 min',
    'ba.kpi.loss': 'Perda do mês',
    'ba.kpi.loss.sub.before': 'estimada · sem evidência',
    'ba.kpi.loss.sub.after': 'recuperado integralmente',
    'ba.kpi.time': 'Tempo gasto',
    'ba.kpi.time.sub.before': 'analista júnior · planilha',
    'ba.kpi.time.sub.after': 'automático · zero esforço',
    'ba.row.flag.unknown1': 'comissão? frete? não sabemos',
    'ba.row.flag.unknown2': 'aguardando relatório Shopee',
    'ba.row.flag.unknown3': 'extrato bancário não cruzado',
    'ba.row.flag.unknown4': 'comissão? frete? não sabemos',
    'ba.row.flag.approved': 'contestação aprovada',
    'ba.row.flag.shipping.fixed': 'frete inflado · corrigido',
    'ba.row.flag.payout.matched': 'payout cruzado com banco',
    'ba.row.flag.commission.ok': 'comissão 14% → 12% · ok',
    'ba.side.before.ttl': 'Você não sabe quanto está perdendo',
    'ba.side.before.sub': 'Planilha desatualizada. Relatório do canal vem com 7 dias de atraso. Banco não cruza com pedido. No final do mês, sobra "diferença de caixa" sem explicação.',
    'ba.side.before.stat1': 'perda anual média (vendedor R$ 800k/mês)',
    'ba.side.before.stat2': 'de tempo manual / mês',
    'ba.side.before.stat3': 'de contestações abertas',
    'ba.side.after.ttl': 'Cada centavo provado, cobrado, recuperado',
    'ba.side.after.sub': 'Cada divergência detectada com evidência. Cada contestação aberta no padrão do canal. Cada crédito confirmado via Open Finance. Você só precisa olhar — o resto é automático.',
    'ba.side.after.stat1': 'de volta no caixa em 12 meses',
    'ba.side.after.stat2': 'de tempo manual / mês',
    'ba.side.after.stat3': 'de aprovação em contestações',
    // Comparison
    'comp.row.detection': 'Detecção de divergências',
    'comp.row.detection.spread': 'manual · 7-14 dias de atraso',
    'comp.row.detection.acc': 'manual · só no fechamento',
    'comp.row.detection.ac': 'automática · em segundos',
    'comp.row.coverage': 'Cobertura',
    'comp.row.coverage.spread': 'só o que você lembra de checar',
    'comp.row.coverage.acc': 'amostragem mensal',
    'comp.row.coverage.ac': '100% das vendas',
    'comp.row.contest': 'Contestação',
    'comp.row.contest.spread': 'você escreve no suporte',
    'comp.row.contest.acc': 'fora do escopo',
    'comp.row.contest.ac': '1 clique · padrão do canal',
    'comp.row.openfin': 'Open Finance / banco',
    'comp.row.openfin.spread': 'copy & paste do extrato',
    'comp.row.openfin.acc': 'extrato exportado em PDF',
    'comp.row.openfin.ac': 'integrado · cruzamento ao vivo',
    'comp.row.time': 'Tempo de equipe',
    'comp.row.time.spread': '8-14h / mês',
    'comp.row.time.acc': '4-6h / mês passando dados',
    'comp.row.time.ac': '0h · só decidir',
    'comp.row.cost': 'Custo mensal',
    'comp.row.cost.spread': 'R$ 4-6k (analista júnior)',
    'comp.row.cost.acc': 'R$ 1,5-3k (sem auditoria)',
    'comp.row.cost.ac': 'R$ 497-997 ou 0,7% do recuperado (mín. R$ 297)',
    'comp.row.recovery': 'Recuperação típica',
    'comp.row.recovery.spread': '0-10% das divergências',
    'comp.row.recovery.acc': '0%',
    'comp.row.recovery.ac': '78% de aprovação',
    'comp.row.feel': 'Como você se sente',
    'comp.row.feel.spread': 'frustrado · sem evidência',
    'comp.row.feel.acc': 'alheio · "deve estar tudo certo"',
    'comp.row.feel.ac': 'tranquilo · auditado em tempo real',
    // Product carousel
    'product.eyebrow': 'O que você ganha',
    'product.title.1': 'Tudo numa',
    'product.title.2': 'tela só',
    'product.title.3': '. Auditoria de operação inteira.',
    'product.aria.label': 'Funcionalidades do produto',
    'product.aria.prev': 'Anterior',
    'product.aria.next': 'Próximo',
    // Slide 1 — Detect
    'product.detect.eyebrow': 'Detecção',
    'product.detect.t1': 'Radar de divergências,',
    'product.detect.t2': '24/7',
    'product.detect.d': 'Motor de regras configura tolerâncias por canal e flagga comissões fora da tabela, frete inflado e payout faltando — em tempo real.',
    'product.detect.lab1': 'Comissão divergente',
    'product.detect.lab2': 'Frete inflado',
    'product.detect.lab3': 'Payout em atraso',
    'product.detect.badge.critical': 'Crítico',
    'product.detect.badge.medium': 'Médio',
    'product.detect.badge.waiting': 'Aguard.',
    // Slide 2 — Recon
    'product.recon.eyebrow': 'Conciliação',
    'product.recon.t1': 'Pedido × repasse × banco,',
    'product.recon.t2': 'automático',
    'product.recon.d': 'Confronta as três pontas e calcula sua margem real. Reconciliação ponta a ponta dos últimos 30 dias.',
    'product.recon.caption': 'Reconciliação ponta a ponta · últimos 30d',
    // Slide 3 — Open Finance
    'product.openfin.eyebrow': 'Open Finance',
    'product.openfin.t1': 'Crédito',
    'product.openfin.t2': 'confirmado',
    'product.openfin.t3': 'no banco',
    'product.openfin.d': 'Conexão regulamentada pelo Banco Central. Cada payout reconciliado contra o extrato bancário real, em tempo real.',
    'product.openfin.itau': 'Itaú · CC operacional',
    'product.openfin.nubank': 'Nubank · PJ',
    'product.openfin.bb': 'Banco do Brasil',
    'product.openfin.synced': 'Sincronizado',
    // Slide 4 — Audit
    'product.audit.eyebrow': 'Auditoria',
    'product.audit.t1': 'Histórico',
    'product.audit.t2': 'imutável',
    'product.audit.t3': ', exportável',
    'product.audit.d': 'Cada evento gravado com data, valor e protocolo — pronto para auditoria fiscal e disputa em arbitragem.',
    'product.audit.ev1': 'Comissão 16% vs 12% · #ML-8842371',
    'product.audit.ev2': 'Contestação aberta · ML-CT-29841',
    'product.audit.ev3': 'Crédito confirmado · Itaú',
    'product.audit.ev4': 'Reconciliação fechada · #ML-8842371',
    'product.audit.ev5': 'Relatório exportado · CSV',
    'product.audit.ev5.amt': '231 linhas',
    // Slide 5 — Contest
    'product.contest.eyebrow': 'Contestação',
    'product.contest.t1': '1 clique.',
    'product.contest.t2': 'Protocolada.',
    'product.contest.d': 'Formato exato de cada canal. Acompanha o status até a resposta, com 78% de aprovação na primeira tentativa.',
    'product.contest.step1': 'Detectada',
    'product.contest.step2': 'Formatada',
    'product.contest.step3': 'Protocolada',
    'product.contest.step4': 'Resposta',
    'product.contest.step5': 'Crédito',
    'product.contest.stat.approval': 'Aprovação',
    'product.contest.stat.response': 'Resposta média',
    'product.contest.stat.recovered': 'Recuperado',
    // Integrations
    'integ.eyebrow': 'Integrações',
    'integ.title.1': 'Conecta na sua',
    'integ.title.2': 'operação atual',
    'integ.title.3': '. Sem trocar de sistema.',
    'integ.group.mp': 'Marketplaces',
    'integ.group.mp.sub': 'OAuth nativo com os principais canais brasileiros.',
    'integ.group.erp': 'ERPs & gestão',
    'integ.group.erp.sub': 'Sincronização bidirecional com seus sistemas atuais.',
    'integ.group.bank': 'Bancos · Open Finance',
    'integ.group.bank.sub': 'Regulamentado pelo Banco Central. Permissão de leitura.',
    'integ.footnote.1': 'Não encontrou sua integração?',
    'integ.footnote.link': 'Fale com a gente',
    'integ.footnote.2': '— nossa API conecta qualquer fonte via webhook ou CSV.',
    // Use cases
    'uc.eyebrow': 'Pra quem é',
    'uc.title.1': 'Feito pra quem vende',
    'uc.title.2': 'sério',
    'uc.title.3': 'nos marketplaces.',
    'uc.1.num': '01 · Vendedor multicanal',
    'uc.1.h1': '3+ marketplaces.',
    'uc.1.h2': 'Zero visibilidade.',
    'uc.1.p': 'Você vende em 3 ou mais canais e perdeu o controle do que cada um realmente paga. O Auditcash unifica tudo num painel e mostra sua margem real por canal.',
    'uc.2.num': '02 · Vendedor alto volume',
    'uc.2.h1': 'Cada',
    'uc.2.h2': 'decimal',
    'uc.2.h3': 'conta.',
    'uc.2.gmv.lab': 'GMV mensal',
    'uc.2.gmv.sub': '1% de erro = R$ 5k/mês',
    'uc.2.p.1': 'Com',
    'uc.2.p.2': 'em GMV mensal, até 1% de erro em comissões representa',
    'uc.2.p.3': 'sumindo por mês. O Auditcash paga o próprio investimento no primeiro mês.',
    'uc.3.num': '03 · Time financeiro',
    'uc.3.h1': 'Menos planilha, mais',
    'uc.3.h2': 'decisão',
    'uc.3.h3': '.',
    'uc.3.p': 'Seu time passa horas cruzando relatórios manualmente. O Auditcash faz isso em segundos e entrega só o que precisa de atenção — o resto fica auditado em silêncio.',
    // Testimonials
    'test.eyebrow': 'Quem usa, fala',
    'test.title.1': '"Pagou',
    'test.title.2': 'dois anos',
    'test.title.3': 'de assinatura no primeiro mês."',
    'test.hero.quote.1': '"No primeiro mês, o Auditcash identificou',
    'test.hero.quote.2': 'em comissões cobradas indevidamente pela Shopee. O processo de contestação levou 4 dias. Isso pagou dois anos de assinatura — e a gente ainda nem tinha conectado a Amazon."',
    'test.hero.name': 'Rodrigo Alves',
    'test.hero.role': 'Head de Marketplace · Eletrônicos · R$ 2M/mês de GMV',
    'test.aside.caption': 'Recuperado em 60 dias',
    'test.aside.lab': 'de comissões e fretes cobrados indevidamente, em 23 pedidos diferentes.',
    'test.aside.row1': 'Shopee · comissão',
    'test.aside.row2': 'ML · frete',
    'test.aside.row3': 'Amazon · payout',
    'test.card1.quote': '"Minha equipe financeira perdia 3 dias por mês cruzando relatórios manualmente. Hoje recebemos um resumo diário automático — só com o que precisa de atenção."',
    'test.card1.name': 'Camila Torres',
    'test.card1.role': 'CFO · E-commerce de moda · 4 canais ativos',
    'test.card2.quote.1': '"Nunca imaginei que \'frete inflado\' era um problema real até o Auditcash mostrar',
    'test.card2.quote.2': 'de diferença acumulada em 60 dias. Contestamos tudo de uma vez. Aprovado."',
    'test.card2.name': 'Felipe Nascimento',
    'test.card2.role': 'Diretor de Operações · Cosméticos · R$ 800k/mês',
    // Pricing
    'price.popular': 'Mais popular',
    'price.custom.prefix': 'Para grandes operações',
    'price.from': 'A partir de',
    'price.custom.val': 'Sob consulta',
    'price.month': '/mês',
    // Performance plan (additional)
    'pricing.perf.feat.mp': 'Marketplaces ilimitados',
    'pricing.perf.feat.recon': 'Conciliação em tempo real',
    'pricing.perf.feat.openfin': 'Open Finance + ERP',
    'pricing.perf.feat.contest': 'Contestação automática',
    'pricing.perf.feat.history': 'Histórico completo · 24 meses',
    'pricing.perf.feat.support': 'Suporte prioritário',
    // Growth plan
    'pricing.growth.plan': 'Fixo · Growth',
    'pricing.growth.range': '1 seller · todos os conectores · previsível',
    'pricing.growth.feat.mp': 'Marketplaces ilimitados',
    'pricing.growth.feat.recon': 'Conciliação em tempo real',
    'pricing.growth.feat.openfin': 'Open Finance + ERP',
    'pricing.growth.feat.history': 'Histórico de 24 meses',
    'pricing.growth.feat.support': 'Suporte prioritário',
    'pricing.growth.cta': 'Plano fixo',
    // Enterprise plan
    'pricing.ent.plan': 'Enterprise',
    'pricing.ent.range': 'Acima de R$ 3M/mês · multi-CNPJ',
    'pricing.ent.feat.all': 'Tudo do Growth',
    'pricing.ent.feat.multicnpj': 'Múltiplos CNPJs',
    'pricing.ent.feat.sla': 'SLA dedicado',
    'pricing.ent.feat.acct': 'Gerente de conta',
    'pricing.ent.feat.api': 'API + webhooks',
    'pricing.ent.cta': 'Falar com especialista',
    'pricing.guarantee.line': 'Sem contrato de fidelidade. Cancele quando quiser.',
    'pricing.guarantee.bold': '30 dias de garantia',
    'pricing.guarantee.tail': '— se não encontrar divergências nos primeiros 30 dias, devolvemos 100% do valor pago.',
    // FAQ
    'faq.eyebrow': 'Perguntas frequentes',
    'faq.title.1': 'Tudo que você quer saber,',
    'faq.title.2': 'antes',
    'faq.title.3': 'de conectar.',
    'faq.lead': 'Não achou? Nosso time responde em até 1 dia útil.',
    'faq.cta': 'Falar com especialista',
    'faq.q1': 'O Auditcash tem acesso às minhas vendas e dados bancários?',
    'faq.a1': 'Conexão via OAuth (marketplaces) e Open Finance (bancos), com permissão de leitura. Nunca movimentamos valores nem temos acesso às suas credenciais de login. Tudo segue Banco Central e LGPD.',
    'faq.q2': 'Preciso exportar relatório manualmente?',
    'faq.a2': 'Não. Após a conexão inicial, o Auditcash busca os dados automaticamente — a cada hora para marketplaces, diariamente para extratos bancários. Você não precisa fazer nada.',
    'faq.q3': 'E se o marketplace não aceitar a contestação?',
    'faq.a3.1': 'O Auditcash registra o protocolo e monitora o prazo de resposta. Sem retorno no prazo, você recebe alerta com próximas ações. Taxa de aprovação superior a',
    'faq.a3.2': '.',
    'faq.q4': 'Funciona para quem vende numa única plataforma?',
    'faq.a4': 'Sim. Muitos clientes começaram com um canal e expandiram depois. O valor já é expressivo mesmo para operação em um único marketplace.',
    'faq.q5': 'Em quanto tempo começo a ver resultado?',
    'faq.a5.1': 'A maioria dos clientes identifica as primeiras divergências em',
    'faq.a5.2': '. Contestações simples são resolvidas em até',
    'faq.a5.3': '.',
    'faq.q6': 'Vai aumentar o trabalho da minha equipe?',
    'faq.a6': 'Ao contrário. O Auditcash substitui o trabalho manual de cruzamento de relatórios. Sua equipe só vê o que precisa de decisão.',
    // FinalCTA personal
    'fcta.tag.prefix': 'Para um vendedor com GMV de',
    'fcta.tag.suffix': 'k/mês',
    'fcta.h.1': 'Você está perdendo',
    'fcta.h.2': 'por ano. Recuperar agora.',
    'fcta.p': 'Conecte um marketplace e veja sua 1ª divergência em 8 minutos. Sem cartão. Você só paga se a gente trouxer dinheiro de volta.',
    'fcta.btn.recover': 'Recuperar',
    'fcta.guarantee': '30 dias de garantia',
    // Footer extras
    'footer.col.aboutus': 'Quem somos',
    // Mockup helpers (dashboard mockup)
    'mock.side.overview': 'Visão geral',
    'mock.side.divergences': 'Divergências',
    'mock.side.contests': 'Contestações',
    'mock.side.recon': 'Conciliação',
    'mock.side.mp': 'Marketplaces',
    'mock.side.banks': 'Bancos',
    'mock.side.config': 'Configuração',
    'mock.side.integ': 'Integrações',
    'mock.main.title': 'Outubro · 2025',
    'mock.main.sub': 'Última sincronização há 4 minutos',
    'mock.kpi.gmv': 'GMV',
    'mock.kpi.recovered': 'Recuperado',
    'mock.kpi.open': 'Em aberto',
    'mock.kpi.open.delta': '23 casos',
    'mock.table.order': 'Pedido',
    'mock.table.channel': 'Canal',
    'mock.table.divergence': 'Divergência',
    // Float cards
    'float.alert.ttl': 'Comissão cobrada a mais',
    'float.alert.sub': 'Mercado Livre · há 12min',
    'float.alert.expected': 'Esperado',
    'float.alert.charged': 'Cobrado',
    'float.alert.diff': 'Diferença',
    'float.recovered.ttl': 'Contestação aprovada',
    'float.recovered.sub': 'Shopee · há 2h',
    'float.recovered.lab': 'Recuperado',
    // Status statuses for product detect
    'status.ok': 'OK',
    'status.flag': 'Flag',
    'narrate.stop': 'Parar leitura',
  },
  en: {
    'nav.product': 'Product',
    'nav.compare': 'Compare',
    'nav.pricing': 'Pricing',
    'nav.login': 'Log in',
    'nav.cta': 'Audit free',
    'hero.pill': '2.3% of your GMV is leaking right now',
    'hero.h.1': 'Marketplaces overcharged',
    'hero.h.2': 'again',
    'hero.h.3': '. We ',
    'hero.h.4': 'prove',
    'hero.h.5': ' it. And get it back ',
    'hero.h.6': 'automatically',
    'hero.sub': 'Auditcash audits every sale in real time, files disputes in each channel\'s exact format, and returns the cash. No spreadsheets. No lawyers.',
    'hero.cta.primary': 'Audit free · 15 days',
    'hero.cta.secondary': 'Watch demo',
    'hero.proof.1': '15-day free audit',
    'hero.proof.2': 'Pay only on recovery',
    'hero.proof.3': '8-min setup',
    'hero.video.label': 'Auditing in real time',
    'loss.label': 'Your monthly GMV',
    'loss.monthly': 'Avg. loss/month',
    'loss.yearly': 'Yearly loss',
    'loss.cta': 'Recover',
    'logos.label': 'Connects natively to',
    'counter.eyebrow': 'Recovered for sellers · live',
    'counter.month': 'This month',
    'counter.sellers': 'Active sellers',
    'counter.approval': 'Approval rate',
    'ba.eyebrow': 'Before / After',
    'ba.title.1': 'The same operation, with and',
    'ba.title.2': 'without',
    'ba.title.3': 'Auditcash.',
    'ba.before': 'Without Auditcash',
    'ba.after': 'With Auditcash',
    'ba.cinema.alt': 'On the left, a chaotic 3am desk with a tall stack of spreadsheets, a calculator and a monitor full of red Excel errors. On the right, the same desk in clean morning light, organized, with a sleek laptop showing the Auditcash dashboard in green.',
    'product.detect.alt': 'Dark-mode discrepancy table card with three rows highlighted in red — commission outside the table, SKU #ML-8842371, value −R$ 412.80.',
    'product.recon.alt': 'Three vertical cards — Order, Payout, Bank — all showing R$ 412.80 with green OK checks, connected by a flow line. Bottom pill: 100% reconciled, real margin R$ 18,420.',
    'product.openfin.alt': 'Three bank cards stacked in 3D perspective, each with a monospace balance and a green "synced" pill. Top-left badge: Open Finance · Central Bank.',
    'product.audit.alt': 'Vertical audit timeline with five events, each with a timestamp and protocol hash. Top badge with a lock icon: Immutable · exportable.',
    'product.contest.alt': 'Contestation modal opened over a dashboard, with four chips (Channel, Value, Evidence, Protocol) all checked, a green "Submit" button, and a success toast with an approved protocol.',
    'comp.eyebrow': 'vs. everything you\'ve tried',
    'comp.title.1': '"But I already use spreadsheets."',
    'comp.title.2': 'We know.',
    'comp.head.1': 'Spreadsheet + analyst',
    'comp.head.2': 'Accountant / consultancy',
    'pricing.eyebrow': 'No-risk pricing',
    'pricing.title.1': 'If we',
    'pricing.title.2': 'don\'t recover',
    'pricing.title.3': ', you don\'t pay.',
    'pricing.sub': '3 fixed plans for predictability and 1 Performance plan (0.7% of what we recover · min R$ 297/month) for businesses above R$ 1M/month GMV. All include a 15-day trial — only starts once you connect Mercado Livre.',
    'pricing.perf.badge': 'For R$ 1M+/month GMV',
    'pricing.perf.name': 'Performance',
    'pricing.perf.range': 'GMV above R$ 1M/month · no monthly fee',
    'pricing.perf.prefix': 'You pay',
    'pricing.perf.per': 'of what we recover',
    'pricing.perf.zero': 'monthly minimum',
    'pricing.perf.cta': 'Start paying nothing',
    'pricing.guarantee.1': 'No fixed-term contract. Cancel anytime.',
    'pricing.guarantee.2': '30-day guarantee',
    'pricing.guarantee.3': '— if we find no discrepancies in the first 30 days, we refund 100%.',
    'cta.eyebrow': 'Stop guessing',
    'cta.title.1': 'Start',
    'cta.title.2': 'auditing',
    'cta.sub': 'Connect your marketplaces today and see, within 48 hours, how much your operation is letting slip.',
    'cta.primary': 'Start 30 days free',
    'cta.secondary': 'Book a demo',
    'cta.micro': 'no card · no contract · cancel anytime',
    'footer.tagline': 'End-to-end financial reconciliation for marketplace sellers. From order to bank credit — audited, no spreadsheets.',
    'footer.tagline.short': 'B2B fintech reconciliation',
    'footer.cta.h1': 'Connect one marketplace and see your first discrepancy in 8 minutes.',
    'footer.trust.security': 'Read-only access · encrypted',
    'footer.trust.openfin': 'Regulated by the Central Bank',
    'footer.trust.soc': 'Independent audit · in progress',
    'footer.product': 'Product',
    'footer.product.features': 'Features',
    'footer.product.compare': 'Compare',
    'footer.product.integrations': 'Integrations',
    'footer.product.pricing': 'Pricing',
    'footer.product.demo': 'Book a demo',
    'footer.company': 'Company',
    'footer.company.about': 'About',
    'footer.company.blog': 'Blog',
    'footer.company.cases': 'Case studies',
    'footer.company.careers': 'Careers',
    'footer.company.contact': 'Contact',
    'footer.legal': 'Legal',
    'footer.legal.privacy': 'Privacy Policy',
    'footer.legal.terms': 'Terms of Service',
    'footer.legal.security': 'Security',
    'footer.legal.status': 'Platform status',
    'footer.resources': 'Resources',
    'footer.res.docs': 'Documentation',
    'footer.res.changelog': 'Changelog',
    'footer.res.glossary': 'Glossary',
    'footer.res.help': 'Help center',
    'footer.status': 'All systems operational',
    'settings.title': 'Settings',
    'settings.lang': 'Language',
    'settings.theme': 'Theme',
    'settings.theme.light': 'Light',
    'settings.theme.dark': 'Dark',
    'settings.theme.auto': 'Auto',
    'settings.access': 'Accessibility',
    'settings.size': 'Text size',
    'settings.contrast': 'High contrast',
    'settings.motion': 'Reduce motion',
    'settings.colorblind': 'Color blindness',
    'settings.cb.none': 'Default',
    'settings.cb.deut': 'Deuteranopia',
    'settings.cb.prot': 'Protanopia',
    'settings.cb.trit': 'Tritanopia',
    'settings.calm': 'Calm mode',
    'settings.calm.sub': 'Reduces stimuli · for ASD/ADHD',
    'settings.narrate': 'Read page',
    'settings.narrate.sub': 'Speech synthesis · read aloud',
    'settings.dyslexia': 'Dyslexia font',
    'settings.video.caption': 'Hero video has no audio',
    'skip.content': 'Skip to content',
    // Hero pill
    'hero.pill.accountants': 'Built by accountants · audited by design',
    // Live counter ticker
    'counter.ticker.seller': 'Seller',
    'counter.ticker.now': 'now',
    // Hero live dashboard
    'hpd.live': 'Recovered live',
    'hpd.month': 'This month',
    'hpd.flag.commission16to12': 'Commission 16% → 12%',
    'hpd.flag.shipping.inflated': 'Inflated shipping',
    'hpd.flag.payout.crossed': 'Payout matched',
    'hpd.flag.commission.recovered': 'Commission recovered',
    // Pain section
    'pain.eyebrow': 'What\'s happening to your cash right now',
    'pain.title.1': 'For',
    'pain.title.2': 'every',
    'pain.title.3': '$100 you sell, $2.30 disappears.',
    'pain.title.4': 'Systematically.',
    'pain.lead': 'Wrong commission, inflated shipping, missing payout. All the time. On every marketplace. And nobody warns you.',
    'pain.cta': 'Show me my loss',
    'pain.cta.meta': 'Free 15-day audit once you connect Mercado Livre',
    'pain.div.ttl': 'Commission mismatch detected',
    'pain.div.status.critical': 'Critical',
    'pain.div.expected': 'Expected (12%)',
    'pain.div.charged': 'Charged (16%)',
    'pain.div.row.category': 'Category',
    'pain.div.row.category.val': 'Electronics · Smartphones',
    'pain.div.row.rate': 'Correct rate',
    'pain.div.row.rate.val': '12.00% (Mercado Livre Classic)',
    'pain.div.row.applied': 'Applied',
    'pain.div.row.applied.val': '16.00% (Premium)',
    'pain.div.row.recur': 'Recurrence',
    'pain.div.row.recur.val': '11 orders · last 14 days',
    'pain.div.impact': 'Cumulative impact',
    'pain.div.contest.btn': 'Dispute now',
    // How it works
    'how.eyebrow': 'How it works',
    'how.title.1': 'Continuous audit, from',
    'how.title.2': 'order',
    'how.title.3': 'to',
    'how.title.4': 'bank',
    'how.lead': 'No spreadsheets. No manual crosschecks. Without missing a single discrepancy.',
    // Step labels
    'how.step.connect.lab': 'Connect',
    'how.step.connect.t1': 'Connect',
    'how.step.connect.t2': 'everything',
    'how.step.connect.t3': 'in minutes.',
    'how.step.connect.d': 'Native OAuth with Mercado Livre, Shopee, Amazon and more. Your bank account via Open Finance regulated by the Central Bank. No report exports, no shared credentials.',
    'how.step.monitor.lab': 'Monitor',
    'how.step.monitor.t1': 'Every order, on the',
    'how.step.monitor.t2': 'timeline',
    'how.step.monitor.t3': '.',
    'how.step.monitor.d': 'Auditcash captures order, commission, shipping, payout and bank credit in real time. Every transaction is logged with timestamp, value and protocol — fully auditable.',
    'how.step.detect.lab': 'Detect',
    'how.step.detect.t1': 'The rules engine',
    'how.step.detect.t2': 'never sleeps',
    'how.step.detect.t3': '.',
    'how.step.detect.d': 'Compares what was sold with what was charged and what was paid. Flags commissions outside the table, inflated shipping, missing payouts and duplicate refunds — by channel, SKU and category.',
    'how.step.contest.lab': 'Dispute',
    'how.step.contest.t1': 'One click.',
    'how.step.contest.t2': 'Filed.',
    'how.step.contest.d': 'Generates the file in each marketplace\'s exact format, files the protocol on the right channel, and tracks status until response. Your team only decides — the rest is automated.',
    'how.step.recover.lab': 'Recover',
    'how.step.recover.t1': 'The money',
    'how.step.recover.t2': 'comes back',
    'how.step.recover.t3': 'to your account.',
    'how.step.recover.d': 'Auditcash confirms the credit via Open Finance, closes the cycle, and updates history. Exportable to Excel, CSV and your main ERPs — ready for finance, no headaches.',
    // Connect card
    'connect.ttl': 'Active connections',
    'connect.sub': '4 accounts connected · OAuth + Open Finance',
    'connect.status.connected': 'Connected',
    'connect.bank.itau': 'Itaú · Open Finance',
    // Timeline (StepMonitor)
    'tl.ttl': 'Timeline · Order #ML-8842371',
    'tl.created': 'Order created',
    'tl.commission.applied': 'Commission applied',
    'tl.commission.applied.sub': 'Sep 28 · 14:22 · 16% (expected 12%)',
    'tl.shipping.discount': 'Shipping deducted',
    'tl.divergence.detected': 'Discrepancy detected',
    'tl.divergence.detected.sub': 'Sep 28 · 14:24 · automatic',
    'tl.payout': 'Payout at Itaú',
    // StepDetect
    'detect.ttl': 'Rules engine · 14 SKUs scanned',
    'detect.sub': '2 discrepancies found',
    'detect.flag.commission': 'Commission 16% vs 12% expected',
    'detect.flag.shipping': 'Inflated shipping R$ 32.40',
    // StepContest
    'contest.ttl': 'Dispute · protocol ML-CT-29841',
    'contest.sub': 'Opened automatically on Sep 28 · 14:25',
    'contest.step.detected': 'Detected',
    'contest.step.formatted': 'Formatted',
    'contest.step.filed': 'Filed',
    'contest.step.response': 'ML response',
    'contest.step.confirm': 'Confirmation',
    'contest.row.type': 'Type',
    'contest.row.type.val': 'Commission adjustment',
    'contest.row.order': 'Order',
    'contest.row.amount': 'Amount requested',
    'contest.row.deadline': 'Response deadline',
    'contest.row.deadline.val': 'by Oct 3, 14:25',
    // StepRecover
    'recover.lab': 'Recovered this month',
    'recover.sublab': 'Credited back to your account. Every transaction closed with protocol, amount and date — ready for your finance team.',
    'recover.item.meta': 'disputes approved',
    // Metrics
    'metrics.l1': 'recovered for Auditcash customers in 12 months',
    'metrics.l2': 'of gross revenue recovered on average, per active seller',
    'metrics.l3': 'average marketplace response time after automatic dispute',
    'metrics.l4': 'approval rate on disputes filed via Auditcash',
    // Before/After
    'ba.url.before': 'spreadsheets/reconciliation-oct-2026.xlsx',
    'ba.url.after': 'app.auditcash.com.br/dashboard',
    'ba.title.before': 'Manual reconciliation · October',
    'ba.title.after': 'Auditcash · October 2026',
    'ba.sub.before': 'Updated 3 days ago · 47 tabs · manual crosscheck',
    'ba.sub.after': 'Synced 4 min ago · automatic · 100% reconciled',
    'ba.badge.before': 'Stale',
    'ba.badge.after': 'On track',
    'ba.kpi.div': 'Discrepancies',
    'ba.kpi.div.sub.before': 'undetected',
    'ba.kpi.div.sub.after': 'detected in 8 min',
    'ba.kpi.loss': 'Monthly loss',
    'ba.kpi.loss.sub.before': 'estimated · no evidence',
    'ba.kpi.loss.sub.after': 'fully recovered',
    'ba.kpi.time': 'Time spent',
    'ba.kpi.time.sub.before': 'junior analyst · spreadsheet',
    'ba.kpi.time.sub.after': 'automatic · zero effort',
    'ba.row.flag.unknown1': 'commission? shipping? unknown',
    'ba.row.flag.unknown2': 'waiting on Shopee report',
    'ba.row.flag.unknown3': 'bank statement not matched',
    'ba.row.flag.unknown4': 'commission? shipping? unknown',
    'ba.row.flag.approved': 'dispute approved',
    'ba.row.flag.shipping.fixed': 'inflated shipping · fixed',
    'ba.row.flag.payout.matched': 'payout matched with bank',
    'ba.row.flag.commission.ok': 'commission 14% → 12% · ok',
    'ba.side.before.ttl': 'You don\'t know how much you\'re losing',
    'ba.side.before.sub': 'Outdated spreadsheet. Channel report comes 7 days late. Bank doesn\'t reconcile with orders. At month end, an unexplained "cash gap" remains.',
    'ba.side.before.stat1': 'avg annual loss (seller $160k/month)',
    'ba.side.before.stat2': 'of manual work / month',
    'ba.side.before.stat3': 'of disputes filed',
    'ba.side.after.ttl': 'Every cent proved, charged back, recovered',
    'ba.side.after.sub': 'Every discrepancy detected with evidence. Every dispute filed in the channel\'s format. Every credit confirmed via Open Finance. You only need to look — the rest is automatic.',
    'ba.side.after.stat1': 'back in cash over 12 months',
    'ba.side.after.stat2': 'of manual work / month',
    'ba.side.after.stat3': 'approval rate on disputes',
    // Comparison
    'comp.row.detection': 'Discrepancy detection',
    'comp.row.detection.spread': 'manual · 7-14 day lag',
    'comp.row.detection.acc': 'manual · only at closing',
    'comp.row.detection.ac': 'automatic · in seconds',
    'comp.row.coverage': 'Coverage',
    'comp.row.coverage.spread': 'only what you remember to check',
    'comp.row.coverage.acc': 'monthly sampling',
    'comp.row.coverage.ac': '100% of sales',
    'comp.row.contest': 'Dispute',
    'comp.row.contest.spread': 'you write to support',
    'comp.row.contest.acc': 'out of scope',
    'comp.row.contest.ac': '1 click · channel-native format',
    'comp.row.openfin': 'Open Finance / bank',
    'comp.row.openfin.spread': 'copy & paste from statement',
    'comp.row.openfin.acc': 'PDF statement export',
    'comp.row.openfin.ac': 'integrated · live matching',
    'comp.row.time': 'Team time',
    'comp.row.time.spread': '8-14h / month',
    'comp.row.time.acc': '4-6h / month sharing data',
    'comp.row.time.ac': '0h · just decide',
    'comp.row.cost': 'Monthly cost',
    'comp.row.cost.spread': 'R$ 4-6k (junior analyst)',
    'comp.row.cost.acc': 'R$ 1.5-3k (no audit)',
    'comp.row.cost.ac': 'R$ 497-997 or 0.7% of recovery (min R$ 297)',
    'comp.row.recovery': 'Typical recovery',
    'comp.row.recovery.spread': '0-10% of discrepancies',
    'comp.row.recovery.acc': '0%',
    'comp.row.recovery.ac': '78% approval rate',
    'comp.row.feel': 'How you feel',
    'comp.row.feel.spread': 'frustrated · no evidence',
    'comp.row.feel.acc': 'detached · "must be fine"',
    'comp.row.feel.ac': 'calm · audited in real time',
    // Product carousel
    'product.eyebrow': 'What you get',
    'product.title.1': 'All in',
    'product.title.2': 'one screen',
    'product.title.3': '. Audit of your whole operation.',
    'product.aria.label': 'Product features',
    'product.aria.prev': 'Previous',
    'product.aria.next': 'Next',
    // Slide 1 — Detect
    'product.detect.eyebrow': 'Detection',
    'product.detect.t1': 'Discrepancy radar,',
    'product.detect.t2': '24/7',
    'product.detect.d': 'Rules engine sets tolerances per channel and flags commissions outside the table, inflated shipping and missing payouts — in real time.',
    'product.detect.lab1': 'Commission mismatch',
    'product.detect.lab2': 'Inflated shipping',
    'product.detect.lab3': 'Payout delayed',
    'product.detect.badge.critical': 'Critical',
    'product.detect.badge.medium': 'Medium',
    'product.detect.badge.waiting': 'Pending',
    // Slide 2 — Recon
    'product.recon.eyebrow': 'Reconciliation',
    'product.recon.t1': 'Order × payout × bank,',
    'product.recon.t2': 'automatic',
    'product.recon.d': 'Confronts the three ends and calculates your real margin. End-to-end reconciliation for the last 30 days.',
    'product.recon.caption': 'End-to-end reconciliation · last 30d',
    // Slide 3 — Open Finance
    'product.openfin.eyebrow': 'Open Finance',
    'product.openfin.t1': 'Credit',
    'product.openfin.t2': 'confirmed',
    'product.openfin.t3': 'at the bank',
    'product.openfin.d': 'Connection regulated by the Central Bank. Every payout reconciled against the real bank statement, in real time.',
    'product.openfin.itau': 'Itaú · Operating account',
    'product.openfin.nubank': 'Nubank · Business',
    'product.openfin.bb': 'Banco do Brasil',
    'product.openfin.synced': 'Synced',
    // Slide 4 — Audit
    'product.audit.eyebrow': 'Audit',
    'product.audit.t1': 'Immutable',
    'product.audit.t2': 'history',
    'product.audit.t3': ', exportable',
    'product.audit.d': 'Every event logged with date, amount and protocol — ready for fiscal audit and arbitration disputes.',
    'product.audit.ev1': 'Commission 16% vs 12% · #ML-8842371',
    'product.audit.ev2': 'Dispute opened · ML-CT-29841',
    'product.audit.ev3': 'Credit confirmed · Itaú',
    'product.audit.ev4': 'Reconciliation closed · #ML-8842371',
    'product.audit.ev5': 'Report exported · CSV',
    'product.audit.ev5.amt': '231 rows',
    // Slide 5 — Contest
    'product.contest.eyebrow': 'Dispute',
    'product.contest.t1': '1 click.',
    'product.contest.t2': 'Filed.',
    'product.contest.d': 'Exact format for each channel. Tracks status until response, with 78% approval on first attempt.',
    'product.contest.step1': 'Detected',
    'product.contest.step2': 'Formatted',
    'product.contest.step3': 'Filed',
    'product.contest.step4': 'Response',
    'product.contest.step5': 'Credit',
    'product.contest.stat.approval': 'Approval',
    'product.contest.stat.response': 'Average response',
    'product.contest.stat.recovered': 'Recovered',
    // Integrations
    'integ.eyebrow': 'Integrations',
    'integ.title.1': 'Plugs into your',
    'integ.title.2': 'current operation',
    'integ.title.3': '. No system swap.',
    'integ.group.mp': 'Marketplaces',
    'integ.group.mp.sub': 'Native OAuth with the main Brazilian channels.',
    'integ.group.erp': 'ERPs & management',
    'integ.group.erp.sub': 'Bidirectional sync with your current systems.',
    'integ.group.bank': 'Banks · Open Finance',
    'integ.group.bank.sub': 'Regulated by the Central Bank. Read-only access.',
    'integ.footnote.1': 'Didn\'t find your integration?',
    'integ.footnote.link': 'Talk to us',
    'integ.footnote.2': '— our API connects any source via webhook or CSV.',
    // Use cases
    'uc.eyebrow': 'Who it\'s for',
    'uc.title.1': 'Built for sellers',
    'uc.title.2': 'serious',
    'uc.title.3': 'about marketplaces.',
    'uc.1.num': '01 · Multichannel seller',
    'uc.1.h1': '3+ marketplaces.',
    'uc.1.h2': 'Zero visibility.',
    'uc.1.p': 'You sell on 3 or more channels and lost control of what each one actually pays. Auditcash unifies it all into one panel and shows your real margin per channel.',
    'uc.2.num': '02 · High-volume seller',
    'uc.2.h1': 'Every',
    'uc.2.h2': 'decimal',
    'uc.2.h3': 'counts.',
    'uc.2.gmv.lab': 'Monthly GMV',
    'uc.2.gmv.sub': '1% error = $1k/month',
    'uc.2.p.1': 'At',
    'uc.2.p.2': 'in monthly GMV, even 1% error in commissions means',
    'uc.2.p.3': 'vanishing per month. Auditcash pays for itself in the first month.',
    'uc.3.num': '03 · Finance team',
    'uc.3.h1': 'Less spreadsheet, more',
    'uc.3.h2': 'decision',
    'uc.3.h3': '.',
    'uc.3.p': 'Your team spends hours crosschecking reports manually. Auditcash does it in seconds and only surfaces what needs attention — the rest stays audited in silence.',
    // Testimonials
    'test.eyebrow': 'They use it, they talk',
    'test.title.1': '"Paid for',
    'test.title.2': 'two years',
    'test.title.3': 'of subscription in the first month."',
    'test.hero.quote.1': '"In the first month, Auditcash identified',
    'test.hero.quote.2': 'in commissions improperly charged by Shopee. The dispute process took 4 days. That paid for two years of subscription — and we hadn\'t even connected Amazon yet."',
    'test.hero.name': 'Rodrigo Alves',
    'test.hero.role': 'Head of Marketplace · Electronics · R$ 2M/month GMV',
    'test.aside.caption': 'Recovered in 60 days',
    'test.aside.lab': 'in commissions and shipping improperly charged, across 23 different orders.',
    'test.aside.row1': 'Shopee · commission',
    'test.aside.row2': 'ML · shipping',
    'test.aside.row3': 'Amazon · payout',
    'test.card1.quote': '"My finance team used to lose 3 days per month crosschecking reports manually. Today we get an automatic daily summary — only with what needs attention."',
    'test.card1.name': 'Camila Torres',
    'test.card1.role': 'CFO · Fashion e-commerce · 4 active channels',
    'test.card2.quote.1': '"I never imagined \'inflated shipping\' was a real problem until Auditcash showed',
    'test.card2.quote.2': 'in cumulative difference over 60 days. We disputed everything at once. Approved."',
    'test.card2.name': 'Felipe Nascimento',
    'test.card2.role': 'Operations Director · Cosmetics · R$ 800k/month',
    // Pricing
    'price.popular': 'Most popular',
    'price.custom.prefix': 'For large operations',
    'price.from': 'From',
    'price.custom.val': 'Custom quote',
    'price.month': '/month',
    // Performance plan (additional)
    'pricing.perf.feat.mp': 'Unlimited marketplaces',
    'pricing.perf.feat.recon': 'Real-time reconciliation',
    'pricing.perf.feat.openfin': 'Open Finance + ERP',
    'pricing.perf.feat.contest': 'Automatic dispute',
    'pricing.perf.feat.history': 'Full history · 24 months',
    'pricing.perf.feat.support': 'Priority support',
    // Growth plan
    'pricing.growth.plan': 'Fixed · Growth',
    'pricing.growth.range': '1 seller · all connectors · predictable',
    'pricing.growth.feat.mp': 'Unlimited marketplaces',
    'pricing.growth.feat.recon': 'Real-time reconciliation',
    'pricing.growth.feat.openfin': 'Open Finance + ERP',
    'pricing.growth.feat.history': '24-month history',
    'pricing.growth.feat.support': 'Priority support',
    'pricing.growth.cta': 'Fixed plan',
    // Enterprise plan
    'pricing.ent.plan': 'Enterprise',
    'pricing.ent.range': 'Above R$ 3M/month · multi-entity',
    'pricing.ent.feat.all': 'Everything in Growth',
    'pricing.ent.feat.multicnpj': 'Multiple legal entities',
    'pricing.ent.feat.sla': 'Dedicated SLA',
    'pricing.ent.feat.acct': 'Account manager',
    'pricing.ent.feat.api': 'API + webhooks',
    'pricing.ent.cta': 'Talk to a specialist',
    'pricing.guarantee.line': 'No fixed-term contract. Cancel anytime.',
    'pricing.guarantee.bold': '30-day guarantee',
    'pricing.guarantee.tail': '— if we find no discrepancies in the first 30 days, we refund 100%.',
    // FAQ
    'faq.eyebrow': 'Frequently asked',
    'faq.title.1': 'Everything you want to know,',
    'faq.title.2': 'before',
    'faq.title.3': 'you connect.',
    'faq.lead': 'Didn\'t find it? Our team responds within 1 business day.',
    'faq.cta': 'Talk to a specialist',
    'faq.q1': 'Does Auditcash access my sales and banking data?',
    'faq.a1': 'Connection via OAuth (marketplaces) and Open Finance (banks), with read-only permission. We never move funds nor access your login credentials. Everything follows Central Bank and LGPD regulation.',
    'faq.q2': 'Do I need to export reports manually?',
    'faq.a2': 'No. After the initial connection, Auditcash fetches data automatically — hourly for marketplaces, daily for bank statements. You don\'t need to do anything.',
    'faq.q3': 'What if the marketplace rejects the dispute?',
    'faq.a3.1': 'Auditcash records the protocol and monitors the response deadline. With no reply by the deadline, you receive an alert with next steps. Approval rate above',
    'faq.a3.2': '.',
    'faq.q4': 'Does it work for single-platform sellers?',
    'faq.a4': 'Yes. Many customers started with one channel and expanded later. The value is meaningful even on a single marketplace operation.',
    'faq.q5': 'How quickly will I see results?',
    'faq.a5.1': 'Most customers identify the first discrepancies within',
    'faq.a5.2': '. Simple disputes are resolved in up to',
    'faq.a5.3': '.',
    'faq.q6': 'Will it add work to my team?',
    'faq.a6': 'The opposite. Auditcash replaces the manual work of crosschecking reports. Your team only sees what needs a decision.',
    // FinalCTA personal
    'fcta.tag.prefix': 'For a seller with GMV of',
    'fcta.tag.suffix': 'k/month',
    'fcta.h.1': 'You\'re losing',
    'fcta.h.2': 'per year. Recover it now.',
    'fcta.p': 'Connect one marketplace and see your 1st discrepancy in 8 minutes. No credit card. You only pay if we bring money back.',
    'fcta.btn.recover': 'Recover',
    'fcta.guarantee': '30-day guarantee',
    // Footer extras
    'footer.col.aboutus': 'About us',
    // Mockup helpers (dashboard mockup)
    'mock.side.overview': 'Overview',
    'mock.side.divergences': 'Discrepancies',
    'mock.side.contests': 'Disputes',
    'mock.side.recon': 'Reconciliation',
    'mock.side.mp': 'Marketplaces',
    'mock.side.banks': 'Banks',
    'mock.side.config': 'Settings',
    'mock.side.integ': 'Integrations',
    'mock.main.title': 'October · 2025',
    'mock.main.sub': 'Last sync 4 minutes ago',
    'mock.kpi.gmv': 'GMV',
    'mock.kpi.recovered': 'Recovered',
    'mock.kpi.open': 'Open',
    'mock.kpi.open.delta': '23 cases',
    'mock.table.order': 'Order',
    'mock.table.channel': 'Channel',
    'mock.table.divergence': 'Discrepancy',
    // Float cards
    'float.alert.ttl': 'Commission overcharged',
    'float.alert.sub': 'Mercado Livre · 12min ago',
    'float.alert.expected': 'Expected',
    'float.alert.charged': 'Charged',
    'float.alert.diff': 'Difference',
    'float.recovered.ttl': 'Dispute approved',
    'float.recovered.sub': 'Shopee · 2h ago',
    'float.recovered.lab': 'Recovered',
    // Status statuses for product detect
    'status.ok': 'OK',
    'status.flag': 'Flag',
    'narrate.stop': 'Stop reading',
  }
};

const SystemCtx = _cc({});

function SystemProvider({ children }) {
  const get = (k, fb) => { try { return localStorage.getItem(k) || fb; } catch { return fb; } };
  const [lang, setLang] = _us(() => get('ac.lang', navigator.language.startsWith('en') ? 'en' : 'pt'));
  const [theme, setTheme] = _us(() => get('ac.theme', 'auto'));
  const [size, setSize] = _us(() => get('ac.size', 'md'));
  const [contrast, setContrast] = _us(() => get('ac.contrast', '0') === '1');
  const [motion, setMotion] = _us(() => get('ac.motion', '0') === '1');
  const [cb, setCb] = _us(() => get('ac.cb', 'none'));
  const [calm, setCalm] = _us(() => get('ac.calm', '0') === '1');
  const [dyslexia, setDyslexia] = _us(() => get('ac.dyslexia', '0') === '1');
  const [narrating, setNarrating] = _us(false);

  _ue(() => {
    const html = document.documentElement;
    const effectiveTheme = theme === 'auto'
      ? (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
      : theme;
    html.setAttribute('data-theme', effectiveTheme);
    html.setAttribute('data-lang', lang);
    html.setAttribute('data-size', size);
    html.setAttribute('data-contrast', contrast ? 'high' : 'normal');
    html.setAttribute('data-motion', motion || calm ? 'reduce' : 'normal');
    html.setAttribute('data-cb', cb);
    html.setAttribute('data-calm', calm ? 'on' : 'off');
    html.setAttribute('data-dyslexia', dyslexia ? 'on' : 'off');
    try {
      localStorage.setItem('ac.lang', lang);
      localStorage.setItem('ac.theme', theme);
      localStorage.setItem('ac.size', size);
      localStorage.setItem('ac.contrast', contrast ? '1' : '0');
      localStorage.setItem('ac.motion', motion ? '1' : '0');
      localStorage.setItem('ac.cb', cb);
      localStorage.setItem('ac.calm', calm ? '1' : '0');
      localStorage.setItem('ac.dyslexia', dyslexia ? '1' : '0');
    } catch {}
  }, [lang, theme, size, contrast, motion, cb, calm, dyslexia]);

  // Auto-theme listener
  _ue(() => {
    if (theme !== 'auto') return;
    const mq = matchMedia('(prefers-color-scheme: dark)');
    const handler = () => {
      document.documentElement.setAttribute('data-theme', mq.matches ? 'dark' : 'light');
    };
    mq.addEventListener('change', handler);
    return () => mq.removeEventListener('change', handler);
  }, [theme]);

  const t = (key) => (COPY[lang] && COPY[lang][key]) || COPY.pt[key] || key;

  // Narration via Web Speech API
  const narrate = () => {
    if (!('speechSynthesis' in window)) return;
    if (narrating) {
      speechSynthesis.cancel();
      setNarrating(false);
      return;
    }
    const main = document.querySelector('main');
    if (!main) return;
    const text = [...main.querySelectorAll('h1,h2,h3,h4,p,li,.display-hero,.display-section,.hero-subtitle,.lead')]
      .map(el => el.innerText.trim())
      .filter(Boolean)
      .slice(0, 40)
      .join('. ');
    const u = new SpeechSynthesisUtterance(text);
    u.lang = lang === 'en' ? 'en-US' : 'pt-BR';
    u.rate = 1;
    u.onend = () => setNarrating(false);
    u.onerror = () => setNarrating(false);
    speechSynthesis.cancel();
    speechSynthesis.speak(u);
    setNarrating(true);
  };

  return (
    <SystemCtx.Provider value={{lang, setLang, theme, setTheme, size, setSize, contrast, setContrast, motion, setMotion, cb, setCb, calm, setCalm, dyslexia, setDyslexia, narrate, narrating, t}}>
      {children}
    </SystemCtx.Provider>
  );
}

function useSystem() { return _uc(SystemCtx); }
function useT() { return _uc(SystemCtx).t; }

// =========================================
// Settings menu (gear icon in navbar)
// =========================================
function SettingsMenu() {
  const sys = useSystem();
  const [open, setOpen] = _us(false);
  const ref = _useRef(null);

  _ue(() => {
    if (!open) return;
    const handler = (e) => {
      if (ref.current && !ref.current.contains(e.target)) setOpen(false);
    };
    document.addEventListener('mousedown', handler);
    const esc = (e) => { if (e.key === 'Escape') setOpen(false); };
    document.addEventListener('keydown', esc);
    return () => { document.removeEventListener('mousedown', handler); document.removeEventListener('keydown', esc); };
  }, [open]);

  const t = sys.t;
  return (
    <div className="settings-wrap" ref={ref}>
      <button
        className="settings-trigger"
        onClick={() => setOpen(!open)}
        aria-label={t('settings.title')}
        aria-expanded={open}
      >
        <Icon.Settings size={16}/>
      </button>
      {open && (
        <div className="settings-popover" role="dialog" aria-label={t('settings.title')}>
          <div className="settings-row">
            <div className="settings-lab">{t('settings.lang')}</div>
            <div className="settings-seg">
              <button className={sys.lang==='pt' ? 'active':''} onClick={() => sys.setLang('pt')}>PT</button>
              <button className={sys.lang==='en' ? 'active':''} onClick={() => sys.setLang('en')}>EN</button>
            </div>
          </div>
          <div className="settings-row">
            <div className="settings-lab">{t('settings.theme')}</div>
            <div className="settings-seg">
              <button className={sys.theme==='light' ? 'active':''} onClick={() => sys.setTheme('light')} aria-label={t('settings.theme.light')}>
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/></svg>
              </button>
              <button className={sys.theme==='dark' ? 'active':''} onClick={() => sys.setTheme('dark')} aria-label={t('settings.theme.dark')}>
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
              </button>
              <button className={sys.theme==='auto' ? 'active':''} onClick={() => sys.setTheme('auto')} aria-label={t('settings.theme.auto')}>A</button>
            </div>
          </div>
          <div className="settings-divider"></div>
          <div className="settings-header">{t('settings.access')}</div>
          <div className="settings-row">
            <div className="settings-lab">{t('settings.size')}</div>
            <div className="settings-seg">
              <button className={sys.size==='sm' ? 'active':''} onClick={() => sys.setSize('sm')}>A−</button>
              <button className={sys.size==='md' ? 'active':''} onClick={() => sys.setSize('md')}>A</button>
              <button className={sys.size==='lg' ? 'active':''} onClick={() => sys.setSize('lg')}>A+</button>
            </div>
          </div>
          <div className="settings-row">
            <div className="settings-lab">{t('settings.contrast')}</div>
            <button
              className={`settings-toggle ${sys.contrast ? 'on':''}`}
              onClick={() => sys.setContrast(!sys.contrast)}
              role="switch"
              aria-checked={sys.contrast}
            >
              <span></span>
            </button>
          </div>
          <div className="settings-row">
            <div className="settings-lab">{t('settings.motion')}</div>
            <button
              className={`settings-toggle ${sys.motion ? 'on':''}`}
              onClick={() => sys.setMotion(!sys.motion)}
              role="switch"
              aria-checked={sys.motion}
            >
              <span></span>
            </button>
          </div>
          <div className="settings-row">
            <div className="settings-lab">
              <div>{t('settings.calm')}</div>
              <div className="settings-sublab">{t('settings.calm.sub')}</div>
            </div>
            <button
              className={`settings-toggle ${sys.calm ? 'on':''}`}
              onClick={() => sys.setCalm(!sys.calm)}
              role="switch"
              aria-checked={sys.calm}
            >
              <span></span>
            </button>
          </div>
          <div className="settings-row">
            <div className="settings-lab">{t('settings.dyslexia')}</div>
            <button
              className={`settings-toggle ${sys.dyslexia ? 'on':''}`}
              onClick={() => sys.setDyslexia(!sys.dyslexia)}
              role="switch"
              aria-checked={sys.dyslexia}
            >
              <span></span>
            </button>
          </div>
          <div className="settings-row settings-row-stack">
            <div className="settings-lab">{t('settings.colorblind')}</div>
            <div className="settings-seg settings-seg-wrap">
              <button className={sys.cb==='none' ? 'active':''} onClick={() => sys.setCb('none')}>{t('settings.cb.none')}</button>
              <button className={sys.cb==='deut' ? 'active':''} onClick={() => sys.setCb('deut')}>Deut</button>
              <button className={sys.cb==='prot' ? 'active':''} onClick={() => sys.setCb('prot')}>Prot</button>
              <button className={sys.cb==='trit' ? 'active':''} onClick={() => sys.setCb('trit')}>Trit</button>
            </div>
          </div>
          <div className="settings-divider"></div>
          <button className="settings-narrate" onClick={sys.narrate} aria-pressed={sys.narrating}>
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
              {sys.narrating
                ? <><rect x="6" y="5" width="4" height="14" rx="1"/><rect x="14" y="5" width="4" height="14" rx="1"/></>
                : <><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"/><path d="M15.54 8.46a5 5 0 0 1 0 7.07"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14"/></>
              }
            </svg>
            <div className="settings-narrate-text">
              <div>{sys.narrating ? t('narrate.stop') : t('settings.narrate')}</div>
              <div className="settings-sublab">{t('settings.narrate.sub')}</div>
            </div>
          </button>
        </div>
      )}
    </div>
  );
}

Object.assign(window, { SystemProvider, useSystem, useT, SettingsMenu });
