{
  "LoginPage": {
    "titleAccept": "Entre para aceitar",
    "titleWelcome": "Bem-vindo de volta",
    "descAccept": "Entre e levaremos você até o convite.",
    "descWelcome": "Entre na sua conta",
    "emailLabel": "E-mail",
    "emailPlaceholder": "voce@exemplo.com",
    "passwordLabel": "Senha",
    "forgotPassword": "Esqueceu a senha?",
    "passwordPlaceholder": "Digite sua senha",
    "signingIn": "Entrando...",
    "signIn": "Entrar",
    "noAccount": "Não tem uma conta?",
    "createAccount": "Criar conta",
    "linkExpired": "Esse link expirou. Para redefinir a senha, use “Esqueceu a senha?” para pedir um novo; se estava confirmando seu e-mail, cadastre-se novamente.",
    "linkInvalid": "Não foi possível entrar com esse link. Se estava confirmando seu e-mail, ele já pode estar verificado — basta entrar abaixo. Para redefinir a senha, peça um novo link e abra-o no mesmo navegador em que o solicitou."
  },
  "Sidebar": {
    "title": "Modelo de CRM para WhatsApp",
    "primaryNav": "Principal",
    "dashboard": "Painel",
    "inbox": "Caixa de entrada",
    "notifications": "Notificações",
    "contacts": "Contatos",
    "pipelines": "Pipelines",
    "broadcasts": "Disparos",
    "automations": "Automações",
    "flows": "Fluxos",
    "aiAgents": "Agentes de IA",
    "settings": "Configurações",
    "beta": "Beta",
    "unreadConversations": "{count} {count, plural, =1 {conversa não lida} other {conversas não lidas}}",
    "unreadNotifications": "{count} {count, plural, =1 {notificação não lida} other {notificações não lidas}}",
    "roleOwner": "Proprietário",
    "roleAdmin": "Administrador",
    "roleAgent": "Agente",
    "roleViewer": "Visualizador",
    "closeMenu": "Fechar menu",
    "defaultUser": "Usuário",
    "defaultAvatar": "Avatar",
    "menuProfile": "Perfil",
    "menuSettings": "Configurações",
    "menuSignOut": "Sair"
  },
  "Header": {
    "dashboard": "Painel",
    "inbox": "Caixa de entrada",
    "notifications": "Notificações",
    "contacts": "Contatos",
    "pipelines": "Pipelines",
    "broadcasts": "Disparos",
    "automations": "Automações",
    "settings": "Configurações",
    "openMenu": "Abrir menu",
    "openAccountMenu": "Abrir menu da conta",
    "defaultUser": "Usuário",
    "defaultAvatar": "Avatar",
    "menuProfile": "Perfil",
    "menuSettings": "Configurações",
    "menuSignOut": "Sair"
  },
  "ModeToggle": {
    "switchMode": "Mudar para o modo {mode}"
  },
  "AccountAccess": {
    "unlinkedTitle": "Este usuário não está vinculado a uma conta",
    "unlinkedBody": "Nada do que você alterar será salvo enquanto isso não for resolvido — o banco de dados rejeita toda gravação de um usuário sem conta ou função. Se você foi convidado para uma equipe, peça ao proprietário para reenviar o convite. Em uma instalação própria, verifique se a migração de bootstrap da conta foi executada para este usuário.",
    "errorTitle": "Não foi possível carregar suas permissões",
    "errorBody": "A função da sua conta não foi carregada, então toda ação é tratada como somente leitura e as alterações não serão salvas. Verifique sua conexão e tente novamente.",
    "retry": "Tentar novamente"
  },
  "Dashboard": {
    "page": {
      "title": "Painel",
      "description": "Métricas ao vivo de conversas, contatos, negócios, disparos e automações.",
      "activeConversations": "Conversas ativas",
      "newContactsToday": "Novos contatos hoje",
      "openDealsValue": "Valor dos negócios abertos",
      "messagesSentToday": "Mensagens enviadas hoje",
      "newTodayVsYesterday": "novos hoje vs. ontem",
      "vsYesterday": "vs. ontem",
      "openDeals": "{count} {count, plural, =1 {negócio aberto} other {negócios abertos}}",
      "noChange": "Sem alteração {suffix}"
    },
    "quickActions": {
      "newContact": "Novo contato",
      "newDeal": "Novo negócio",
      "newBroadcast": "Novo disparo",
      "newAutomation": "Nova automação"
    },
    "activityFeed": {
      "title": "Atividade recente",
      "viewAll": "Ver tudo →",
      "noActivity": "Nenhuma atividade ainda",
      "noActivityHint": "A atividade de mensagens, negócios, disparos e automações aparecerá aqui.",
      "showingOf": "Mostrando {visible} de {totalLoaded}{plus}",
      "show": "Mostrar",
      "timeS": "há {sec}s",
      "timeM": "há {min}min",
      "timeH": "há {hr}h",
      "timeD": "há {day}d",
      "items": {
        "newMessage": "Nova mensagem de {who}",
        "newContact": "Novo contato: {name}",
        "dealInStage": "Negócio \"{title}\" em {stage}",
        "dealUpdated": "Negócio \"{title}\" atualizado",
        "broadcastSent": "Disparo \"{name}\" enviado para {count} contatos",
        "broadcastStatus": "Disparo \"{name}\" {status} ({count} destinatários)",
        "broadcastStatusNames": {
          "draft": "em rascunho",
          "scheduled": "agendado",
          "sending": "em envio",
          "sent": "enviado",
          "failed": "com falha"
        },
        "automationFailed": "Automação \"{name}\" falhou para {who}",
        "automationTriggered": "Automação \"{name}\" acionada para {who}",
        "unknown": "Desconhecido",
        "aContact": "um contato",
        "automationFallback": "Automação"
      }
    },
    "conversationsChart": {
      "title": "Conversas ao longo do tempo",
      "description": "Volume diário de mensagens por direção",
      "days": "{count} dias",
      "noActivity": "Nenhuma atividade de mensagens neste período",
      "noActivityHint": "Envie ou receba mensagens para começar a preencher este gráfico.",
      "incoming": "Recebidas",
      "outgoing": "Enviadas",
      "tooltipIncoming": "{count} recebidas",
      "tooltipOutgoing": "{count} enviadas",
      "ariaLabel": "Conversas por dia"
    },
    "pipelineDonut": {
      "title": "Valor do pipeline",
      "description": "Negócios abertos por etapa",
      "noOpenDeals": "Nenhum negócio aberto ainda",
      "noOpenDealsHint": "Crie negócios em Pipelines para ver a divisão por etapa aqui.",
      "dealCount": "{count} {count, plural, =1 {negócio} other {negócios}}",
      "total": "Total",
      "ariaLabel": "Valor do pipeline por etapa"
    },
    "responseTimeChart": {
      "title": "Tempo médio da primeira resposta",
      "description": "Minutos para responder à primeira mensagem sem resposta de um cliente, por dia da semana",
      "target": "meta {minutes}min",
      "thisWeek": "Esta semana:",
      "lastWeek": "Semana passada:",
      "noReplies": "Nenhuma resposta registrada ainda",
      "noRepliesHint": "Este gráfico é preenchido conforme você responde às mensagens dos clientes.",
      "avgMinutes": "Média em minutos"
    },
    "emptyState": {
      "title": "Ainda não há dados suficientes"
    }
  },
  "Inbox": {
    "page": {
      "whatsappNotConnected": "O WhatsApp® não está conectado. Vá em Configurações para conectar sua conta."
    },
    "conversationList": {
      "searchPlaceholder": "Buscar conversas...",
      "filterAll": "Todas",
      "filterUnread": "Não lidas",
      "filterOpen": "Abertas",
      "filterPending": "Pendentes",
      "filterClosed": "Fechadas",
      "tags": "Tags",
      "company": "Empresa",
      "allCompanies": "Todas as empresas",
      "clearAll": "Limpar tudo",
      "noConversations": "Nenhuma conversa encontrada",
      "noMessagesYet": "Nenhuma mensagem ainda",
      "unknown": "Desconhecido"
    },
    "messageThread": {
      "backToConversations": "Voltar às conversas",
      "hideContactPanel": "Ocultar painel do contato",
      "showContactPanel": "Mostrar painel do contato",
      "hideContact": "Ocultar contato",
      "showContact": "Mostrar contato",
      "refresh": "Atualizar",
      "refreshConversation": "Atualizar conversa",
      "status": "Status",
      "statusOpen": "Aberta",
      "statusPending": "Pendente",
      "statusClosed": "Fechada",
      "assign": "Atribuir",
      "assigned": "Atribuída",
      "unassign": "Remover atribuição",
      "noTeammates": "Nenhum colega disponível",
      "me": " (eu)",
      "noMessagesYet": "Nenhuma mensagem ainda",
      "sendTemplateHint": "Envie um modelo para iniciar a conversa",
      "selectConversation": "Selecione uma conversa",
      "selectConversationHint": "Escolha uma conversa à esquerda para começar a enviar mensagens",
      "today": "Hoje",
      "yesterday": "Ontem",
      "customer": "Cliente",
      "unknown": "Desconhecido",
      "sendFailed": "Falha ao enviar: {reason}",
      "sendTemplateFailed": "Falha ao enviar o modelo: {reason}",
      "waitForSending": "Aguarde a mensagem terminar de ser enviada",
      "reactionFailed": "Falha na reação: {reason}",
      "assignmentUpdateFailed": "Falha ao atualizar a atribuição",
      "networkError": "erro de rede",
      "documentFallback": "Documento",
      "you": "Você"
    },
    "sessionTimer": {
      "expired": "Expirada",
      "xhRemaining": "{hours}h restantes",
      "xmRemaining": "{minutes}min restantes",
      "noCustomerMessages": "Nenhuma mensagem do cliente"
    },
    "composer": {
      "draftHint": "Toque em ✨ para redigir uma resposta com IA — você pode editá-la antes de enviar",
      "sessionExpiredHint": "A sessão de 24 horas expirou. Use um modelo para retomar o contato.",
      "templates": "Modelos",
      "readOnlyPlaceholder": "Somente leitura — visualizadores podem navegar, mas não responder",
      "sessionExpiredPlaceholder": "Sessão expirada - use um modelo",
      "typeMessagePlaceholder": "Digite uma mensagem... (Shift+Enter para nova linha)",
      "readOnlyTitle": "Somente leitura — sua função não pode enviar mensagens",
      "recording": "Gravando… {current} / {max}",
      "cancel": "Cancelar",
      "stopAndAttach": "Parar e anexar",
      "attachMedia": "Anexar mídia",
      "photo": "Foto",
      "video": "Vídeo",
      "document": "Documento",
      "voiceNote": "Mensagem de voz",
      "sendTemplate": "Enviar modelo",
      "aiNotConfigured": "A IA ainda não está configurada — ative-a em Configurações → Assistente de IA.",
      "draftFailed": "Não foi possível redigir uma resposta.",
      "draftEmpty": "O assistente não retornou uma resposta.",
      "aiUnreachable": "Não foi possível conectar ao assistente de IA.",
      "recordingTooLong": "A gravação é muito longa (mais de 16 MB).",
      "recordingUnsupported": "A gravação de voz não é suportada neste navegador.",
      "microphoneDenied": "Acesso ao microfone negado ou indisponível.",
      "draftWithAI": "Redigir uma resposta com IA",
      "addCaption": "Adicionar uma legenda…",
      "removeAttachment": "Remover anexo",
      "moreActions": "Mais",
      "interactiveMessage": "Mensagem interativa",
      "quickReplies": "Respostas rápidas",
      "quickRepliesEmpty": "Nenhuma resposta rápida ainda. Adicione algumas em Configurações → Respostas rápidas.",
      "saveAsQuickReply": "Salvar como resposta rápida",
      "send": "Enviar",
      "quickReplyNamePrompt": "Dê um nome a esta resposta rápida:",
      "quickReplySaved": "Salva como resposta rápida.",
      "quickReplySaveError": "Não foi possível salvar a resposta rápida.",
      "fileTooLarge": "O arquivo tem {size} MB — o limite para {kind} é {max} MB.",
      "mediaKind": {
        "image": "imagem",
        "video": "vídeo",
        "document": "documento",
        "audio": "áudio"
      },
      "uploadFailed": "Falha no upload."
    },
    "bubble": {
      "photo": "Foto",
      "video": "Vídeo",
      "audio": "Áudio",
      "unavailable": "{label} indisponível",
      "document": "Documento",
      "locationShared": "Localização compartilhada",
      "template": "Modelo",
      "buttonReply": "Resposta de botão",
      "interactiveReply": "[Resposta interativa]",
      "unsupported": "[Tipo de mensagem não suportado]",
      "aiBadge": "IA",
      "aiBadgeTitle": "Enviada automaticamente pelo assistente de IA",
      "notDelivered": "Não entregue",
      "download": "Baixar",
      "downloadFailed": "Não foi possível baixar o anexo",
      "viewImage": "Ver imagem",
      "expandVideo": "Expandir vídeo",
      "imageAlt": "Imagem compartilhada"
    },
    "mediaViewer": {
      "counter": "{index} de {total}",
      "previous": "Anterior",
      "next": "Próxima",
      "zoomIn": "Ampliar para o tamanho real",
      "zoomOut": "Ajustar à tela",
      "openOriginal": "Abrir original",
      "download": "Baixar",
      "downloadFailed": "Não foi possível baixar o anexo",
      "failed": "Este anexo não está mais disponível",
      "imageAlt": "Imagem compartilhada",
      "you": "Você"
    },
    "actions": {
      "reply": "Responder",
      "copyText": "Copiar texto",
      "delete": "Excluir",
      "react": "Reagir",
      "reactWith": "Reagir com {emoji}",
      "nothingToCopy": "Nada para copiar",
      "copied": "Copiado",
      "copyFailed": "Falha ao copiar"
    },
    "replyQuote": {
      "photo": "[Foto]",
      "video": "[Vídeo]",
      "document": "[Documento]",
      "audio": "[Áudio]",
      "voiceMessage": "[Mensagem de voz]",
      "location": "[Localização]",
      "template": "[Modelo]",
      "message": "[Mensagem]",
      "cancelReply": "Cancelar resposta"
    },
    "templatePicker": {
      "sendTemplate": "Enviar modelo",
      "fillPlaceholders": "Preencha as variáveis para renderizar este modelo. A Meta exige que todas as variáveis sejam definidas.",
      "pickTemplate": "Escolha um modelo aprovado do WhatsApp para enviar a este contato.",
      "noApprovedTemplates": "Nenhum modelo aprovado",
      "noApprovedTemplatesHint": "Aprove um modelo no Gerenciador do WhatsApp da Meta e depois sincronize em Configurações → Modelos.",
      "preview": "Pré-visualização",
      "headerValuePlaceholder": "Valor para a variável do cabeçalho",
      "bodyValuePlaceholder": "Valor para {val}",
      "urlSuffixValuePlaceholder": "Valor do sufixo da URL",
      "finalUrl": "URL final: {url}",
      "back": "Voltar",
      "cancel": "Cancelar",
      "send": "Enviar modelo",
      "headerVarLabel": "Cabeçalho {var}",
      "bodyVarLabel": "Corpo {var}",
      "urlButtonVarLabel": "Botão de URL \"{text}\" — valor para {var}"
    },
    "sidebar": {
      "contactInfo": "Informações do contato",
      "tags": "Tags",
      "notes": "Notas",
      "deals": "Negócios",
      "noTags": "Sem tags",
      "noDeals": "Sem negócios",
      "addNotePlaceholder": "Adicionar uma nota..."
    },
    "aiBanner": {
      "pausedTitle": "O assistente de IA está pausado aqui",
      "activeText": "O assistente de IA está respondendo automaticamente",
      "takeOver": "Assumir",
      "resume": "Retomar IA",
      "tookOver": "Você assumiu esta conversa.",
      "resumed": "IA retomada.",
      "updateError": "Não foi possível atualizar o assistente de IA.",
      "networkError": "Não foi possível conectar ao servidor."
    }
  },
  "Contacts": {
    "page": {
      "title": "Contatos",
      "subtitle": "Gerencie sua lista de contatos. {count} contatos no total.",
      "subtitleZero": "Gerencie sua lista de contatos.",
      "customFieldsBtn": "Campos personalizados",
      "selectAllOnPage": "Selecionar todos os contatos desta página",
      "importBtn": "Importar",
      "addContactBtn": "Adicionar contato",
      "searchPlaceholder": "Buscar por nome, telefone ou e-mail...",
      "filterByTags": "Filtrar por tags",
      "clearAll": "Limpar tudo",
      "noTagsYet": "Nenhuma tag ainda.",
      "selectedCount": "{count} selecionados",
      "clearSelection": "Limpar",
      "deleteSelected": "Excluir selecionados",
      "tableColumns": {
        "name": "Nome",
        "phone": "Telefone",
        "email": "E-mail",
        "company": "Empresa",
        "tags": "Tags",
        "createdAt": "Criado em"
      },
      "loading": "Carregando contatos...",
      "noContactsMatch": "Nenhum contato corresponde aos seus filtros.",
      "noContactsYet": "Nenhum contato ainda.",
      "addFirstContact": "Adicione seu primeiro contato",
      "unnamed": "Sem nome",
      "editAction": "Editar",
      "deleteAction": "Excluir",
      "showingPagination": "Mostrando {start}-{end} de {total}",
      "pageCount": "Página {page} de {total}",
      "deleteContactTitle": "Excluir contato",
      "deleteContactDesc": "Tem certeza de que deseja excluir {name}? Esta ação não pode ser desfeita.",
      "cancel": "Cancelar",
      "deleteBtn": "Excluir",
      "deleteBulkTitle": "Excluir contatos",
      "deleteBulkDesc": "Tem certeza de que deseja excluir os {count} contatos selecionados? Esta ação não pode ser desfeita.",
      "toastFailedLoad": "Falha ao carregar os contatos",
      "toastFailedDelete": "Falha ao excluir o contato",
      "toastDeleted": "Contato excluído",
      "toastBulkFailedDelete": "Falha ao excluir os contatos",
      "toastBulkDeleted": "{count} contatos excluídos",
      "filterByTag": "Filtrar por {name}",
      "removeTagFilter": "Remover o filtro {name}",
      "selectContact": "Selecionar {name}"
    },
    "form": {
      "addTitle": "Adicionar contato",
      "addDesc": "Crie um novo contato. O nome é obrigatório.",
      "editTitle": "Editar contato",
      "editDesc": "Atualize os dados e as tags do contato.",
      "nameLabel": "Nome",
      "namePlaceholder": "Maria Silva",
      "phoneLabel": "Número de telefone",
      "phonePlaceholder": "+1234567890",
      "phoneHint": "Inclua o código do país, ex.: +55 para o Brasil",
      "emailLabel": "E-mail",
      "emailPlaceholder": "maria@example.com",
      "companyLabel": "Empresa",
      "companyPlaceholder": "Acme Ltda.",
      "tagsLabel": "Tags",
      "tagsPlaceholder": "Selecione tags...",
      "noTagsFound": "Nenhuma tag encontrada.",
      "createTagAction": "Criar tag \"{value}\"",
      "cancel": "Cancelar",
      "save": "Salvar contato",
      "update": "Atualizar",
      "create": "Criar",
      "toastSuccessAdd": "Contato criado com sucesso",
      "toastSuccessEdit": "Contato atualizado com sucesso",
      "toastError": "Falha ao salvar o contato",
      "toastConflict": "Já existe um contato com este número de telefone",
      "viewExisting": "Ver {name}",
      "dupExact": "Já existe um contato com este número de telefone.",
      "dupSimilar": "Já existe um contato com um número muito parecido.",
      "loadingTags": "Carregando tags...",
      "noTagsAvailable": "Nenhuma tag disponível. Crie tags em Configurações.",
      "phoneRequired": "O número de telefone é obrigatório",
      "phoneNeedsCountryCode": "Inclua o código do país — o número deve começar com + (ex.: +5511999990000)",
      "notAuthenticated": "Não autenticado",
      "notLinkedToAccount": "Seu perfil não está vinculado a uma conta."
    },
    "detailView": {
      "tabs": {
        "details": "Detalhes",
        "activity": "Atividade",
        "notes": "Notas",
        "custom": "Campos personalizados",
        "deals": "Negócios",
        "tags": "Tags",
        "noTags": "Sem tags",
        "noDeals": "Sem negócios",
        "addNotePlaceholder": "Adicionar uma nota..."
      },
      "actions": {
        "edit": "Editar",
        "message": "Mensagem",
        "delete": "Excluir"
      },
      "contactInfo": "Informações do contato",
      "unnamed": "Desconhecido",
      "contactDetailsDesc": "Dados do contato",
      "name": "Nome",
      "phone": "Telefone",
      "email": "E-mail",
      "company": "Empresa",
      "createdAt": "Criado em",
      "customFields": "Campos personalizados",
      "noCustomFields": "Nenhum campo personalizado definido. Crie-os em Configurações.",
      "manageFields": "Gerenciar campos",
      "enterCustomField": "Informe {name}...",
      "activityTab": {
        "title": "Histórico de atividade",
        "noActivity": "Nenhuma atividade ainda."
      },
      "notesTab": {
        "title": "Notas internas",
        "placeholder": "Escreva uma nota...",
        "save": "Adicionar nota",
        "noNotes": "Nenhuma nota ainda."
      },
      "dealsTab": {
        "noDeals": "Nenhum negócio ainda"
      },
      "tagsTab": {
        "clickTagDesc": "Clique em uma tag para adicioná-la ou removê-la deste contato.",
        "noTagsAvailable": "Nenhuma tag disponível. Crie tags em Configurações."
      },
      "sendTemplateBtn": "Enviar modelo",
      "saveChangesBtn": "Salvar alterações",
      "saveCustomFieldsBtn": "Salvar campos personalizados",
      "toastPhoneRequired": "O número de telefone é obrigatório",
      "toastPhoneNeedsCountryCode": "Inclua o código do país — o número deve começar com + (ex.: +5511999990000)",
      "toastUpdateFailed": "Falha ao atualizar o contato",
      "toastUpdated": "Contato atualizado",
      "toastNotAuthenticated": "Não autenticado",
      "toastNoteAddFailed": "Falha ao adicionar a nota",
      "toastNoteAdded": "Nota adicionada",
      "toastNoteDeleteFailed": "Falha ao excluir a nota",
      "toastNoteDeleted": "Nota excluída",
      "toastCustomFieldsSaved": "Campos personalizados salvos",
      "toastCustomFieldsFailed": "Falha ao salvar os campos personalizados",
      "toastTemplateSent": "Modelo \"{name}\" enviado",
      "toastTemplateFailed": "Falha ao enviar o modelo: {reason}",
      "networkError": "erro de rede"
    },
    "importModal": {
      "title": "Importar contatos",
      "desc": "Envie um CSV com uma coluna <phoneCode>phone</phoneCode> obrigatória. Opcionais: <nameCode>name</nameCode>, <emailCode>email</emailCode>, <companyCode>company</companyCode>, <tagsCode>tags</tagsCode> (separadas por vírgula; coloque células com várias tags entre aspas).",
      "uploadDropzone": "Clique para escolher um arquivo CSV",
      "uploadHint": ".csv até o limite do seu navegador",
      "rowsReady": "{count} linha pronta",
      "rowsReady_plural": "{count} linhas prontas",
      "preview": "Pré-visualização · primeiras {count}",
      "previewTags": "{tags} tag · {contacts} contato",
      "previewTags_plural": "{tags} tags · {contacts} contatos",
      "moreRows": "+ {count} linha a mais não exibida",
      "moreRows_plural": "+ {count} linhas a mais não exibidas",
      "importComplete": "Importação concluída",
      "resultImported": "{count} importados",
      "resultTags": "{count} tag atribuída",
      "resultTags_plural": "{count} tags atribuídas",
      "resultSkipped": "{count} ignorados",
      "resultInvalidPhone": "{count} telefone inválido",
      "resultInvalidPhone_plural": "{count} telefones inválidos",
      "resultFailed": "{count} com falha",
      "failedRowsHeading": "Linhas com falha",
      "unknownReason": "Erro desconhecido",
      "invalidPhoneHint": "Os números de telefone devem começar com + e o código do país (ex.: +5511999990000). Números sem código seriam entregues no país errado.",
      "willBeCreated": "{name} (será criada na importação)",
      "columns": {
        "phone": "Telefone",
        "name": "Nome",
        "email": "E-mail",
        "company": "Empresa",
        "tags": "Tags"
      },
      "cancel": "Cancelar",
      "close": "Fechar",
      "importBtn": "Importar {count} contato",
      "importBtn_plural": "Importar {count} contatos",
      "toastNoValidRows": "Nenhuma linha válida encontrada. Verifique se o CSV tem um cabeçalho de coluna \"phone\".",
      "toastTagsWarning": "Contatos importados, mas algumas atribuições de tag falharam.",
      "toastImported": "{count} contato importado",
      "toastImported_plural": "{count} contatos importados",
      "toastTagsAssigned": "{count} atribuição de tag aplicada",
      "toastTagsAssigned_plural": "{count} atribuições de tag aplicadas",
      "toastTagsSkipped": "Tags desconhecidas ignoradas (crie-as primeiro em Configurações): {sample}{more}",
      "toastSkipped": "{count} duplicado ignorado",
      "toastSkipped_plural": "{count} duplicados ignorados",
      "toastInvalidPhone": "{count} contato não tinha um número de telefone utilizável",
      "toastInvalidPhone_plural": "{count} contatos não tinham um número de telefone utilizável",
      "toastFailed": "{count} contato não pôde ser importado",
      "toastFailed_plural": "{count} contatos não puderam ser importados",
      "toastError": "Falha na importação",
      "notAuthenticated": "Não autenticado",
      "notLinkedToAccount": "Seu perfil não está vinculado a uma conta.",
      "toastTagsSkippedMore": " (+{count} outros)"
    },
    "customFields": {
      "title": "Campos personalizados",
      "desc": "Defina campos extras para os contatos (ex.: CEP, origem do lead). Eles aparecem em todos os contatos e na ação de automação “Atualizar campo do contato”.",
      "addField": "Adicionar",
      "fieldName": "Nome do novo campo…",
      "loading": "Carregando…",
      "empty": "Nenhum campo personalizado ainda.",
      "renameAria": "Renomear {name}",
      "deleteTitle": "Excluir campo",
      "deleteConfirm": "Excluir \"{name}\"? Isso também remove o valor armazenado em todos os contatos. Não é possível desfazer.",
      "toastNoAccount": "Seu perfil não está vinculado a uma conta.",
      "toastDuplicate": "Já existe um campo chamado \"{name}\".",
      "toastCreateFailed": "Não foi possível criar o campo. Talvez você não tenha permissão.",
      "toastCreated": "\"{name}\" criado.",
      "toastRenameFailed": "Não foi possível renomear o campo.",
      "toastDeleteFailed": "Não foi possível excluir o campo.",
      "toastDeleted": "\"{name}\" excluído."
    }
  },
  "Pipelines": {
    "page": {
      "selectPipeline": "Selecionar pipeline",
      "noPipelinesYet": "Nenhum pipeline ainda",
      "managePipelines": "Gerenciar pipelines",
      "addPipeline": "Adicionar pipeline",
      "addDeal": "Adicionar negócio",
      "createToStartTracking": "Crie um pipeline para começar a acompanhar negócios",
      "createPipeline": "Criar pipeline",
      "newPipeline": "Novo pipeline",
      "pipelineName": "Nome do pipeline",
      "pipelineNamePlaceholder": "ex.: Vendas corporativas",
      "defaultStagesDesc": "As etapas padrão (Novo lead → Ganho) serão criadas automaticamente.",
      "cancel": "Cancelar",
      "creating": "Criando...",
      "createPipelineBtn": "Criar pipeline",
      "toastFailedLoadPipelines": "Falha ao carregar os pipelines",
      "toastFailedMoveDeal": "Falha ao mover o negócio",
      "toastFailedCreatePipeline": "Falha ao criar o pipeline",
      "toastPipelineCreated": "Pipeline criado",
      "toastNotLinkedToAccount": "Seu perfil não está vinculado a uma conta.",
      "defaultPipelineName": "Pipeline de vendas",
      "defaultStages": {
        "newLead": "Novo lead",
        "qualified": "Qualificado",
        "proposalSent": "Proposta enviada",
        "negotiation": "Negociação",
        "won": "Ganho"
      }
    },
    "board": {
      "dropDealHere": "Solte um negócio aqui",
      "addDeal": "Adicionar negócio"
    },
    "card": {
      "noContact": "Sem contato",
      "won": "Ganho",
      "lost": "Perdido"
    },
    "form": {
      "editDeal": "Editar negócio",
      "newDeal": "Novo negócio",
      "title": "Título",
      "titlePlaceholder": "Título do negócio",
      "contact": "Contato",
      "selectContact": "Selecione um contato",
      "linkToConversation": "Vincular a uma conversa",
      "value": "Valor",
      "currency": "Moeda",
      "expectedCloseDate": "Data prevista de fechamento",
      "stage": "Etapa",
      "assignedTo": "Atribuído a",
      "unassigned": "Não atribuído",
      "notes": "Notas",
      "notesPlaceholder": "Adicionar notas...",
      "status": "Status",
      "markAsWon": "Marcar como ganho",
      "markAsLost": "Marcar como perdido",
      "reopenDeal": "Reabrir negócio",
      "cancel": "Cancelar",
      "saving": "Salvando...",
      "saveChanges": "Salvar alterações",
      "createDeal": "Criar negócio",
      "deletePrompt": "Excluir este negócio?",
      "confirm": "Confirmar",
      "deleting": "Excluindo...",
      "deleteDeal": "Excluir negócio",
      "toastRequired": "Título, contato e etapa são obrigatórios",
      "toastFailedSave": "Falha ao salvar o negócio",
      "toastNotSignedIn": "Você não está conectado",
      "toastNotLinked": "Seu perfil não está vinculado a uma conta.",
      "toastFailedCreate": "Falha ao criar o negócio",
      "toastUpdated": "Negócio atualizado",
      "toastCreated": "Negócio criado",
      "toastFailedStatus": "Falha ao atualizar o status do negócio",
      "toastMarkedWon": "Marcado como ganho",
      "toastMarkedLost": "Marcado como perdido",
      "toastReopened": "Negócio reaberto",
      "toastFailedDelete": "Falha ao excluir o negócio",
      "toastDeleted": "Negócio excluído"
    },
    "settings": {
      "managePipeline": "Gerenciar pipeline",
      "deletePipeline": "Excluir pipeline",
      "deletePipelineDesc": "Isso arquivará todos os negócios deste pipeline. Não é possível desfazer.",
      "cancel": "Cancelar",
      "deleting": "Excluindo...",
      "deletePipelineBtn": "Excluir pipeline",
      "pipelineName": "Nome do pipeline",
      "stages": "Etapas",
      "newStageNamePlaceholder": "Nome da nova etapa",
      "add": "Adicionar",
      "createNewPipeline": "Criar um novo pipeline",
      "saving": "Salvando...",
      "saveChanges": "Salvar alterações",
      "dragToReorder": "Arraste para reordenar",
      "changeColor": "Mudar cor",
      "toastFailedSave": "Falha ao salvar o pipeline",
      "toastSaved": "Pipeline salvo",
      "toastFailedAddStage": "Falha ao adicionar a etapa",
      "toastMoveOrDeleteDeals": "Mova ou exclua os negócios desta etapa primeiro",
      "toastFailedDeleteStage": "Falha ao excluir a etapa",
      "toastFailedDeletePipeline": "Falha ao excluir o pipeline",
      "toastDeleted": "Pipeline excluído",
      "pickColor": "Escolher a cor {color}"
    },
    "analytics": {
      "totalDeals": "Total de negócios",
      "totalDealsTooltip": "Quantidade de negócios deste pipeline que não estão marcados como perdidos. Negócios ganhos continuam incluídos.",
      "pipelineValue": "Valor do pipeline",
      "pipelineValueTooltip": "Soma dos valores de todos os negócios deste pipeline, excluindo os marcados como perdidos.",
      "avgDealSize": "Ticket médio",
      "avgDealSizeTooltip": "Valor do pipeline dividido pelo total de negócios — o valor médio de um único negócio não perdido.",
      "weightedValue": "Valor ponderado",
      "weightedValueTooltip": "Receita esperada: o valor de cada negócio aberto × a probabilidade da sua etapa. Primeira etapa ≈ 10%, as etapas avançam até 90%, Ganho = 100%. Negócios perdidos são excluídos.",
      "wonThisMonth": "Ganhos neste mês",
      "wonThisMonthTooltip": "Negócios marcados como ganhos desde o primeiro dia do mês atual.",
      "lostThisMonth": "Perdidos neste mês",
      "lostThisMonthTooltip": "Negócios marcados como perdidos desde o primeiro dia do mês atual.",
      "howCalculated": "Como {label} é calculado"
    }
  },
  "Broadcasts": {
    "page": {
      "title": "Disparos",
      "subtitle": "Envie mensagens em massa para seus contatos usando modelos aprovados.",
      "newBroadcast": "Novo disparo",
      "noBroadcastsYet": "Nenhum disparo ainda",
      "createFirst": "Crie seu primeiro disparo para alcançar seus contatos em escala.",
      "table": {
        "name": "Nome",
        "template": "Modelo",
        "recipients": "Destinatários",
        "delivery": "Entrega",
        "read": "Lidas",
        "status": "Status",
        "date": "Data"
      },
      "errorLoad": "Falha ao carregar os disparos",
      "broadcastInProgress": "Disparo em andamento",
      "retry": "Tentar novamente"
    },
    "status": {
      "draft": "Rascunho",
      "scheduled": "Agendado",
      "sending": "Enviando",
      "sent": "Enviado",
      "failed": "Falhou",
      "pending": "Pendente",
      "delivered": "Entregue",
      "read": "Lida",
      "replied": "Respondida",
      "unknown": "Desconhecido"
    },
    "detail": {
      "backToBroadcasts": "Voltar aos disparos",
      "notFound": "Disparo não encontrado",
      "template": "Modelo: {name}",
      "createdAt": "Criado em {date}",
      "deletePrompt": "Excluir este disparo?",
      "cancel": "Cancelar",
      "confirm": "Confirmar",
      "deleting": "Excluindo…",
      "delete": "Excluir",
      "cannotDeleteSending": "Não é possível excluir enquanto um disparo está sendo enviado",
      "deleteHover": "Excluir este disparo",
      "funnel": "Funil",
      "recipientsHeader": "Destinatários ({filtered} de {total})",
      "recipientsHeaderAll": "Destinatários ({total})",
      "allStatuses": "Todos os status",
      "exportCsv": "Exportar CSV",
      "noRecipients": "Nenhum destinatário encontrado.",
      "noRecipientsFilter": "Nenhum destinatário corresponde a este filtro.",
      "table": {
        "contact": "Contato",
        "phone": "Telefone",
        "status": "Status",
        "sent": "Enviada",
        "delivered": "Entregue",
        "read": "Lida",
        "error": "Erro"
      },
      "stats": {
        "totalRecipients": "Total de destinatários",
        "sent": "Enviadas",
        "delivered": "Entregues",
        "read": "Lidas",
        "replied": "Respondidas",
        "failed": "Com falha"
      },
      "toastFailedDelete": "Falha ao excluir: {error}",
      "toastDeleted": "Disparo excluído",
      "resumeTitle": "Alguns destinatários precisam de outra tentativa",
      "resumeStalledTitle": "Esta campanha parou no meio do caminho",
      "resumeHint": "{count} destinatários falharam. Tentar novamente reenvia para eles a partir do servidor.",
      "resumeStalledHint": "{count} destinatários nunca receberam o envio — a aba do navegador que executava esta campanha foi fechada antes de terminar. Retomar conclui o envio a partir do servidor.",
      "resumePending": "Retomar envio ({count})",
      "retryFailed": "Tentar novamente os que falharam ({count})",
      "toastResumeStarted": "Enviando para {count} destinatários em segundo plano.",
      "toastResumeStartedCapped": "Enviando para {count} destinatários em segundo plano. Outros {remaining} precisarão de mais uma execução.",
      "toastResumeFailed": "Não foi possível retomar: {error}",
      "unknownError": "Erro desconhecido",
      "unknownContact": "Desconhecido"
    },
    "new": {
      "title": "Novo disparo",
      "subtitle": "Crie e envie uma mensagem em massa para seus contatos.",
      "steps": {
        "template": "Modelo",
        "audience": "Público",
        "personalize": "Personalizar",
        "send": "Enviar"
      },
      "toastGiveName": "Dê um nome ao disparo antes de salvar um rascunho.",
      "toastNotSignedIn": "Você não está conectado.",
      "toastNotLinked": "Seu perfil não está vinculado a uma conta.",
      "toastFailedDraft": "Falha ao salvar o rascunho: {error}",
      "toastDraftSaved": "Rascunho salvo",
      "broadcastFailed": "Falha no disparo"
    },
    "wizard": {
      "next": "Avançar",
      "back": "Voltar",
      "cancel": "Cancelar",
      "chooseTemplate": {
        "title": "Escolha um modelo",
        "subtitle": "Selecione um modelo de mensagem aprovado para o seu disparo.",
        "noTemplates": "Nenhum modelo disponível.",
        "createFirst": "Crie um modelo em Configurações primeiro.",
        "errorLoad": "Falha ao carregar os modelos"
      },
      "selectAudience": {
        "title": "Selecionar público",
        "subtitle": "Escolha quem receberá este disparo.",
        "method": {
          "all": "Todos os contatos",
          "tags": "Filtrar por tags",
          "customField": "Campo personalizado",
          "csv": "Enviar CSV"
        },
        "allDesc": "Enviar para todos os {count} contatos do seu banco de dados.",
        "allDescLoading": "Enviar para todos os contatos do seu banco de dados.",
        "tagDesc": "Enviar para contatos com tags específicas.",
        "customFieldDesc": "Enviar para contatos que atendem a uma regra de campo personalizado.",
        "csvDesc": "Envie um CSV com números de telefone (e nomes opcionais).",
        "selectTags": "Selecionar tags",
        "searchTags": "Buscar tags...",
        "noTagsFound": "Nenhuma tag encontrada.",
        "excludeTags": "Excluir tags (opcional)",
        "searchExcludeTags": "Buscar tags para excluir...",
        "field": "Campo",
        "selectField": "Selecione um campo...",
        "operator": "Operador",
        "operatorIs": "É",
        "operatorIsNot": "Não é",
        "operatorContains": "Contém",
        "value": "Valor",
        "valuePlaceholder": "Valor a comparar",
        "uploadCsv": "Enviar arquivo CSV",
        "csvFormatDesc": "Deve conter uma coluna 'phone' (formato E.164). A coluna 'name' é opcional.",
        "csvContactsFound": "{count} contato(s) válido(s) encontrado(s) no CSV.",
        "csvInvalidPhones": "{count} linha(s) ignorada(s): os números de telefone devem começar com + e o código do país (ex.: +5511999990000).",
        "errorLoadTags": "Falha ao carregar as tags",
        "errorLoadFields": "Falha ao carregar os campos personalizados",
        "errorCsvParse": "Não foi possível ler o arquivo CSV.",
        "errorCsvMissingPhone": "O CSV deve ter uma coluna 'phone'.",
        "audienceSummary": "Resumo do público",
        "calculating": "Calculando…",
        "estimatedRecipients": "destinatários estimados",
        "selectTypeForEstimate": "Selecione um tipo de público para ver a estimativa."
      },
      "personalize": {
        "title": "Personalizar variáveis",
        "subtitle": "Associe as variáveis do modelo a campos do contato ou informe valores fixos.",
        "headerImage": "Imagem do cabeçalho",
        "headerImageDesc": "Este modelo exige uma imagem de cabeçalho.",
        "imageUrl": "URL da imagem",
        "imageUrlPlaceholder": "https://example.com/image.jpg",
        "variables": "Variáveis",
        "varDesc": "Defina valores para {{name}}",
        "type": "Tipo",
        "typeStatic": "Valor fixo",
        "typeContact": "Campo do contato",
        "typeCustom": "Campo personalizado",
        "staticValue": "Valor fixo",
        "contactField": "Campo do contato",
        "selectContactField": "Selecione o campo...",
        "customField": "Campo personalizado",
        "selectCustomField": "Selecione o campo personalizado...",
        "preview": "Pré-visualização",
        "previewSample": "Mostrando pré-visualização com dados de exemplo.",
        "noPreview": "Pré-visualização indisponível.",
        "headerPreviewAlt": "Pré-visualização do cabeçalho",
        "mediaUrlRequired": "É necessária uma URL de mídia para enviar este modelo.",
        "mediaUrlInvalid": "Informe uma URL http(s) válida.",
        "enterValue": "Informe o valor...",
        "loadingFields": "Carregando…",
        "noCustomFields": "Nenhum campo personalizado",
        "unmappedWarning": "Associe todas as variáveis antes de continuar — ainda faltam <mono>{keys}</mono>. Caso contrário, essas variáveis serão enviadas à Meta como strings vazias.",
        "fieldMap": {
          "name": "Nome",
          "phone": "Telefone",
          "email": "E-mail"
        },
        "sampleName": "João Silva",
        "sampleCompany": "Empresa Exemplo Ltda."
      },
      "scheduleSend": {
        "title": "Revisar e enviar",
        "subtitle": "Dê um nome ao seu disparo e confirme o envio.",
        "broadcastName": "Nome do disparo",
        "broadcastNamePlaceholder": "ex.: Promoção de verão",
        "summary": "Resumo",
        "template": "Modelo:",
        "audience": "Público:",
        "audienceAll": "Todos os contatos",
        "audienceTags": "Filtrado por tags",
        "audienceField": "Filtrado por campo personalizado",
        "audienceCsv": "Upload de CSV",
        "variables": "Variáveis:",
        "variablesMapped": "{count} associadas",
        "saveDraft": "Salvar como rascunho",
        "sendNow": "Enviar disparo",
        "sending": "Enviando...",
        "preparing": "Preparando...",
        "progressDesc": "Processando {current} de {total} destinatários...",
        "toastFailedPreview": "Falha ao carregar os dados da pré-visualização",
        "estimatedReach": "Alcance estimado",
        "language": "Idioma",
        "confirmTitle": "Confirmar disparo",
        "confirmDesc": "Você está prestes a enviar este disparo para <b>{count, number}</b> {count, plural, =1 {contato} other {contatos}} usando o modelo <b>{template}</b>. Esta ação não pode ser desfeita."
      }
    },
    "sending": {
      "notSignedIn": "Você não está conectado.",
      "notLinkedToAccount": "Seu perfil não está vinculado a uma conta.",
      "lookupCsvContactsFailed": "Falha ao consultar os contatos do CSV: {error}",
      "createCsvContactsFailed": "Falha ao criar os contatos do CSV: {error}",
      "noContactsForAudience": "Nenhum contato encontrado para este público.",
      "createBroadcastFailed": "Falha ao criar o disparo: {error}",
      "unknownErrorLower": "erro desconhecido",
      "insertRecipientBatchFailed": "Falha ao inserir o lote de destinatários {batch}: {error}",
      "fetchRecipientsFailed": "Falha ao buscar os destinatários do disparo",
      "apiRequestFailed": "Falha na requisição à API de disparo",
      "noPhoneOnContact": "O contato não tem número de telefone",
      "unknownError": "Erro desconhecido"
    }
  },
  "Automations": {
    "list": {
      "title": "Automações",
      "subtitle": "Crie fluxos de trabalho que reagem automaticamente a eventos do WhatsApp®.",
      "create": "Criar automação",
      "retry": "Tentar novamente",
      "templatesTitle": "Modelos para começar rápido",
      "emptyTitle": "Nenhuma automação ainda",
      "emptyDesc": "Escolha um modelo acima ou crie uma do zero.",
      "runs": "{count} execução",
      "runsPlural": "{count} execuções",
      "lastRun": "última {time}",
      "activate": "Ativar",
      "deactivate": "Desativar",
      "edit": "Editar",
      "duplicate": "Duplicar",
      "viewLogs": "Ver logs",
      "delete": "Excluir",
      "cancel": "Cancelar",
      "deleteTitle": "Excluir automação",
      "deleteDesc": "Isso remove permanentemente {name} e seu histórico de execuções. Não é possível desfazer.",
      "activeIndicator": "ativa",
      "openMenu": "Abrir menu",
      "toasts": {
        "activated": "Automação ativada",
        "paused": "Automação pausada",
        "duplicated": "Automação duplicada",
        "deleted": "Automação excluída",
        "updateError": "Falha ao atualizar",
        "duplicateError": "Falha ao duplicar",
        "deleteError": "Falha ao excluir"
      },
      "loadFailed": "Falha ao carregar as automações"
    },
    "edit": {
      "loading": "Carregando...",
      "loadError": "Falha ao carregar ({status})",
      "back": "Voltar às automações"
    },
    "logs": {
      "title": "Logs de execução",
      "loadError": "Falha ao carregar os logs",
      "emptyTitle": "Nenhuma execução ainda",
      "emptyDesc": "Acione esta automação para ver as execuções aqui.",
      "unknownContact": "Contato desconhecido",
      "step": "{count} etapa",
      "stepPlural": "{count} etapas",
      "noSteps": "Nenhuma etapa registrada.",
      "status": {
        "success": "sucesso",
        "partial": "parcial",
        "failed": "falhou"
      },
      "back": "Voltar",
      "backAria": "Voltar"
    },
    "relative": {
      "never": "nunca",
      "justNow": "agora mesmo",
      "minutesAgo": "há {n}min",
      "hoursAgo": "há {n}h",
      "daysAgo": "há {n}d"
    },
    "builder": {
      "steps": {
        "send_message": "Enviar mensagem",
        "send_buttons": "Enviar botões",
        "send_list": "Enviar lista",
        "send_template": "Enviar modelo",
        "add_tag": "Adicionar tag",
        "remove_tag": "Remover tag",
        "assign_conversation": "Atribuir conversa",
        "update_contact_field": "Atualizar campo do contato",
        "create_deal": "Criar negócio",
        "wait": "Aguardar",
        "condition": "Condição (Se/Senão)",
        "send_webhook": "Enviar webhook",
        "close_conversation": "Fechar conversa"
      },
      "triggers": {
        "new_message_received": {
          "label": "Nova mensagem recebida",
          "hint": "Qualquer mensagem recebida"
        },
        "first_inbound_message": {
          "label": "Primeira mensagem do contato",
          "hint": "Primeira vez que este contato envia uma mensagem (funciona também para contatos adicionados manualmente)"
        },
        "keyword_match": {
          "label": "Palavra-chave",
          "hint": "A mensagem contém palavra(s)-chave específica(s)"
        },
        "interactive_reply": {
          "label": "Resposta de botão / lista",
          "hint": "O cliente toca em um botão ou item de lista cujo id corresponde — encadeie menus entre automações"
        },
        "new_contact_created": {
          "label": "Novo contato criado",
          "hint": "Quando um contato é criado automaticamente a partir de uma mensagem recebida"
        },
        "conversation_assigned": {
          "label": "Conversa atribuída",
          "hint": "Quando atribuída a um agente"
        },
        "tag_added": {
          "label": "Tag adicionada",
          "hint": "Quando uma tag é adicionada a um contato"
        },
        "time_based": {
          "label": "Por horário",
          "hint": "Em um agendamento recorrente"
        }
      },
      "trigger": "Gatilho",
      "triggerType": "Tipo de gatilho",
      "keywords": "Palavras-chave",
      "keywordsHint": "Lista separada por vírgulas (ex.: olá, ajuda, comprar)",
      "replyIds": "IDs de resposta",
      "replyIdsHint": "sim, nao, mais_info",
      "replyIdsHelp": "IDs de botão/item de lista separados por vírgula, correspondência exata. Use os mesmos ids definidos em uma etapa Enviar botões / Enviar lista.",
      "schedule": "Agendamento",
      "scheduleHint": "Expressão cron (ex.: 0 9 * * 1-5)",
      "schedulePlaceholder": "Expressão cron ou HH:mm",
      "active": "Ativa",
      "activeAria": "Ativa",
      "save": "Salvar",
      "saveDraft": "Salvar rascunho",
      "untitled": "Automação sem título",
      "backToAutomations": "Voltar às automações",
      "toasts": {
        "saved": "Automação salva",
        "created": "Automação criada",
        "saveFailed": "Falha ao salvar",
        "issueAt": "em {path}"
      },
      "tags": {
        "select": "Selecione uma tag…",
        "placeholder": "ID da tag",
        "unknown": "{id} (tag desconhecida)"
      },
      "fields": {
        "name": "Nome",
        "email": "E-mail",
        "company": "Empresa",
        "customFields": "Campos personalizados",
        "unknown": "{id} (campo desconhecido)"
      },
      "agents": {
        "select": "Selecione um agente…",
        "placeholder": "ID do agente",
        "unknown": "{id} (agente desconhecido)"
      },
      "pipelines": {
        "pipelineLabel": "Pipeline",
        "pipelineIdLabel": "ID do pipeline",
        "stageLabel": "Etapa",
        "stageIdLabel": "ID da etapa",
        "selectPipeline": "Selecione um pipeline…",
        "selectStage": "Selecione uma etapa…",
        "selectPipelineFirst": "Selecione um pipeline primeiro…",
        "unknownPipeline": "{id} (pipeline desconhecido)",
        "unknownStage": "{id} (etapa desconhecida)"
      },
      "templates": {
        "templateLabel": "Modelo",
        "templateNameLabel": "Nome do modelo",
        "languageLabel": "Idioma",
        "select": "Selecione um modelo…",
        "unknown": "{name} ({lang}) — não está na lista de aprovados",
        "unknownLang": "desconhecido"
      },
      "branches": {
        "yes": "Sim",
        "no": "Não"
      },
      "addStep": "Adicionar etapa",
      "moveUp": "Mover para cima",
      "moveDown": "Mover para baixo",
      "kindCondition": "Condição",
      "kindWait": "Espera",
      "kindAction": "Ação",
      "delete": "Excluir",
      "config": {
        "messageText": "Texto da mensagem",
        "placeholderMessageText": "Olá! Obrigado por entrar em contato…",
        "tagLabel": "Tag",
        "modeLabel": "Modo",
        "modes": {
          "round_robin": "Rodízio",
          "specific": "Agente específico"
        },
        "agentLabel": "Agente",
        "fieldLabel": "Campo",
        "valueLabel": "Valor",
        "placeholderValue": "Texto ou {{ vars.x }} / {{ message.text }}",
        "titleLabel": "Título",
        "amountLabel": "Quantidade",
        "unitLabel": "Unidade",
        "units": {
          "minutes": "Minutos",
          "hours": "Horas",
          "days": "Dias"
        },
        "subjectLabel": "Assunto",
        "subjects": {
          "tag_presence": "Presença de tag",
          "contact_field": "Campo do contato",
          "message_content": "Conteúdo da mensagem",
          "time_of_day": "Hora do dia"
        },
        "operandLabel": "Operando",
        "placeholderTime": "HH:mm-HH:mm",
        "placeholderContact": "nome / e-mail / empresa",
        "placeholderTag": "id da tag",
        "urlLabel": "URL",
        "headersLabel": "Cabeçalhos",
        "placeholderHeaders": "{\"Authorization\": \"Bearer ...\"}",
        "bodyTemplateLabel": "Modelo do corpo",
        "placeholderBody": "{\"id\": \"{{ contact.id }}\"}",
        "matchType": "Tipo de correspondência",
        "matchContains": "Contém",
        "matchWord": "Palavra inteira",
        "matchWordHint": "Corresponde à palavra-chave apenas como palavra isolada, então \"k\" não dispara mais em \"thanks\". Ideal para palavras-chave curtas em idiomas com espaços; use Contém para idiomas escritos sem espaços.",
        "matchExact": "Exata",
        "waitForReply": "Aguardar resposta antes de continuar",
        "waitForReplyHint": "Pausa aqui até o cliente tocar em um botão ou responder (até 24h). As etapas seguintes, incluindo Se/Senão no conteúdo da mensagem, usam essa resposta.",
        "closeConversationHint": "Define o status da conversa como \"fechada\". Nenhuma configuração necessária."
      },
      "preview": {
        "noText": "sem texto ainda",
        "noBody": "sem corpo ainda",
        "withWaitForReply": "{preview} · aguarda resposta",
        "pickTemplate": "escolha um modelo",
        "wait": "{amount} {unit}",
        "units": {
          "minutes": "minutos",
          "hours": "horas",
          "days": "dias"
        },
        "when": "quando {subject}",
        "noUrl": "sem URL"
      }
    }
  },
  "Flows": {
    "list": {
      "title": "Fluxos",
      "beta": "Beta",
      "description": "Crie conversas de WhatsApp com ramificações e botões. Útil para menus, FAQs e triagem antes de um humano entrar.",
      "newFlow": "Novo fluxo",
      "statusDraft": "Rascunho",
      "statusActive": "Ativo",
      "statusArchived": "Arquivado",
      "loadError": "Não foi possível carregar os fluxos.",
      "createError": "Não foi possível criar o fluxo.",
      "cloneError": "Falha ao clonar",
      "deleteConfirm": "Excluir \"{name}\"? Todas as execuções ativas terminarão imediatamente.",
      "deleteSuccess": "Fluxo excluído.",
      "deleteError": "Não foi possível excluir o fluxo.",
      "emptyTitle": "Nenhum fluxo ainda",
      "emptyDesc": "Crie sua primeira conversa — um menu de boas-vindas, uma consulta de pedido, um bot de FAQ. Os clientes tocam em botões; o bot os leva à resposta certa (ou ao agente certo).",
      "createFirst": "Crie seu primeiro fluxo",
      "createTitle": "Criar um novo fluxo",
      "createDesc": "Comece a partir de um modelo ou do zero.",
      "startTemplate": "Começar a partir de um modelo",
      "nodeCount": "{count} {count, plural, =1 {nó} other {nós}}",
      "startBlank": "Ou comece em branco",
      "placeholderName": "ex.: Menu de boas-vindas",
      "cancel": "Cancelar",
      "createBlank": "Criar fluxo em branco",
      "runCount": "{count} {count, plural, =1 {execução} other {execuções}}",
      "edit": "Editar",
      "delete": "Excluir",
      "triggerKeywordNone": "Acionado por palavra-chave (nenhuma definida)",
      "triggerKeyword": "Acionado por: {keywords}",
      "triggerFirstInbound": "Acionado pela primeira mensagem recebida de um contato",
      "triggerManual": "Acionamento manual",
      "cloneFailedStatus": "Falha ao clonar: {status}"
    },
    "edit": {
      "notFound": "Fluxo não encontrado.",
      "backToFlows": "← Voltar aos fluxos",
      "loadError": "Não foi possível carregar o fluxo."
    },
    "logs": {
      "title": "Execuções",
      "description": "As 50 execuções mais recentes deste fluxo. Expanda uma linha para ver o log do motor etapa por etapa.",
      "emptyState": "Nenhuma execução ainda. Acione o fluxo a partir de um número pessoal de WhatsApp para vê-lo aparecer aqui.",
      "loadError": "Não foi possível carregar as execuções.",
      "unknownContact": "Contato desconhecido",
      "atNode": "em {node}",
      "started": "Iniciada {time}",
      "reprompts": "{count} repetições de pergunta",
      "ranFor": "durou {duration}",
      "capturedVars": "Variáveis capturadas ({count})",
      "noEvents": "Nenhum evento registrado para esta execução.",
      "statusActive": "Ativa",
      "statusCompleted": "Concluída",
      "statusHandedOff": "Transferida",
      "statusTimedOut": "Tempo esgotado",
      "statusPaused": "Pausada pelo agente",
      "statusFailed": "Falhou"
    },
    "builder": {
      "triggerTitle": "Gatilho",
      "whenLabel": "Quando…",
      "triggerKeywordTitle": "Uma mensagem contém uma palavra-chave",
      "triggerFirstInboundTitle": "Primeira mensagem recebida do cliente",
      "triggerManualTitle": "Somente manual (sem acionamento automático)",
      "keywordsLabel": "Palavras-chave (separadas por vírgula)",
      "keywordsPlaceholder": "suporte, ajuda, oi",
      "entryNodeTitle": "Nó de entrada:",
      "entryNodePlaceholder": "Escolha o primeiro nó…",
      "nodesTitle": "Nós ({count})",
      "nodesEmpty": "Adicione um nó <strong>Início</strong>, depois um nó <strong>Enviar botões</strong> e então um <strong>Transferência</strong> — esse é o formato do menu de boas-vindas do briefing.",
      "addNode": "Adicionar nó",
      "setAsEntry": "Definir como entrada",
      "removeNode": "Remover nó",
      "showAdvanced": "Mostrar avançado",
      "hideAdvanced": "Ocultar avançado",
      "nodeKeyLabel": "Chave do nó (identificador interno — mantenha estável para as análises)",
      "replyIdsHint": "Os IDs de resposta de cada opção aparecem acima. O WhatsApp os devolve quando um cliente toca; normalmente você não precisa mexer neles.",
      "badgeEntry": "Entrada",
      "noNodesYet": "Nenhum nó ainda.",
      "deleteNode": "Excluir nó",
      "canvasView": "Canvas",
      "listView": "Lista",
      "noNodeSelected": "Nenhum nó selecionado",
      "noNodeDesc": "Selecione um nó no canvas para editar sua configuração.",
      "editorView": "Visualização do editor",
      "form": {
        "advancesTo": "Avança para",
        "textToCustomer": "Texto enviado ao cliente",
        "promptToCustomer": "Pergunta enviada ao cliente",
        "varKeyLabel": "Chave da variável (armazenada em flow_runs.vars; alfanumérico + underscore)",
        "varKeyPlaceholder": "ex.: name, email, company",
        "varKeyHelp": "Interpole em perguntas seguintes e notas de transferência com",
        "advanceAfterCapture": "Após capturar, avançar para",
        "internalNote": "Nota interna (para o agente que assumir)",
        "endNodeHelp": "Nó terminal. Quando o executor chega a este nó, a execução é marcada como concluída. Nenhuma configuração necessária.",
        "bodyText": "Texto do corpo",
        "footerText": "Rodapé (opcional, 60 caracteres)",
        "buttonsHelp": "Botões (1–3) — cada um leva a um nó seguinte diferente",
        "optionTitlePlaceholder": "Título visível (≤20 caracteres)",
        "nextNodePlaceholder": "Próximo nó…",
        "addButton": "Adicionar botão",
        "buttonLabel": "Rótulo do botão de expandir (≤20 caracteres)",
        "rowsHelp": "Linhas (1–10 no total em todas as seções)",
        "sectionTitlePlaceholder": "Título da seção {count} (opcional)",
        "rowTitlePlaceholder": "Título da linha (≤24)",
        "addRow": "Adicionar linha",
        "addSection": "Adicionar seção",
        "ifLabel": "Se",
        "capturedVariable": "Variável capturada",
        "contactHasTag": "Contato tem a tag",
        "contactField": "Campo do contato",
        "varName": "nome da variável",
        "tagLabel": "Tag",
        "fieldLabel": "Campo",
        "pickTag": "Escolha uma tag…",
        "pickField": "Escolha um campo…",
        "operatorLabel": "Operador",
        "isPresent": "está presente",
        "isAbsent": "está ausente",
        "equals": "é igual a",
        "contains": "contém",
        "valueLabel": "Valor",
        "ifTrueAdvance": "Se verdadeiro → avançar para",
        "ifFalseAdvance": "Se falso → avançar para",
        "actionLabel": "Ação",
        "addTag": "Adicionar tag",
        "removeTag": "Remover tag",
        "tagUuidPlaceholder": "UUID da tag",
        "thenAdvanceTo": "Depois avançar para",
        "mediaTypeLabel": "Tipo de mídia",
        "imageLabel": "Imagem (PNG, JPEG, WebP)",
        "videoLabel": "Vídeo (MP4, 3GP)",
        "documentLabel": "Documento (PDF, Word, Excel, PowerPoint, TXT)",
        "fileLabel": "Arquivo",
        "removeFile": "Remover arquivo",
        "uploading": "Enviando…",
        "clickToUpload": "Clique para enviar (máx. 16 MB)",
        "captionLabel": "Legenda (opcional, exibida abaixo da mídia)",
        "filenameLabel": "Nome do arquivo exibido ao cliente (somente documentos)",
        "filenamePlaceholder": "fatura.pdf",
        "advanceAfterSending": "Após enviar, avançar para",
        "pickNextNode": "Escolha o próximo nó…",
        "none": "— Nenhum —",
        "removeSection": "Remover seção",
        "fileUploaded": "Arquivo enviado.",
        "uploadFailed": "Falha no upload.",
        "fileTooLarge": "O arquivo tem {size} MB — o limite é 16 MB.",
        "defaultOptionTitle": "Opção",
        "optionN": "Opção {n}"
      },
      "categories": {
        "messaging": "Mensagens",
        "logic": "Lógica e dados",
        "flow": "Controle de fluxo"
      },
      "nodes": {
        "start": {
          "label": "Início",
          "blurb": "Ponto de entrada do fluxo"
        },
        "send_message": {
          "label": "Enviar mensagem",
          "blurb": "Envia uma mensagem de texto no WhatsApp"
        },
        "send_buttons": {
          "label": "Enviar botões",
          "blurb": "Envia botões de resposta rápida"
        },
        "send_list": {
          "label": "Enviar lista",
          "blurb": "Envia uma lista de opções tocáveis"
        },
        "send_media": {
          "label": "Enviar mídia",
          "blurb": "Envia uma imagem, vídeo ou documento"
        },
        "collect_input": {
          "label": "Coletar resposta",
          "blurb": "Faz uma pergunta e salva a resposta"
        },
        "condition": {
          "label": "Se / senão",
          "blurb": "Ramifica com base em uma regra"
        },
        "set_tag": {
          "label": "Marcar contato",
          "blurb": "Adiciona ou remove uma tag do contato"
        },
        "handoff": {
          "label": "Transferir para agente",
          "blurb": "Passa a conversa para um humano"
        },
        "end": {
          "label": "Fim",
          "blurb": "Encerra o fluxo"
        }
      }
    },
    "validation": {
      "noIssues": "Nenhum problema. Pronto para ativar.",
      "summary": "{errorCount} {errorCount, plural, =1 {erro} other {erros}}, {warningCount} {warningCount, plural, =1 {aviso} other {avisos}}",
      "jumpToNode": "Ir para o nó {key}"
    },
    "editorState": {
      "saved": "Salvo.",
      "fixIssues": "Corrija os problemas abaixo antes de ativar.",
      "statusActivated": "Fluxo ativado.",
      "statusArchived": "Arquivado.",
      "statusDraft": "Salvo como rascunho.",
      "deleteConfirm": "Excluir \"{name}\"? Todas as execuções ativas terminam imediatamente. Não é possível desfazer.",
      "defaultYes": "Sim",
      "defaultListButton": "Ver opções",
      "saveFailedStatus": "Falha ao salvar: {status}",
      "saveFailed": "Falha ao salvar",
      "statusUpdateFailedStatus": "Falha ao atualizar o status: {status}",
      "statusUpdateFailed": "Falha ao atualizar o status",
      "deleteFailedStatus": "Falha ao excluir: {status}",
      "deleteFailed": "Falha ao excluir"
    },
    "summary": {
      "options": "{count} {count, plural, =1 {opção} other {opções}}",
      "optionsAcrossSections": "{rowCount} {rowCount, plural, =1 {opção} other {opções}} em {sectionCount} {sectionCount, plural, =1 {seção} other {seções}}",
      "noFile": "{label} (nenhum arquivo enviado)",
      "media": "Mídia",
      "image": "Imagem",
      "video": "Vídeo",
      "document": "Documento",
      "audio": "Áudio",
      "hasTag": "tem a tag {tag}",
      "opContains": "contém",
      "opExists": "existe",
      "opMissing": "ausente",
      "modeAdd": "Adicionar",
      "modeRemove": "Remover",
      "tagPicked": "{mode} tag {tag}…",
      "tagNone": "{mode} tag (nenhuma escolhida)"
    },
    "header": {
      "backToFlows": "Voltar aos fluxos",
      "namePlaceholder": "Nome do fluxo",
      "unsavedHint": "Alterações não salvas — clique em Salvar para mantê-las",
      "edited": "Editado",
      "runs": "Execuções",
      "delete": "Excluir",
      "pause": "Pausar",
      "activate": "Ativar",
      "fixIssues": "Corrija os problemas abaixo antes de ativar",
      "save": "Salvar",
      "descriptionPlaceholder": "Adicione uma breve descrição (interna — os clientes não a veem)",
      "descriptionLabel": "Descrição do fluxo"
    }
  },
  "Settings": {
    "pageTitle": "Configurações",
    "pageDesc": "Tudo em um só lugar — sua conta e seu espaço de trabalho. Escolha uma seção para gerenciá-la.",
    "sectionsNav": "Seções de configurações",
    "overview": {
      "notSetup": "Ainda não configurado",
      "connected": "Conectado",
      "needsReconnecting": "Precisa reconectar",
      "viewTeamMembers": "Ver membros da equipe",
      "membersCount": "{count} {count, plural, =1 {membro} other {membros}}",
      "pendingInvites": "{count} {count, plural, =1 {convite pendente} other {convites pendentes}}",
      "manageTemplates": "Gerenciar modelos de mensagem",
      "templatesCount": "{count} {count, plural, =1 {modelo} other {modelos}}",
      "pendingReview": "{count} em análise",
      "tagsAndFields": "Tags e campos personalizados",
      "tagsCount": "{count} {count, plural, =1 {tag} other {tags}}",
      "fieldsCount": "{count} {count, plural, =1 {campo personalizado} other {campos personalizados}}",
      "appearance": "modo {mode} · destaque {theme}",
      "yourAccount": "Sua conta",
      "loading": "Carregando…"
    },
    "members": {
      "title": "Membros da equipe",
      "description": "Pessoas com acesso a esta conta. As funções controlam o que cada colega pode fazer.",
      "inviteMember": "Convidar membro",
      "online": "online",
      "away": "ausente",
      "offline": "offline",
      "memberCount": "{count} {count, plural, =1 {membro} other {membros}}",
      "you": "Você",
      "unnamed": "Sem nome",
      "joined": "Entrou em {date}",
      "remove": "Remover",
      "removedToast": "{name} removido",
      "updatedToast": "{name} atualizado para {role}",
      "pendingInvitations": "Convites pendentes",
      "inviteHint": "Por segurança, a URL do convite em texto puro só é exibida uma vez, na criação — para compartilhar de novo, revogue o convite abaixo e crie outro.",
      "noPendingTitle": "Nenhum convite pendente.",
      "noPendingDesc": "Clique em <bold>Convidar membro</bold> acima para gerar um link compartilhável.",
      "untitledInvite": "Convite sem título",
      "created": "Criado em {date}",
      "expiresInDays": "expira em {days} {days, plural, =1 {dia} other {dias}}",
      "expiresInHours": "expira em {hours} {hours, plural, =1 {hora} other {horas}}",
      "expired": "expirado",
      "revoke": "Revogar",
      "revokedToast": "Convite revogado",
      "loadFailed": "Falha ao carregar os membros",
      "loadInvitationsFailed": "Falha ao carregar os convites",
      "updateRoleFailed": "Falha ao atualizar a função",
      "removeFailed": "Falha ao remover o membro",
      "revokeFailed": "Falha ao revogar o convite",
      "networkError": "Não foi possível conectar ao servidor",
      "memberAlt": "Membro",
      "removeDialogTitle": "Remover membro",
      "removeDialogDesc": "Remover <bold>{name}</bold> da conta? A pessoa será desconectada desta conta e receberá uma nova conta pessoal no próximo login. O login dela não é excluído.",
      "cancel": "Cancelar",
      "removing": "Removendo...",
      "removeBtn": "Remover membro"
    },
    "invite": {
      "inviteCreated": "Convite criado",
      "inviteCreatedDesc": "Compartilhe este link com o novo colega. Ele poderá se cadastrar (ou entrar) e ingressar na conta como <bold>{role}</bold>. O link é válido por <bold>{days} {days, plural, =1 {dia} other {dias}}</bold>.",
      "inviteLink": "Link do convite",
      "copy": "Copiar",
      "saveLinkNow": "Salve este link agora.",
      "saveLinkHint": "Nunca armazenamos o texto puro — ao fechar esta janela, a URL desaparece. Para compartilhar de novo, revogue este convite e crie outro.",
      "sendViaWhatsApp": "Enviar pelo WhatsApp",
      "done": "Concluído",
      "dialogTitle": "Convidar um colega",
      "networkError": "Não foi possível conectar ao servidor. Tentar novamente?",
      "fallbackAccountName": "nossa conta do wacrm",
      "dialogDesc": "Gere um link de convite de uso único. Compartilhe pelo WhatsApp, Slack ou qualquer outro canal — não é preciso serviço de e-mail.",
      "roleLabel": "Função",
      "validForLabel": "Link válido por",
      "days1": "1 dia",
      "days7": "7 dias",
      "days30": "30 dias",
      "labelTitle": "Rótulo",
      "optional": "(opcional)",
      "labelPlaceholder": "ex.: Sara — equipe de suporte",
      "labelHint": "Ajuda você a lembrar para quem enviou o link na lista de pendentes abaixo.",
      "cancel": "Cancelar",
      "creating": "Criando...",
      "generateLink": "Gerar link",
      "labelTooLong": "O rótulo deve ter no máximo {max} caracteres",
      "copied": "Link do convite copiado",
      "clipboardBlocked": "Área de transferência bloqueada — copie o link manualmente",
      "whatsappMessage": "Entre em {accountName} no wacrm usando este link (válido por {expiresInDays} dias): {url}",
      "createFailed": "Falha ao criar o convite"
    },
    "tagsAndFields": {
      "title": "Campos e tags",
      "description": "Duas formas de organizar contatos: tags coloridas para agrupar rapidamente e campos personalizados para dados estruturados.",
      "tagsTitle": "Tags",
      "tagsDesc": "Rótulos coloridos para agrupar e filtrar contatos.",
      "fieldsTitle": "Campos personalizados",
      "fieldsDesc": "Campos extras para os contatos (ex.: CEP, origem do lead). Eles aparecem em todos os contatos e na ação de automação “Atualizar campo do contato”.",
      "adminRole": "Administrador",
      "failedToLoadTags": "Falha ao carregar as tags",
      "nameRequired": "O nome da tag é obrigatório",
      "notAuthenticated": "Não autenticado",
      "tagCreated": "Tag criada",
      "failedToCreateTag": "Falha ao criar a tag",
      "tagDeleted": "Tag excluída",
      "failedToDeleteTag": "Falha ao excluir a tag",
      "deleteAria": "Excluir {name}",
      "noTags": "Nenhuma tag ainda — crie a primeira abaixo.",
      "placeholder": "ex.: Newsletter",
      "useColor": "Usar {color}",
      "addTag": "Adicionar tag",
      "deleteTag": "Excluir tag",
      "deleteConfirm": "Excluir a tag \"{name}\"? Isso a remove de todos os contatos e não pode ser desfeito.",
      "cancel": "Cancelar",
      "deleting": "Excluindo...",
      "colors": {
        "red": "Vermelho",
        "orange": "Laranja",
        "amber": "Âmbar",
        "emerald": "Esmeralda",
        "cyan": "Ciano",
        "blue": "Azul",
        "violet": "Violeta",
        "pink": "Rosa"
      }
    },
    "templates": {
      "title": "Modelos de mensagem",
      "description": "Crie modelos e envie-os à Meta para aprovação. Use \"Sincronizar da Meta\" para importar modelos aprovados em outro lugar.",
      "syncFromMeta": "Sincronizar da Meta",
      "qualityScoreTitle": "Pontuação de qualidade da Meta",
      "headerTextLabel": "Texto do cabeçalho",
      "editFailedHttp": "Falha na edição (HTTP {status})",
      "submitFailedHttp": "Falha no envio (HTTP {status})",
      "syncing": "Sincronizando…",
      "syncTitle": "Importar modelos aprovados da sua conta do WhatsApp Business na Meta",
      "newTemplate": "Novo modelo",
      "noTemplates": "Nenhum modelo ainda.",
      "createFirst": "Crie seu primeiro modelo de mensagem para começar.",
      "editTitle": "Editar aciona uma nova análise da Meta — o status volta para PENDENTE.",
      "editLabel": "Editar modelo",
      "edit": "Editar",
      "resubmitTitle": "Edite o modelo e reenvie à Meta para análise.",
      "resubmitLabel": "Editar e reenviar modelo",
      "resubmit": "Reenviar",
      "deleteMetaLocallyAria": "Excluir modelo da Meta e localmente",
      "deleteLocallyAria": "Excluir modelo localmente",
      "deleteMetaLocallyTitle": "Excluir da Meta e localmente",
      "deleteLocallyTitle": "Excluir localmente",
      "dialogEditTitle": "Editar modelo de mensagem",
      "dialogNewTitle": "Novo modelo de mensagem",
      "dialogEditDesc": "Salve suas alterações para reenviar à Meta. O status voltará para PENDENTE durante a análise.",
      "dialogNewDesc": "Crie um modelo e envie-o à Meta para aprovação. Depois de aprovado, você pode usá-lo em disparos e na caixa de entrada.",
      "authWarning": "Modelos de AUTENTICAÇÃO têm um formato fixo de corpo + botão OTP que exige outro construtor. Por enquanto, crie-os no Gerenciador do WhatsApp da Meta e use <bold>Sincronizar da Meta</bold> para importá-los.",
      "templateName": "Nome do modelo",
      "namePlaceholder": "ex.: order_confirmation",
      "nameFixed": "O nome é fixo depois que o modelo existe na Meta — crie um novo modelo para alterá-lo.",
      "nameHint": "Somente letras minúsculas, dígitos e underscores.",
      "category": "Categoria",
      "language": "Idioma",
      "langFixed": "O idioma é fixo depois que o modelo existe na Meta.",
      "langHint": "Deve corresponder exatamente ao código na Meta — <code>en_US</code> e <code>en</code> são diferentes.",
      "header": "Cabeçalho",
      "headerNone": "Nenhum",
      "headerText": "Texto",
      "headerImage": "Imagem",
      "headerVideo": "Vídeo",
      "headerDocument": "Documento",
      "headerTextPlaceholder": "Texto do cabeçalho (máx. 60 caracteres, {{1}} opcional)",
      "headerSampleAria": "Valor de exemplo para a variável do cabeçalho",
      "headerSamplePlaceholder": "Valor de exemplo para {{1}} (obrigatório para a análise da Meta)",
      "uploadImage": "Enviar imagem",
      "uploadVideo": "Enviar vídeo",
      "uploadDocument": "Enviar documento",
      "uploadHint": "JPEG ou PNG, ≤5 MB",
      "uploadHintVideo": "MP4 ou 3GPP, ≤16 MB",
      "uploadHintDocument": "PDF, Word, PowerPoint, Excel ou texto, ≤16 MB",
      "mediaUrlPlaceholder": "https://… (ou cole um link público de {format})",
      "imageHint": "Envie um JPEG/PNG (≤5 MB, ≥800×418 px recomendado) ou cole um link HTTPS público — nós o enviamos à Meta para análise automaticamente.",
      "mediaHint": "Envie um arquivo ou cole um link HTTPS público — nós o enviamos à Meta para análise automaticamente.",
      "videoHint": " MP4 ou 3GPP, ≤16 MB, ≤60 segundos recomendado.",
      "documentHint": " PDF, Word, PowerPoint, Excel ou texto, ≤100 MB via link (≤16 MB quando enviado aqui).",
      "bodyText": "Texto do corpo",
      "bodyPlaceholder": "Olá {{1}}, seu pedido {{2}} foi confirmado.",
      "bodyHint": "Use {{1}}, {{2}} para variáveis (devem ser contíguas, começando em {{1}}).",
      "sampleValues": "Valores de exemplo (a Meta os usa para analisar seu modelo)",
      "sampleAria": "Valor de exemplo para a variável do corpo {var}",
      "samplePlaceholder": "Exemplo para {var}",
      "footer": "Rodapé (opcional)",
      "footerPlaceholder": "Texto do rodapé opcional (máx. 60 caracteres)",
      "buttons": "Botões (opcional)",
      "addButton": "Adicionar botão",
      "buttonsLimit": "Até {max} botões. Botões QUICK_REPLY devem vir antes dos botões de URL / telefone / copiar código.",
      "btnQuickReply": "Resposta rápida",
      "btnUrl": "URL",
      "btnPhone": "Telefone",
      "btnCopyCode": "Copiar código",
      "btnLabelPlaceholder": "Rótulo do botão",
      "urlPlaceholder": "https://example.com/path ou com sufixo {{1}}",
      "urlSamplePlaceholder": "Valor de exemplo para {{1}} (obrigatório quando a URL tem uma variável)",
      "phonePlaceholder": "+15551234567",
      "codePlaceholder": "Código de exemplo (ex.: VERAO20)",
      "cancel": "Cancelar",
      "saving": "Salvando…",
      "submitting": "Enviando…",
      "saveResubmit": "Salvar e reenviar",
      "submitApproval": "Enviar para aprovação",
      "deleteDialogTitle": "Excluir modelo?",
      "deleteMetaDesc": "\"{name}\" será excluído da Meta e do wacrm. Disparos ativos que usam este modelo começarão a falhar no próximo envio. Não é possível desfazer.",
      "deleteLocalDesc": "\"{name}\" será excluído do wacrm. Ele nunca foi enviado à Meta, então não há limpeza remota necessária.",
      "deleting": "Excluindo…",
      "delete": "Excluir",
      "toastLoadFailed": "Falha ao carregar os modelos",
      "toastSubmitFailed": "Falha ao enviar",
      "toastSubmitEditSuccess": "Edição enviada — a Meta costuma analisar em até 24 horas.",
      "toastSubmitNewSuccess": "Enviado à Meta — o tempo de análise costuma ser de 24 horas. O status é atualizado automaticamente.",
      "toastSaveEditDry": "Modelo atualizado (simulação — sem chamada à Meta)",
      "toastSaveNewDry": "Modelo salvo (simulação — sem chamada à Meta)",
      "toastSyncCount": "{total} {total, plural, =1 {modelo sincronizado} other {modelos sincronizados}} da Meta",
      "toastSyncDetails": " ({inserted} novos, {updated} atualizados)",
      "toastSyncFailed": "Falha ao sincronizar: {preview}",
      "toastSyncTruncated": "Apenas os primeiros 2000 modelos foram sincronizados — sua conta tem mais. Sincronize novamente para continuar ou contate o suporte se isso persistir.",
      "toastSyncError": "Falha ao sincronizar os modelos",
      "toastDeleteSuccess": "Modelo excluído",
      "toastDeleteError": "Falha ao excluir o modelo",
      "toastInvalidImage": "A imagem do cabeçalho deve ser JPEG ou PNG.",
      "toastInvalidVideo": "O vídeo do cabeçalho deve ser um arquivo MP4 ou 3GPP.",
      "toastInvalidDocument": "O documento do cabeçalho deve ser um arquivo PDF, Word, PowerPoint, Excel ou texto.",
      "toastMediaTooLarge": "O arquivo tem {size} MB — o limite de upload é {max} MB.",
      "toastUploadSuccess": "Arquivo enviado.",
      "toastUploadFailed": "Falha no upload.",
      "syncFailedHttp": "Falha na sincronização (HTTP {status})",
      "deleteFailedHttp": "Falha ao excluir (HTTP {status})",
      "syncMoreSuffix": ", +{count} outros",
      "headerSampleAlt": "Exemplo de cabeçalho",
      "categoryLabels": {
        "Marketing": "Marketing",
        "Utility": "Utilidade",
        "Authentication": "Autenticação"
      }
    },
    "roles": {
      "admin": "Administrador",
      "adminHint": "Gerencia membros + tudo o mais",
      "agent": "Agente",
      "agentHint": "Usa os recursos; sem configurações",
      "viewer": "Visualizador",
      "viewerHint": "Somente leitura em todo o app",
      "owner": "Proprietário",
      "ownerHint": "Controle total da conta e do faturamento"
    },
    "whatsapp": {
      "title": "Conexão com o WhatsApp",
      "description": "Conecte sua API do WhatsApp Business da Meta. Credenciais, webhook e etapas de configuração ficam todos aqui.",
      "tokenCorrupted": "Não foi possível descriptografar o token armazenado",
      "resetting": "Redefinindo...",
      "resetConfig": "Redefinir configuração",
      "credentialsValid": "Credenciais válidas",
      "notConnected": "Não conectado",
      "connectedDesc": "Seu token de acesso autentica com a Meta. Veja o status de registro abaixo para saber se os webhooks estão realmente conectados.",
      "notConnectedDesc": "Configure abaixo suas credenciais da API da Meta para conectar sua conta do WhatsApp Business.",
      "registered": "Registrado — a Meta entregará eventos ao wacrm",
      "notRegistered": "Não registrado — a Meta não entregará eventos",
      "verifyWithMeta": "Verificar com a Meta",
      "subscribedSince": "Inscrito desde {date}. Clique em Verificar com a Meta se os eventos pararem de chegar.",
      "unknownDate": "desconhecida",
      "lastAttemptFailed": "A última tentativa falhou com: ",
      "retryHint": "Informe (ou corrija) o PIN de duas etapas abaixo e clique em Salvar configuração para tentar novamente.",
      "noRegistrationHint": "Este número foi salvo antes de existir o acompanhamento de registro, ou o registro foi ignorado. Informe o PIN de duas etapas abaixo e clique em Salvar configuração para inscrevê-lo.",
      "diagnosticLastRun": "Diagnóstico — última execução: ",
      "live": "ativo",
      "notLive": "inativo",
      "apiCredentialsTitle": "Credenciais da API",
      "apiCredentialsDesc": "Informe suas credenciais da API do WhatsApp Business da Meta.",
      "phoneNumberId": "Phone Number ID",
      "wabaId": "ID da conta do WhatsApp Business",
      "accessToken": "Token de acesso permanente",
      "accessTokenPlaceholder": "Informe seu token de acesso",
      "tokenHidden": "O token está oculto por segurança. Informe-o novamente para atualizar a configuração.",
      "webhookVerifyToken": "Token de verificação do webhook",
      "webhookVerifyTokenPlaceholder": "Crie um token de verificação personalizado",
      "webhookVerifyTokenHint": "Uma string personalizada criada por você. Deve corresponder ao token definido nas configurações de webhook da Meta.",
      "webhookVerifyTokenSaved": "Salvo. Deixe como está para mantê-lo ou digite um novo valor para trocá-lo.",
      "twoStepPin": "PIN de verificação em duas etapas",
      "optional": "(opcional)",
      "pinPlaceholder": "PIN de 6 dígitos do Gerenciador do WhatsApp da Meta",
      "pinHint": "Necessário apenas para receber mensagens em um número de produção. Defina-o em Meta Business Manager → Contas do WhatsApp → Números de telefone → Verificação em duas etapas e cole-o aqui para que o wacrm possa inscrever o número — caso contrário, a Meta encaminha os eventos recebidos para o último app que reivindicou o número (o sintoma que afeta segundos números em um WABA compartilhado). Números de teste da Meta não têm PIN e já vêm registrados — deixe em branco para eles. Deixar em branco também mantém um registro existente intacto.",
      "webhookTitle": "Configuração do webhook",
      "webhookDesc": "Use esta URL como callback do webhook no painel do app da Meta.",
      "webhookUrl": "URL de callback do webhook",
      "mediaTitle": "Armazenamento de anexos",
      "mediaDesc": "A Meta exclui as mídias recebidas cerca de 30 dias após a chegada. Os anexos podem ser copiados para o seu próprio armazenamento para continuarem visíveis.",
      "mirrorInbound": "Manter anexos recebidos",
      "mirrorInboundDesc": "Salva uma cópia de cada foto, vídeo, mensagem de voz e documento enviado pelos clientes. Usa seu armazenamento do Supabase; arquivos acima de 16 MB são ignorados.",
      "mirrorInboundOffWarning": "Novos anexos deixarão de ser copiados e ficarão indisponíveis cerca de 30 dias após a chegada.",
      "mirrorInboundSaveFailed": "Não foi possível atualizar a configuração de anexos.",
      "loadFailed": "Falha ao carregar a configuração do WhatsApp",
      "phoneNumberIdRequired": "O Phone Number ID é obrigatório",
      "accessTokenRequired": "O token de acesso é obrigatório na configuração inicial",
      "reenterAccessToken": "Informe novamente o token de acesso para salvar as alterações",
      "saveFailed": "Falha ao salvar a configuração",
      "savedButRegistrationFailed": "Salvo, mas a Meta não conseguiu registrar o número: {error}",
      "savedRegistrationSkipped": "Credenciais salvas e verificadas. O registro de recebimento foi ignorado (sem PIN) — veja o status de registro abaixo.",
      "liveWithName": "Ativo — {name} já pode receber eventos.",
      "connectedGeneric": "WhatsApp conectado. Os eventos começarão a chegar em até um minuto.",
      "connectedTo": "Conectado a {name}",
      "apiConnectionOk": "Conexão com a API bem-sucedida",
      "apiConnectionFailed": "Falha na conexão com a API",
      "connectionTestFailed": "O teste de conexão falhou. Verifique a rede e tente novamente.",
      "fullyWired": "O número está totalmente conectado — a Meta está entregando eventos.",
      "notFullyRegistered": "O número não está totalmente registrado. Veja nas verificações abaixo qual etapa falhou.",
      "verifyEndpointUnreachable": "Não foi possível acessar o endpoint de verificação.",
      "resetConfirm": "Isso excluirá a configuração atual do WhatsApp para que você possa informá-la novamente. Continuar?",
      "resetFailed": "Falha ao redefinir a configuração",
      "resetDone": "Configuração apagada. Agora você pode informar suas credenciais novamente.",
      "webhookCopied": "URL do webhook copiada para a área de transferência",
      "phoneNumberIdPlaceholder": "ex.: 100234567890123",
      "wabaIdPlaceholder": "ex.: 100234567890456",
      "saving": "Salvando...",
      "saveConfig": "Salvar configuração",
      "testing": "Testando...",
      "testConnection": "Testar conexão com a API",
      "setupInstructions": "Instruções de configuração",
      "setupInstructionsDesc": "Siga estas etapas para conectar sua API do WhatsApp Business.",
      "step1": "Crie um app na Meta",
      "step1_1": "Acesse developers.facebook.com",
      "step1_2": "Clique em \"Meus apps\" e depois em \"Criar app\"",
      "step1_3": "Selecione \"Empresa\" como tipo de app",
      "step1_4": "Preencha os dados do app e crie",
      "step2": "Adicione o produto WhatsApp",
      "step2_1": "No painel do app, clique em \"Adicionar produto\"",
      "step2_2": "Encontre \"WhatsApp\" e clique em \"Configurar\"",
      "step2_3": "Siga o assistente de configuração para vincular sua empresa",
      "step3": "Obtenha as credenciais da API",
      "step3_1": "Acesse WhatsApp > Configuração da API",
      "step3_2": "Copie seu <strong class=\"text-foreground\">Phone Number ID</strong>",
      "step3_3": "Copie seu <strong class=\"text-foreground\">ID da conta do WhatsApp Business</strong>",
      "step3_4": "Gere um <strong class=\"text-foreground\">Token de acesso permanente</strong> em Configurações do negócio > Usuários do sistema",
      "step4": "Configure os webhooks",
      "step4_1": "Acesse WhatsApp > Configuração",
      "step4_2": "Clique em \"Editar\" na seção Webhook",
      "step4_3": "Cole a <strong class=\"text-foreground\">URL de callback do webhook</strong> acima",
      "step4_4": "Informe o mesmo <strong class=\"text-foreground\">Token de verificação</strong> definido aqui",
      "step4_5": "Inscreva-se no campo de webhook \"messages\"",
      "metaDocs": "Documentação da API do WhatsApp da Meta",
      "lastSaveFailed": "O último salvamento falhou",
      "metaErrorStep": "Etapa",
      "metaErrorCode": "Código de erro da Meta",
      "metaErrorTrace": "Trace ID",
      "metaErrorMessage": "Resposta da Meta",
      "metaErrorDetailsHint": "Cite estes detalhes ao contatar o suporte da Meta.",
      "phoneNumberIdNotNumeric": "O Phone Number ID deve conter apenas dígitos. Copie o id numérico em Meta → WhatsApp → Configuração da API, não o número de telefone em si.",
      "wabaIdNotNumeric": "O ID da conta do WhatsApp Business deve conter apenas dígitos. Copie-o em Meta → WhatsApp → Configuração da API.",
      "wabaSubscribed": "A conta do WhatsApp Business está inscrita neste app — os webhooks de entrada podem ser entregues.",
      "wabaNotSubscribed": "A conta do WhatsApp Business não está inscrita neste app, então a Meta não entregará webhooks de entrada. Informe novamente o token de acesso e salve de novo para inscrevê-la."
    },
    "sections": {
      "overview": "Visão geral",
      "profile": "Seu perfil",
      "security": "Login e segurança",
      "appearance": "Aparência",
      "whatsapp": "WhatsApp",
      "templates": "Modelos",
      "quick-replies": "Respostas rápidas",
      "fields": "Campos e tags",
      "deals": "Negócios e moeda",
      "members": "Membros da equipe",
      "api": "Chaves de API"
    },
    "groups": {
      "account": "Conta",
      "workspace": "Espaço de trabalho"
    },
    "profile": {
      "title": "Seu perfil",
      "description": "Como você aparece no app. Seu avatar e nome aparecem no cabeçalho, na barra lateral e em todo lugar onde seus colegas veem você.",
      "changePhoto": "Alterar foto",
      "uploadPhoto": "Enviar foto",
      "remove": "Remover",
      "photoHint": "PNG, JPG, WebP ou GIF. Até 2 MB.",
      "unknownError": "Erro desconhecido",
      "displayName": "Nome de exibição",
      "email": "E-mail",
      "emailChangeHint": "Verifique as caixas de entrada de <bold>{oldEmail}</bold> e <bold>{newEmail}</bold> — ambas precisam confirmar antes que a alteração entre em vigor.",
      "accountDetails": "Detalhes da conta",
      "role": "Função",
      "joined": "Entrou em",
      "userId": "ID do usuário",
      "loading": "Carregando seu perfil…",
      "saving": "Salvando…",
      "saveChanges": "Salvar alterações",
      "unsupportedImage": "Tipo de imagem não suportado",
      "unsupportedImageDesc": "Use PNG, JPG, WebP ou GIF.",
      "imageTooLarge": "A imagem é muito grande",
      "imageTooLargeDesc": "Máximo de 2 MB.",
      "nameRequired": "O nome de exibição é obrigatório",
      "invalidEmail": "Informe um endereço de e-mail válido",
      "uploadFailed": "Falha no upload: {message}",
      "saveFailed": "Falha ao salvar: {message}",
      "profileSaved": "Perfil salvo",
      "emailChangeFailed": "Falha ao alterar o e-mail: {message}",
      "profileSavedEmailCheck": "Perfil salvo — verifique seu e-mail para confirmar a alteração do endereço",
      "passwordTitle": "Senha",
      "passwordDesc": "Use pelo menos {min} caracteres. Você continuará conectado neste dispositivo após alterá-la.",
      "currentPassword": "Senha atual",
      "newPassword": "Nova senha",
      "confirmPassword": "Confirmar nova senha",
      "updating": "Atualizando…",
      "updatePassword": "Atualizar senha",
      "cannotChangeNoEmail": "Não é possível alterar a senha sem um e-mail atual",
      "passwordTooShort": "A senha deve ter pelo menos {min} caracteres",
      "passwordMismatch": "A nova senha e a confirmação não coincidem",
      "currentPasswordIncorrect": "A senha atual está incorreta",
      "passwordUpdateFailed": "Falha ao atualizar a senha: {message}",
      "passwordUpdated": "Senha atualizada",
      "sessionsTitle": "Sessões ativas",
      "sessionsDesc": "Saia de todos os dispositivos em que você está conectado — incluindo este. Útil se você perdeu um notebook ou compartilhou sua senha.",
      "signOutAll": "Sair de todos os dispositivos",
      "signOutConfirmTitle": "Sair de todos os lugares?",
      "signOutConfirmDesc": "Todos os dispositivos conectados a esta conta serão desconectados e precisarão entrar novamente. Você será redirecionado para a página de login.",
      "cancel": "Cancelar",
      "signingOut": "Saindo…",
      "signOutEverywhere": "Sair de todos os lugares",
      "signOutFailed": "Falha ao sair: {message}",
      "avatarAlt": "Avatar",
      "fullNamePlaceholder": "Maria Souza"
    },
    "appearance": {
      "title": "Aparência",
      "description": "Defina o modo e a cor de destaque usados no app. Salvo neste dispositivo — experimente, a mudança é imediata.",
      "mode": "Modo",
      "colorMode": "Modo de cor",
      "useMode": "Usar o modo {mode}",
      "active": "Ativo",
      "accentColor": "Cor de destaque",
      "useTheme": "Usar o tema {name}",
      "themeId": "ID do tema: {id}"
    },
    "security": {
      "title": "Login e segurança",
      "description": "Altere sua senha e saia dos seus dispositivos. Isso mantém sua conta segura."
    },
    "browserNotifications": {
      "title": "Notificações do navegador",
      "description": "Receba um alerta na área de trabalho para cada nova mensagem de cliente, mesmo quando estiver em outra página. Salvo neste dispositivo.",
      "toggleLabel": "Avisar sobre novas mensagens de clientes",
      "toggleDesc": "Funciona apenas enquanto o app estiver aberto em uma aba do navegador.",
      "statusGranted": "Permitido pelo seu navegador.",
      "statusDefault": "Ao ativar, seu navegador pedirá permissão.",
      "statusDenied": "Bloqueado nas configurações do navegador",
      "deniedHint": "Permita notificações para este site nas configurações do site do seu navegador (geralmente o ícone de cadeado ao lado da barra de endereço) e recarregue a página.",
      "unsupported": "Este navegador não oferece suporte a notificações na área de trabalho.",
      "sendTest": "Enviar notificação de teste",
      "testTitle": "Notificação de teste",
      "testBody": "As notificações estão funcionando. Novas mensagens de clientes aparecerão assim.",
      "permissionDeniedToast": "Seu navegador bloqueou as notificações",
      "labels": {
        "fallbackTitle": "Nova mensagem",
        "image": "📷 Foto",
        "audio": "🎤 Mensagem de voz",
        "video": "🎬 Vídeo",
        "document": "📄 Documento",
        "location": "📍 Localização",
        "template": "📋 Modelo"
      }
    },
    "apiKeys": {
      "title": "Chaves de API",
      "description": "As chaves autenticam a API REST pública (<apiCode>/api/v1</apiCode>) para que você crie suas próprias automações. Envie-as como <headerCode>Authorization: Bearer &lt;key&gt;</headerCode>.",
      "newApiKey": "Nova chave de API",
      "noApiKeys": "Nenhuma chave de API ainda.",
      "createOneHint": "Clique em <bold>Nova chave de API</bold> para criar uma.",
      "askAdminHint": "Peça a um administrador para criar uma.",
      "revoked": "Revogada",
      "expired": "Expirada",
      "noScopes": "Sem escopos",
      "created": "Criada em {date}",
      "lastUsed": "último uso em {date}",
      "neverUsed": "nunca usada",
      "expires": "expira em {date}",
      "revoke": "Revogar",
      "revokeSuccess": "\"{name}\" revogada",
      "revokeFailed": "Falha ao revogar a chave",
      "loadFailed": "Falha ao carregar as chaves de API",
      "createError": "Falha ao criar a chave",
      "nameRequired": "Dê um nome à chave",
      "nameLabel": "Nome",
      "namePlaceholder": "ex.: Automação do Zapier",
      "scopesLabel": "Escopos",
      "scopesHint": "Uma chave sem escopos ainda pode chamar <code>GET /api/v1/me</code> para verificar se funciona.",
      "cancel": "Cancelar",
      "creating": "Criando…",
      "createKey": "Criar chave",
      "copyTitle": "Copie sua chave de API",
      "copyDesc": "Esta é a única vez em que a chave completa é exibida. Guarde-a em um lugar seguro — se perdê-la, revogue-a e crie outra.",
      "apiKeyLabel": "Chave de API",
      "copy": "Copiar",
      "copySuccess": "Chave de API copiada",
      "copyFailed": "Falha ao copiar — selecione e copie manualmente",
      "newKeyTitle": "Nova chave de API",
      "newKeyDesc": "Nomeie-a conforme a integração que vai usá-la e conceda apenas os escopos necessários.",
      "done": "Concluído",
      "networkError": "Não foi possível conectar ao servidor"
    },
    "deals": {
      "title": "Negócios e moeda",
      "description": "A moeda usada em novos negócios e nos totais do pipeline e do painel.",
      "defaultCurrency": "Moeda padrão",
      "defaultCurrencyDesc": "Novos negócios usam esta moeda por padrão, e os totais do pipeline e do painel são exibidos nela. Negócios existentes mantêm a moeda com que foram salvos.",
      "currencyLabel": "Moeda",
      "adminOnlyHint": "Somente administradores da conta podem alterar a moeda padrão.",
      "save": "Salvar",
      "saving": "Salvando...",
      "saveFailed": "Falha ao salvar a moeda padrão",
      "saveSuccess": "Moeda padrão atualizada"
    },
    "aiConfig": {
      "title": "Configuração do agente",
      "description": "Use sua própria chave da OpenAI, Anthropic ou de uma API compatível com OpenAI. O wacrm chama o provedor diretamente com sua chave — sem taxas de IA por assento, e seus dados continuam sob seu controle. Isso alimenta as respostas redigidas por IA, o bot de resposta automática e o Playground.",
      "adminOnlyConfig": "Somente administradores e proprietários podem alterar a configuração de IA.",
      "loadFailed": "Falha ao carregar a configuração de IA",
      "providerAndKey": "Provedor e chave",
      "encryptionNotice": "Sua chave é criptografada em repouso (AES-256-GCM) e nunca é exibida novamente depois de salva.",
      "provider": "Provedor",
      "model": "Modelo",
      "apiKey": "Chave de API",
      "testKey": "Testar chave",
      "testSuccess": "A chave funciona — o provedor respondeu.",
      "testRejected": "O provedor rejeitou a solicitação.",
      "testNetworkError": "Não foi possível conectar ao provedor.",
      "embeddingsKey": "Chave de embeddings",
      "optionalSemanticSearch": "(opcional — habilita a busca semântica na base de conhecimento)",
      "embeddingsHint": "Uma chave da OpenAI usada apenas para gerar embeddings da sua base de conhecimento (text-embedding-3-small){sameKeyText}. Deixe em branco para usar busca por palavras-chave. Apague-a para desativar a busca semântica.",
      "sameKeyText": " — pode ser a mesma chave acima",
      "behaviour": "Comportamento",
      "behaviourDesc": "Conte ao assistente sobre o seu negócio — produtos, tom, o que ele pode e não pode prometer. Este contexto alimenta tanto os rascunhos quanto as respostas automáticas.",
      "businessContext": "Contexto do negócio e instruções",
      "promptPlaceholder": "ex.: Somos a Acme, uma loja de equipamentos para café. Seja cordial e conciso. Nunca informe preços ou prazos de entrega — encaminhe para um humano nesses casos.",
      "enableAssistant": "Ativar assistente de IA",
      "enableAssistantDesc": "Interruptor geral. Ativa o botão “Redigir com IA” na caixa de entrada.",
      "autoReply": "Responder automaticamente a mensagens recebidas",
      "autoReplyDesc": "O bot responde automaticamente a novas mensagens recebidas (apenas quando nenhum fluxo as trata e nenhum agente está atribuído). Transfere para um humano quando não consegue ajudar.",
      "maxAutoReplies": "Máximo de respostas automáticas por conversa",
      "maxAutoRepliesDesc": "Após esta quantidade de respostas do bot em uma mesma conversa, o bot fica em silêncio.",
      "handoffTo": "Transferir para",
      "handoffToDesc": "Quando o bot não consegue ajudar — ou atinge o limite de respostas — ele pausa e encaminha a conversa para aqui, com uma breve nota do que aconteceu.",
      "handoffQueue": "Fila sem atribuição (qualquer agente pode assumir)",
      "remove": "Remover",
      "save": "Salvar",
      "missingModel": "Informe o nome de um modelo.",
      "missingApiKey": "Informe sua chave de API.",
      "saveSuccess": "Assistente de IA salvo.",
      "saveFailed": "Falha ao salvar.",
      "removeSuccess": "Configuração de IA removida.",
      "removeFailed": "Falha ao remover.",
      "providerOpenAiCompatible": "API compatível com OpenAI",
      "baseUrl": "URL base",
      "baseUrlHint": "URL base da API compatível com OpenAI, por exemplo https://api.groq.com/openai/v1. O caminho /chat/completions é adicionado automaticamente, a menos que você informe esse caminho.",
      "missingBaseUrl": "Informe a URL base da API compatível com OpenAI."
    },
    "aiKnowledge": {
      "loadFailed": "Falha ao carregar a base de conhecimento",
      "openFailed": "Falha ao abrir o documento",
      "titleContentRequired": "Título e conteúdo são obrigatórios.",
      "saveSuccessNew": "Documento adicionado.",
      "saveSuccessUpdate": "Documento atualizado.",
      "saveFailed": "Falha ao salvar.",
      "removeSuccess": "Documento removido.",
      "removeFailed": "Falha ao remover.",
      "reindexSuccess": "{count} documento(s) reindexado(s).",
      "reindexFailed": "Falha ao reindexar.",
      "title": "Base de conhecimento",
      "description": "Adicione FAQs, políticas ou detalhes de produtos. O assistente recupera os trechos relevantes ao redigir e responder automaticamente, para responder em vez de transferir.{searchType}",
      "semanticSearchOn": " A busca semântica está ativa (chave de embeddings definida).",
      "keywordSearchOn": " Usando busca por palavras-chave — adicione uma chave de embeddings acima para busca semântica.",
      "noDocs": "Nenhum documento ainda.",
      "editDocTitle": "Título",
      "editDocTitlePlaceholder": "ex.: Política de trocas e devoluções",
      "editDocContent": "Conteúdo",
      "editDocContentPlaceholder": "Cole a resposta da FAQ, o texto da política ou os detalhes do produto…",
      "cancel": "Cancelar",
      "saveDoc": "Salvar documento",
      "addDoc": "Adicionar documento",
      "reindex": "Reindexar",
      "reindexTooltip": "Gerar novamente os embeddings de todos os documentos (ex.: após adicionar uma chave de embeddings)",
      "editDoc": "Editar",
      "deleteDoc": "Excluir",
      "loading": "Carregando…"
    },
    "quickReplies": {
      "nameRequired": "Dê um nome à resposta rápida.",
      "saveError": "Não foi possível salvar a resposta rápida.",
      "updated": "Resposta rápida atualizada.",
      "created": "Resposta rápida criada.",
      "deleteConfirm": "Excluir esta resposta rápida?",
      "deleteError": "Não foi possível excluir a resposta rápida.",
      "title": "Respostas rápidas",
      "description": "Trechos reutilizáveis — texto simples ou uma mensagem interativa salva — que os agentes podem inserir pelo editor da caixa de entrada.",
      "new": "Nova resposta rápida",
      "edit": "Editar resposta rápida",
      "empty": "Nenhuma resposta rápida ainda. Crie uma para reutilizá-la nas conversas.",
      "nameLabel": "Nome",
      "namePlaceholder": "ex.: Horário de atendimento",
      "kindText": "Texto",
      "kindInteractive": "Interativa",
      "textPlaceholder": "O texto da mensagem a inserir",
      "cancel": "Cancelar",
      "save": "Salvar"
    }
  },
  "SignupPage": {
    "passwordsMismatch": "As senhas não coincidem",
    "passwordTooShort": "A senha deve ter pelo menos 6 caracteres",
    "checkEmailTitle": "Verifique seu e-mail",
    "checkEmailDesc": "Enviamos um link de confirmação para <strong>{email}</strong>. Verifique sua caixa de entrada e clique no link para confirmar sua conta.",
    "backToSignIn": "Voltar ao login",
    "titleJoin": "Criar conta e entrar na equipe",
    "title": "Criar conta",
    "descJoin": "Confirme seu e-mail e depois aceite o convite para entrar na sua equipe.",
    "desc": "Comece a usar o Modelo de CRM para WhatsApp",
    "fullNameLabel": "Nome completo",
    "fullNamePlaceholder": "João Silva",
    "emailLabel": "E-mail",
    "emailPlaceholder": "voce@exemplo.com",
    "passwordLabel": "Senha",
    "passwordPlaceholder": "Pelo menos 6 caracteres",
    "confirmPasswordLabel": "Confirmar senha",
    "confirmPasswordPlaceholder": "Repita sua senha",
    "creating": "Criando conta...",
    "submit": "Criar conta",
    "haveAccount": "Já tem uma conta?",
    "signIn": "Entrar"
  },
  "ForgotPasswordPage": {
    "checkEmailTitle": "Verifique seu e-mail",
    "checkEmailDesc": "Enviamos um link para redefinir a senha para <strong>{email}</strong>. Verifique sua caixa de entrada.",
    "backToSignIn": "Voltar ao login",
    "title": "Redefinir senha",
    "desc": "Informe seu e-mail e enviaremos um link de redefinição",
    "emailLabel": "E-mail",
    "emailPlaceholder": "voce@exemplo.com",
    "sending": "Enviando...",
    "sendLink": "Enviar link de redefinição"
  },
  "ResetPasswordPage": {
    "title": "Escolha uma nova senha",
    "desc": "Informe uma nova senha para a sua conta.",
    "passwordLabel": "Nova senha",
    "passwordPlaceholder": "Pelo menos 6 caracteres",
    "confirmPasswordLabel": "Confirmar nova senha",
    "confirmPasswordPlaceholder": "Repita a nova senha",
    "submit": "Atualizar senha",
    "saving": "Atualizando...",
    "passwordsMismatch": "As senhas não coincidem",
    "passwordTooShort": "A senha deve ter pelo menos 6 caracteres",
    "checking": "Verificando seu link...",
    "expiredTitle": "Este link não é mais válido",
    "expiredDesc": "Links de redefinição de senha funcionam uma vez e expiram em pouco tempo. Peça um novo e abra-o no mesmo navegador em que o solicitou.",
    "requestNewLink": "Pedir um novo link",
    "backToSignIn": "Voltar ao login",
    "successTitle": "Senha atualizada",
    "successDesc": "Você está conectado com a nova senha.",
    "continueToDashboard": "Ir para o painel"
  },
  "JoinPage": {
    "fail": {
      "notFoundTitle": "Convite não encontrado",
      "notFoundBody": "Este link não corresponde a um convite válido. Verifique a URL ou peça a quem convidou você para enviar um novo.",
      "usedTitle": "Convite já utilizado",
      "usedBody": "Este convite já foi aceito. Se não foi você, peça ao administrador da conta para enviar um novo link.",
      "expiredTitle": "Convite expirado",
      "expiredBody": "Este convite expirou. Peça ao administrador da conta para enviar um novo — leva apenas alguns segundos para gerar.",
      "serverErrorTitle": "Algo deu errado",
      "serverErrorBody": "Não conseguimos verificar este convite agora. Tente recarregar a página em instantes."
    },
    "conflictDefault": "Você já está em outra conta. Entre com um e-mail diferente para ingressar nesta.",
    "acceptFailed": "Falha ao aceitar o convite",
    "welcome": "Bem-vindo à equipe",
    "serverUnreachable": "Não foi possível conectar ao servidor",
    "signOutFailed": "Não foi possível sair. Tente recarregar a página.",
    "verifying": "Verificando convite…",
    "tryAgain": "Tentar novamente",
    "createNewAccount": "Criar uma nova conta em vez disso",
    "signIn": "Entrar",
    "invitedTo": "Você foi convidado para <account>{name}</account>",
    "joinAs": "Você entrará como <badge>{role}</badge>. Link válido até {date}.",
    "accepting": "Aceitando…",
    "acceptInvitation": "Aceitar convite",
    "acceptNote": "Ao aceitar, seu login passa para {name}. Sua conta pessoal vazia criada no cadastro será removida.",
    "conflictTitle": "Não é possível entrar em {name} com esta conta",
    "conflictBody": "Para entrar em <account>{name}</account>, saia e cadastre-se novamente com um endereço de e-mail diferente. O link do convite continua válido enquanto não expirar.",
    "staySignedIn": "Continuar conectado",
    "signingOut": "Saindo…",
    "signOutSwitch": "Sair e usar outro e-mail",
    "createAndJoin": "Criar conta e entrar na equipe",
    "haveAccount": "Já tenho uma conta"
  },
  "Notifications": {
    "title": "Notificações",
    "description": "As conversas que outros colegas atribuem a você aparecem aqui.",
    "markAllRead": "Marcar todas como lidas",
    "markReadFailed": "Falha ao marcar a notificação como lida",
    "markAllFailed": "Falha ao marcar todas como lidas",
    "retry": "Tentar novamente",
    "emptyTitle": "Nenhuma notificação ainda",
    "emptyDesc": "Você verá um alerta aqui quando alguém atribuir uma conversa a você.",
    "unread": "Não lidas"
  },
  "Agents": {
    "title": "Agentes de IA",
    "description": "Seu agente de IA com chave própria — configure-o e teste no playground antes que ele responda aos clientes na caixa de entrada.",
    "tabPlayground": "Playground",
    "tabSetup": "Configuração",
    "tabUsage": "Uso",
    "playground": {
      "title": "Playground",
      "subtitle": "— teste respostas como se você fosse um cliente",
      "reset": "Reiniciar",
      "emptyTitle": "Envie uma mensagem para ver como seu agente responderia.",
      "emptyDesc": "Ele usa sua base de conhecimento e se comporta exatamente como o bot de resposta automática — inclusive na transferência.",
      "goToSetup": "Ainda não configurou? Vá para Configuração",
      "handoff": "Aqui a conversa seria transferida para um humano",
      "thinking": "Pensando…",
      "placeholder": "Digite uma mensagem de cliente…",
      "notConfigured": "Nenhum agente configurado ainda — conclua a Configuração primeiro.",
      "noReply": "Não foi possível obter uma resposta.",
      "unreachable": "Não foi possível conectar ao agente."
    },
    "usage": {
      "title": "Uso de tokens",
      "description": "Tokens gastos com a chave do seu provedor por rascunhos e pelo bot de resposta automática. Apenas contagens — nenhum conteúdo de mensagem é armazenado aqui.",
      "window": "Últimos {days} dias",
      "loadFailed": "Falha ao carregar o uso",
      "empty": "Nenhum uso de IA nos últimos {days} dias ainda.",
      "emptyHint": "Isto é preenchido conforme o assistente redige e responde automaticamente.",
      "totalTokens": "Total de tokens",
      "llmCalls": "Chamadas ao LLM",
      "autoReply": "Resposta automática",
      "drafts": "Rascunhos",
      "tokens": "Tokens",
      "tokensPerDay": "Tokens por dia",
      "byModel": "Por modelo",
      "modelCalls": "{tokens} tok · {count, plural, =1 {# chamada} other {# chamadas}}",
      "partialWindow": "Exibindo uma janela parcial — o uso é alto o suficiente para que apenas os registros mais recentes sejam resumidos aqui."
    }
  },
  "Interactive": {
    "replyButtons": "Botões de resposta",
    "list": "Lista",
    "body": "Corpo",
    "bodyPlaceholder": "O que o cliente lê acima das opções",
    "header": "Cabeçalho (opcional)",
    "footer": "Rodapé (opcional)",
    "showIds": "Mostrar IDs de resposta (avançado)",
    "preview": "Pré-visualização",
    "previewBody": "Corpo da mensagem…",
    "previewButton": "Botão",
    "previewMenu": "Menu",
    "buttonsCount": "Botões ({count}/{max})",
    "idPlaceholder": "id",
    "buttonLabelPlaceholder": "Rótulo do botão",
    "addButton": "Adicionar botão",
    "listButtonLabel": "Rótulo do botão da lista",
    "rowsCount": "Linhas ({count}/{max})",
    "sectionTitlePlaceholder": "Título da seção (opcional)",
    "rowTitlePlaceholder": "Título da linha",
    "rowDescriptionPlaceholder": "Descrição (opcional)",
    "addRow": "Adicionar linha",
    "addSection": "Adicionar seção",
    "defaultListButton": "Menu"
  },
  "DashboardShell": {
    "loading": "Carregando..."
  },
  "UiPrimitives": {
    "close": "Fechar"
  },
  "GatedButton": {
    "readOnly": "Somente leitura — sua função não pode {action}",
    "reasons": {
      "createAutomations": "criar automações",
      "createBroadcasts": "criar disparos",
      "addOrImportContacts": "adicionar ou importar contatos",
      "deleteContacts": "excluir contatos",
      "createFlows": "criar fluxos",
      "createPipelines": "criar pipelines",
      "createDeals": "criar negócios",
      "sendMessages": "enviar mensagens"
    }
  },
  "Metadata": {
    "description": "Modelo de CRM para WhatsApp que você pode hospedar por conta própria."
  },
  "Currency": {
    "USD": "Dólar americano",
    "EUR": "Euro",
    "GBP": "Libra esterlina",
    "INR": "Rupia indiana",
    "AUD": "Dólar australiano",
    "CAD": "Dólar canadense",
    "BRL": "Real brasileiro",
    "JPY": "Iene japonês",
    "CNY": "Yuan chinês",
    "AED": "Dirham dos Emirados Árabes",
    "ZAR": "Rand sul-africano",
    "NGN": "Naira nigeriana",
    "SGD": "Dólar de Singapura",
    "MXN": "Peso mexicano",
    "COP": "Peso colombiano"
  },
  "TemplateStatus": {
    "DRAFT": "Rascunho",
    "PENDING": "Pendente",
    "APPROVED": "Aprovado",
    "REJECTED": "Rejeitado",
    "PAUSED": "Pausado",
    "DISABLED": "Desativado",
    "IN_APPEAL": "Em recurso",
    "PENDING_DELETION": "Exclusão pendente"
  },
  "StarterAutomations": {
    "welcome_message": {
      "name": "Mensagem de boas-vindas",
      "description": "Responda automaticamente a novos contatos com uma saudação.",
      "text": "Olá! 👋 Obrigado por entrar em contato. Responderemos em breve."
    },
    "out_of_office": {
      "name": "Fora do expediente",
      "description": "Responda automaticamente fora do horário para que ninguém fique esperando.",
      "text": "Obrigado pela sua mensagem! Nossa equipe está offline no momento (9h–18h) e responderá logo cedo amanhã."
    },
    "lead_qualifier": {
      "name": "Qualificador de leads",
      "description": "Faça perguntas de qualificação para filtrar leads recebidos.",
      "keywords": "preço,orçamento,comprar",
      "text": "Ótimo — será um prazer ajudar com os preços! Uma pergunta rápida: quantas licenças, aproximadamente, você precisa?"
    },
    "follow_up_reminder": {
      "name": "Lembrete de acompanhamento",
      "description": "Envie um lembrete se o contato não responder em 24 horas.",
      "text": "Passando para saber — ficou com mais alguma dúvida? Estamos à disposição!"
    }
  },
  "StarterFlows": {
    "welcome_menu": {
      "name": "Menu de boas-vindas",
      "description": "Cumprimente clientes que digitam uma palavra-chave e encaminhe-os ao agente certo conforme sejam novos ou já clientes.",
      "keywords": "suporte,ajuda,oi",
      "text": "Olá! 👋 Bem-vindo ao suporte. Você já é cliente ou é novo por aqui?",
      "footer": "Toque em um botão abaixo para continuar.",
      "existingButton": "Já sou cliente",
      "newButton": "Sou novo cliente",
      "existingNote": "Cliente existente precisa de ajuda — verifique o histórico da conta antes de responder.",
      "newNote": "Novo cliente — envie os preços + link de onboarding."
    },
    "faq_bot": {
      "name": "Bot de perguntas frequentes",
      "description": "Responda perguntas comuns automaticamente. O cliente escolhe um tópico em uma lista; o bot responde e encerra.",
      "keywords": "faq,dúvida,info",
      "text": "Como posso ajudar?",
      "buttonLabel": "Ver tópicos",
      "commonSection": "Perguntas frequentes",
      "hoursRow": "Horário de atendimento",
      "pricingRow": "Preços",
      "refundsRow": "Política de reembolso",
      "otherSection": "Outros",
      "humanRow": "Falar com um atendente",
      "hoursAnswer": "Atendemos de segunda a sexta, das 9h às 18h (horário local). Aos fins de semana, o suporte é limitado a casos urgentes.",
      "pricingAnswer": "Nossos preços começam em US$ 9/mês. Acesse https://example.com/pricing para ver todos os detalhes.",
      "refundsAnswer": "Reembolsos são aceitos em até 30 dias após a compra. Responda com o número do seu pedido e nós o processaremos.",
      "humanNote": "O cliente pediu para falar com um atendente pelo bot de perguntas frequentes."
    },
    "lead_capture": {
      "name": "Captura de leads",
      "description": "Cumprimente quem entra em contato pela primeira vez, colete nome + e-mail + empresa e transfira para vendas com as respostas na nota.",
      "intro": "Bem-vindo! 👋 Vou fazer algumas perguntas rápidas para direcionar você à pessoa certa.",
      "askName": "Qual é o seu nome?",
      "askEmail": "Obrigado, {name}! Qual é o seu e-mail profissional?",
      "askCompany": "Quase lá — qual é o nome da sua empresa?",
      "handoffNote": "Novo lead — nome={name}, e-mail={email}, empresa={company}."
    }
  },
  "LibErrors": {
    "upload": {
      "notSignedIn": "Você não está conectado.",
      "accountUnresolved": "Não foi possível identificar sua conta."
    },
    "media": {
      "noAttachment": "Esta mensagem não tem anexo."
    },
    "ai": {
      "timeout": "O provedor de IA demorou demais para responder.",
      "unreachable": "Não foi possível conectar ao provedor de IA: {message}",
      "emptyResponse": "{provider} retornou uma resposta vazia.",
      "compatBaseUrlRequired": "A URL base da API compatível com OpenAI é obrigatória.",
      "compatBaseUrlInvalid": "A URL base da API compatível com OpenAI deve ser uma URL válida.",
      "compatBaseUrlProtocol": "A URL base da API compatível com OpenAI deve usar http:// ou https://.",
      "compatBaseUrlHttpsRequired": "A URL base da API compatível com OpenAI deve usar https://, a menos que o host esteja listado em {envVar}.",
      "compatBaseUrlCredentials": "A URL base da API compatível com OpenAI não pode conter credenciais embutidas.",
      "compatBaseUrlQuery": "A URL base da API compatível com OpenAI não pode conter query string nem fragmento.",
      "compatBlockedUrl": "A URL do provedor compatível com OpenAI foi bloqueada pela política de URLs de saída do servidor. Para um host privado aprovado pelo operador, adicione-o a {envVar}.",
      "invalidKey": "{provider} rejeitou a chave de API",
      "rateLimited": "Limite de requisições de {provider} atingido",
      "apiError": "Erro na API de {provider} ({status})",
      "embeddingsMalformed": "A resposta de embeddings veio malformada.",
      "embeddingsMissingIndices": "A resposta de embeddings não trouxe os índices dos resultados.",
      "embeddingsMissingVector": "A resposta de embeddings está sem um vetor."
    },
    "tags": {
      "verifyFailed": "Não foi possível verificar a propriedade do contato e da tag",
      "contactNotFound": "Contato não encontrado",
      "tagNotFound": "Tag não encontrada",
      "addFailed": "Falha ao adicionar tag ao contato: {message}",
      "removeFailed": "Falha ao remover tag do contato: {message}"
    },
    "auth": {
      "unauthorized": "Não autorizado",
      "forbidden": "Acesso negado",
      "internal": "Erro interno do servidor",
      "loadContext": "Não foi possível carregar os dados da conta",
      "notLinked": "O perfil não está vinculado a uma conta",
      "requiresRole": "Esta ação requer a função {min} ou superior",
      "roleNames": {
        "owner": "Proprietário",
        "admin": "Administrador",
        "agent": "Agente",
        "viewer": "Visualizador"
      }
    },
    "rateLimitExceeded": "Limite de requisições excedido",
    "send": {
      "contactNotFound": "contato não encontrado nesta conta",
      "noWhatsAppAddress": "o contato não tem um endereço de WhatsApp utilizável (telefone: {phone})",
      "none": "nenhum",
      "notConfigured": "WhatsApp não configurado para esta conta",
      "dbInsertFailed": "enviado à Meta, mas a gravação no banco de dados falhou: {message}",
      "conversationLookupFailed": "falha ao buscar a conversa: {message}",
      "conversationNotFound": "conversa não encontrada nesta conta"
    },
    "engine": {
      "needsContact": "{step} precisa de um contato",
      "emptyText": "send_message está com o texto vazio",
      "needsTemplateName": "send_template precisa de template_name",
      "needsContactAndTag": "{step} precisa de contato + tag_id",
      "needsPipelineStage": "create_deal precisa de pipeline + etapa",
      "needsUrl": "send_webhook precisa de URL",
      "pausedWhileWaitingForReply": "automação pausada enquanto aguardava resposta",
      "noReplyWithin24h": "sem resposta em 24h",
      "parkForReplyFailed": "não foi possível aguardar a resposta: {message}",
      "destinationNotAllowed": "send_webhook: destino não permitido",
      "webhookStatus": "o webhook retornou {status}",
      "conversationNotInAccount": "a conversa não pertence a esta conta",
      "noContactForConversation": "não foi possível identificar a conversa: sem contato",
      "noConversation": "não é possível enviar: o contato não tem uma conversa existente",
      "tagAddedNoConversation": "a automação tag_added não pode enviar: o contato não tem uma conversa existente"
    }
  },
  "Validation": {
    "flows": {
      "nameRequired": "O nome do fluxo é obrigatório.",
      "entryRequired": "Escolha um nó de entrada antes de ativar.",
      "needsNode": "Um fluxo precisa de pelo menos um nó antes da ativação.",
      "entryMissing": "O nó de entrada \"{id}\" não existe.",
      "duplicateNodeKey": "node_key duplicado: \"{key}\".",
      "unreachable": "O nó \"{key}\" não pode ser alcançado a partir do nó de entrada.",
      "keywordsRequired": "Gatilhos por palavra-chave precisam de pelo menos uma palavra-chave.",
      "blankKeywords": "{count} {count, plural, =1 {palavra-chave está em branco} other {palavras-chave estão em branco}} — elas não vão corresponder a nada.",
      "startNeedsNext": "O nó Início precisa apontar para um próximo nó.",
      "startMissingNext": "O nó Início aponta para um nó inexistente: \"{key}\".",
      "sendMessageNeedsText": "O nó Enviar mensagem precisa de um texto.",
      "sendMessageNeedsNext": "O nó Enviar mensagem precisa apontar para um próximo nó.",
      "sendMessageMissingNext": "O nó Enviar mensagem aponta para um nó inexistente: \"{key}\".",
      "sendMediaNeedsType": "O nó Enviar mídia precisa de um tipo de mídia (imagem, vídeo ou documento).",
      "sendMediaNeedsFile": "O nó Enviar mídia precisa de um arquivo (envie um antes de ativar).",
      "captionTooLong": "A legenda excede {max} caracteres (limite do WhatsApp).",
      "sendMediaNeedsNext": "O nó Enviar mídia precisa apontar para um próximo nó.",
      "sendMediaMissingNext": "O nó Enviar mídia aponta para um nó inexistente: \"{key}\".",
      "sendButtonsNeedsText": "O nó Enviar botões precisa de um texto.",
      "sendButtonsNeedsButton": "O nó Enviar botões precisa de pelo menos um botão.",
      "tooManyButtons": "O WhatsApp permite no máximo {max} botões por mensagem.",
      "buttonNeedsReplyId": "O botão {n} precisa de um ID de resposta.",
      "duplicateButtonReplyId": "ID de resposta de botão duplicado: \"{id}\".",
      "buttonNeedsTitle": "O botão {n} precisa de um título.",
      "buttonTitleTooLong": "O título do botão {n} tem mais de {max} caracteres (limite do WhatsApp).",
      "buttonNeedsNext": "O botão {n} precisa de um próximo nó.",
      "buttonMissingNext": "O botão {n} aponta para um nó inexistente: \"{key}\".",
      "sendListNeedsText": "O nó Enviar lista precisa de um texto.",
      "sendListNeedsLabel": "O nó Enviar lista precisa de um rótulo de botão (o texto que abre a lista).",
      "sendListNeedsRow": "O nó Enviar lista precisa de pelo menos uma linha.",
      "tooManyRows": "O nó Enviar lista permite no máximo {max} linhas no total entre as seções.",
      "rowNeedsReplyId": "A linha {row} da seção {section} precisa de um ID de resposta.",
      "duplicateRowId": "ID de linha da lista duplicado: \"{id}\".",
      "rowNeedsTitle": "A linha {n} precisa de um título.",
      "rowTitleTooLong": "O título da linha {n} excede {max} caracteres.",
      "rowDescriptionTooLong": "A descrição da linha {n} excede {max} caracteres.",
      "rowNeedsNext": "A linha {n} precisa de um próximo nó.",
      "rowMissingNext": "A linha {n} aponta para um nó inexistente: \"{key}\".",
      "collectNeedsPrompt": "O nó Coletar resposta precisa de uma pergunta para enviar ao cliente.",
      "collectNeedsVarKey": "O nó Coletar resposta precisa de uma var_key para guardar a resposta.",
      "invalidVarKey": "A var_key \"{key}\" deve conter apenas letras, números e sublinhado, e começar com uma letra ou sublinhado.",
      "collectNeedsNext": "O nó Coletar resposta precisa apontar para um próximo nó.",
      "collectMissingNext": "O nó Coletar resposta aponta para um nó inexistente: \"{key}\".",
      "conditionNeedsSubject": "A condição precisa de um assunto (var / tag / contact_field).",
      "conditionNeedsSubjectKey": "A condição precisa de uma subject_key (nome da variável, ID da tag ou nome do campo).",
      "conditionNeedsOperator": "A condição precisa de um operador.",
      "operatorNeedsValue": "O operador \"{operator}\" normalmente espera um valor de comparação — um valor vazio só vai corresponder a assuntos vazios.",
      "conditionNeedsBranch": "A condição precisa de um nó para o ramo \"{branch}\".",
      "conditionMissingBranch": "O ramo \"{branch}\" da condição aponta para um nó inexistente: \"{key}\".",
      "setTagNeedsMode": "O nó Marcar contato precisa de um modo (adicionar ou remover).",
      "setTagNeedsTag": "O nó Marcar contato precisa de uma tag para aplicar.",
      "setTagNeedsNext": "O nó Marcar contato precisa apontar para um próximo nó.",
      "setTagMissingNext": "O nó Marcar contato aponta para um nó inexistente: \"{key}\".",
      "unknownNodeType": "Tipo de nó desconhecido: \"{type}\"."
    },
    "automations": {
      "needsStep": "automações ativas precisam de pelo menos uma etapa",
      "messageTextRequired": "o texto da mensagem é obrigatório",
      "templateNameRequired": "o nome do modelo é obrigatório",
      "tagRequired": "a tag é obrigatória",
      "agentRequired": "o agente é obrigatório quando o modo é \"specific\"",
      "fieldNameRequired": "o nome do campo é obrigatório",
      "fieldValueRequired": "o valor do campo é obrigatório",
      "pipelineRequired": "o pipeline é obrigatório",
      "stageRequired": "a etapa é obrigatória",
      "titleRequired": "o título é obrigatório",
      "waitAmountInvalid": "o tempo de espera deve ser maior que 0",
      "waitUnitInvalid": "a unidade de espera deve ser minutos, horas ou dias",
      "conditionSubjectRequired": "o assunto da condição é obrigatório",
      "conditionOperandRequired": "o operando da condição é obrigatório",
      "webhookUrlRequired": "a URL do webhook é obrigatória",
      "webhookUrlScheme": "a URL do webhook deve usar http ou https",
      "webhookUrlInvalid": "a URL do webhook não é uma URL válida",
      "unknownStepType": "tipo de etapa desconhecido: {type}",
      "keywordRequired": "é necessária pelo menos uma palavra-chave",
      "keywordsEmpty": "as palavras-chave não podem ser vazias",
      "matchTypeInvalid": "o tipo de correspondência deve ser \"exact\", \"contains\" ou \"word\"",
      "scheduleRequired": "o agendamento é obrigatório",
      "replyIdRequired": "é necessário pelo menos um ID de resposta",
      "replyIdsEmpty": "os IDs de resposta não podem ser vazios"
    },
    "templates": {
      "nameRequired": "O nome do modelo é obrigatório.",
      "nameInvalid": "O nome do modelo deve usar apenas letras minúsculas, dígitos e sublinhados (1-512 caracteres).",
      "bodyNotContiguous": "As variáveis do corpo devem ser sequenciais começando em {first} — encontradas: {found}.",
      "bodyRequired": "O texto do corpo é obrigatório.",
      "bodyTooLong": "O texto do corpo excede {max} caracteres (tem {got}).",
      "footerTooLong": "O texto do rodapé excede {max} caracteres (tem {got}).",
      "footerNoVariables": "O texto do rodapé não pode conter variáveis {placeholder} (regra da Meta).",
      "headerTextRequired": "O cabeçalho de texto exige header_content.",
      "headerTextTooLong": "O texto do cabeçalho excede {max} caracteres (tem {got}).",
      "headerTooManyVariables": "O cabeçalho de texto aceita no máximo uma variável — encontradas {count} (regra da Meta).",
      "headerVariableMustBeFirst": "A variável do cabeçalho de texto deve ser {var} (regra da Meta).",
      "mediaHeaderRequiresSource": "O cabeçalho {type} exige uma URL pública de exemplo (header_media_url) ou um handle de Resumable Upload (header_handle).",
      "headerMediaUrlScheme": "header_media_url deve usar o esquema http(s).",
      "headerMediaUrlInvalid": "header_media_url deve ser uma URL válida.",
      "tooManyButtons": "Modelos podem ter no máximo {max} botões (tem {got}).",
      "tooManyUrlButtons": "São permitidos no máximo {max} botões URL (tem {got}).",
      "tooManyPhoneButtons": "É permitido no máximo {max} botão PHONE_NUMBER (tem {got}).",
      "tooManyCopyCodeButtons": "É permitido no máximo {max} botão COPY_CODE (tem {got}).",
      "quickReplyInterleaved": "Botões QUICK_REPLY não podem ser intercalados com botões URL / PHONE_NUMBER / COPY_CODE — agrupe-os no início.",
      "buttonMissingText": "O botão #{n} ({type}) está sem texto.",
      "buttonTextTooLong": "O texto do botão #{n} excede {max} caracteres.",
      "urlButtonMissingUrl": "O botão URL #{n} está sem url.",
      "urlButtonInvalidUrl": "O botão URL #{n} tem uma url inválida.",
      "urlButtonTooManyVariables": "O botão URL #{n} pode ter no máximo uma variável (regra da Meta).",
      "urlButtonVariableMustBeFirst": "A variável do botão URL #{n} deve ser {var} (regra da Meta).",
      "urlButtonNeedsExample": "O botão URL #{n} usa {var} — a Meta exige um valor de exemplo.",
      "phoneButtonMissingNumber": "O botão PHONE_NUMBER #{n} está sem phone_number.",
      "copyCodeButtonMissingExample": "O botão COPY_CODE #{n} está sem valor de exemplo.",
      "bodySampleCountMismatch": "O corpo tem {count} variável(is) — informe exatamente {count} valor(es) de exemplo (recebidos: {got}).",
      "headerSampleCountMismatch": "O cabeçalho tem {count} variável(is) — informe exatamente {count} valor(es) de exemplo (recebidos: {got}).",
      "bodySampleEmpty": "O valor de exemplo #{n} do corpo está vazio.",
      "headerSampleEmpty": "O valor de exemplo #{n} do cabeçalho está vazio.",
      "languageRequired": "O idioma é obrigatório.",
      "metaAppIdRequired": "Modelos com cabeçalho de mídia precisam de META_APP_ID configurado (usado no Resumable Upload da Meta). Adicione-o ao seu ambiente ou remova o cabeçalho de mídia.",
      "headerUrlUnreachable": "Não foi possível buscar a URL da mídia do cabeçalho. Verifique se ela está acessível publicamente.",
      "headerUrlStatus": "A URL do cabeçalho {kind} retornou {status}. Ela precisa estar acessível publicamente.",
      "headerWrongType": "O cabeçalho {kind} deve ser {formats} (recebido: {contentType}).",
      "headerEmpty": "O cabeçalho {kind} está vazio.",
      "headerTooLarge": "O cabeçalho {kind} tem {size} MB — o limite da Meta é {max} MB.",
      "headerTextValueRequired": "A variável {var} do cabeçalho de texto exige um valor — informe headerText.",
      "mediaHeaderSendSource": "O cabeçalho {type} exige um link ou id de mídia no envio — defina header_media_url no modelo ou informe headerMediaUrl/headerMediaId.",
      "bodyValuesMissing": "O corpo tem {count} variável(is), mas apenas {got} valor(es) foram informados.",
      "urlButtonParamRequired": "O botão URL #{n} usa {var} — exige um valor em buttonParams[{index}]."
    },
    "interactive": {
      "buttonCount": "A mensagem interativa com botões exige de 1 a {max} botões (tem {got}).",
      "buttonMissingId": "Botão interativo sem id.",
      "duplicateButtonId": "A mensagem interativa tem um id de botão duplicado: \"{id}\".",
      "buttonMissingTitle": "O botão interativo \"{id}\" está sem título.",
      "buttonTitleTooLong": "O título do botão interativo \"{title}\" excede {max} caracteres.",
      "listRequiresButtonLabel": "A lista interativa exige um buttonLabel.",
      "listButtonLabelTooLong": "O buttonLabel \"{label}\" da lista interativa excede {max} caracteres.",
      "listSectionCount": "A lista interativa exige de 1 a {max} seções (tem {got}).",
      "listRowCount": "A lista interativa exige de 1 a {max} linhas no total em todas as seções (tem {got}).",
      "listRowMissingId": "Linha da lista interativa sem id.",
      "duplicateRowId": "A lista interativa tem um id de linha duplicado: \"{id}\".",
      "listRowMissingTitle": "A linha \"{id}\" da lista interativa está sem título.",
      "listRowTitleTooLong": "O título da linha \"{title}\" da lista interativa excede {max} caracteres.",
      "listRowDescriptionTooLong": "A descrição da linha \"{id}\" da lista interativa excede {max} caracteres.",
      "bodyRequired": "A mensagem interativa exige bodyText.",
      "bodyTooLong": "O bodyText interativo excede {max} caracteres.",
      "headerTooLong": "O headerText interativo excede {max} caracteres.",
      "footerTooLong": "O footerText interativo excede {max} caracteres."
    }
  },
  "Api": {
    "common": {
      "notFound": "Não encontrado",
      "invalidJson": "JSON inválido",
      "unauthorized": "Não autorizado",
      "internalServerError": "Erro interno do servidor",
      "profileNotLinked": "Seu perfil não está vinculado a uma conta.",
      "conversationNotFound": "Conversa não encontrada",
      "failedToLoadConversation": "Falha ao carregar a conversa",
      "whatsappNotConfigured": "WhatsApp não configurado",
      "whatsappNotConfiguredDot": "WhatsApp não configurado.",
      "whatsappNotConfiguredSetup": "WhatsApp não configurado. Configure sua integração com o WhatsApp primeiro.",
      "whatsappNotConfiguredConnect": "WhatsApp não configurado. Conecte sua conta do WhatsApp Business em Configurações primeiro.",
      "wabaIdMissing": "ID do WABA (WhatsApp Business Account) ausente. Reconecte sua conta em Configurações.",
      "unknownError": "Erro desconhecido",
      "invalidRequestBody": "Corpo da requisição inválido",
      "titleEmpty": "O título não pode ficar vazio",
      "insertFailed": "falha ao inserir"
    },
    "account": {
      "apiKeys": {
        "revokeFailed": "Falha ao revogar a chave de API",
        "notFoundOrRevoked": "Chave de API não encontrada ou já revogada",
        "loadFailed": "Falha ao carregar as chaves de API",
        "nameRequired": "O nome é obrigatório",
        "nameTooLong": "O nome deve ter no máximo {max} caracteres",
        "scopesInvalid": "Os escopos devem ser uma lista de escopos válidos",
        "createFailed": "Falha ao criar a chave de API"
      },
      "invitations": {
        "revokeFailed": "Falha ao revogar o convite",
        "notFound": "Convite não encontrado",
        "loadFailed": "Falha ao carregar os convites",
        "roleInvalid": "A função deve ser admin, agent ou viewer",
        "labelTooLong": "O rótulo deve ter no máximo {max} caracteres",
        "createFailed": "Falha ao criar o convite"
      },
      "members": {
        "loadFailed": "Falha ao carregar os membros",
        "updateFailed": "Falha ao atualizar o membro",
        "roleInvalid": "A função deve ser owner, admin, agent ou viewer",
        "useTransferOwnership": "Use POST /api/account/transfer-ownership para promover um membro a proprietário"
      },
      "nameMustBeString": "O nome deve ser um texto",
      "nameEmpty": "O nome da conta não pode ficar vazio",
      "nameTooLong": "O nome da conta deve ter no máximo {max} caracteres",
      "updateFailed": "Falha ao atualizar a conta",
      "transferFailed": "Falha ao transferir a propriedade",
      "newOwnerInvalid": "newOwnerUserId deve ser um UUID válido"
    },
    "invitations": {
      "redeemFailed": "Falha ao aceitar o convite",
      "missingToken": "Token de convite ausente"
    },
    "ai": {
      "pausedRequired": "paused (booleano) é obrigatório",
      "updateConversationFailed": "Falha ao atualizar a conversa",
      "loadConfigFailed": "Falha ao carregar a configuração de IA",
      "providerInvalid": "O provedor deve ser \"openai\", \"anthropic\" ou \"openai_compatible\"",
      "baseUrlRequired": "base_url é obrigatório para openai_compatible",
      "baseUrlInvalid": "base_url deve ser uma URL http(s) válida",
      "modelRequired": "O modelo é obrigatório",
      "handoffNotMember": "O agente de transferência (handoff_agent_id) deve ser membro desta conta",
      "storedKeyReenter": "Não foi possível descriptografar a chave de API salva — informe sua chave novamente.",
      "apiKeyRequired": "A chave de API é obrigatória",
      "validateWithProviderFailed": "Não foi possível validar a chave de API com o provedor.",
      "embeddingsKeyError": "Chave de embeddings: {message}",
      "validateEmbeddingsFailed": "Não foi possível validar a chave de embeddings.",
      "saveConfigFailed": "Falha ao salvar a configuração de IA",
      "deleteConfigFailed": "Falha ao excluir a configuração de IA",
      "conversationIdRequired": "conversation_id é obrigatório",
      "storedKeyUndecryptable": "Não foi possível descriptografar a chave de API salva.",
      "notConfigured": "O assistente de IA não está configurado. Ative-o em Configurações → Assistente de IA.",
      "noMessages": "Ainda não há mensagens para gerar um rascunho.",
      "messagesRequired": "messages é obrigatório",
      "sendMessageToTest": "Envie uma mensagem para testar o agente.",
      "noAgentConfigured": "Nenhum agente configurado ainda. Adicione a chave do seu provedor em Configuração.",
      "enterApiKey": "Informe uma chave de API para testar.",
      "validateFailed": "Não foi possível validar a chave de API.",
      "loadUsageFailed": "Falha ao carregar o uso",
      "knowledge": {
        "loadDocFailed": "Falha ao carregar o documento",
        "nothingToUpdate": "Nada para atualizar",
        "contentEmpty": "O conteúdo não pode ficar vazio",
        "updateDocFailed": "Falha ao atualizar o documento",
        "indexingFailed": "falha na indexação",
        "updatedIndexFailed": "Atualizado, mas a indexação semântica falhou ({message}). A busca por palavras-chave continua funcionando; use Reindexar para tentar novamente.",
        "updatedKeywordOnly": "Atualizado apenas com busca por palavras-chave — não foi possível descriptografar sua chave de embeddings (verifique a ENCRYPTION_KEY e informe a chave novamente).",
        "deleteDocFailed": "Falha ao excluir o documento",
        "loadDocsFailed": "Falha ao carregar os documentos",
        "reindexKeyCorrupt": "Não foi possível descriptografar sua chave de embeddings (verifique a ENCRYPTION_KEY e informe a chave novamente em Configurações → Assistente de IA). Nada foi reindexado.",
        "reindexPartial": "{reindexed} reindexado(s), depois ocorreu um erro: {message}",
        "loadKbFailed": "Falha ao carregar a base de conhecimento",
        "titleContentRequired": "Título e conteúdo são obrigatórios",
        "saveDocFailed": "Falha ao salvar o documento",
        "savedIndexFailed": "Salvo, mas a indexação semântica falhou ({message}). A busca por palavras-chave continua funcionando; use Reindexar para tentar novamente.",
        "savedKeywordOnly": "Salvo apenas com busca por palavras-chave — não foi possível descriptografar sua chave de embeddings (verifique a ENCRYPTION_KEY e informe a chave novamente)."
      }
    },
    "automations": {
      "copyName": "{name} (Cópia)",
      "copyFailed": "falha ao duplicar",
      "invalidActiveConfig": "Não é possível manter a automação ativa com configuração inválida",
      "invalidActivateConfig": "Não é possível ativar a automação com configuração inválida",
      "nameTriggerRequired": "Nome e gatilho são obrigatórios"
    },
    "contacts": {
      "tagIdRequired": "tag_id é obrigatório"
    },
    "flows": {
      "statusInvalid": "O status deve ser 'draft', 'active' ou 'archived'",
      "cannotActivate": "Não é possível ativar o fluxo — corrija os problemas abaixo primeiro.",
      "nameEmpty": "O nome não pode ficar vazio",
      "unknownTemplate": "Modelo de fluxo desconhecido \"{slug}\"",
      "insertFailed": "falha ao criar o fluxo",
      "nameRequired": "O nome é obrigatório"
    },
    "quickReplies": {
      "kindInvalid": "O tipo deve ser \"text\" ou \"interactive\"",
      "contentTextRequired": "O texto é obrigatório para respostas rápidas de texto",
      "titleRequired": "O título é obrigatório"
    },
    "broadcast": {
      "alreadyRunning": "Já há um envio em andamento para este disparo. Aguarde a conclusão antes de retomar novamente.",
      "recipientsRequired": "Informe `recipients` (preferencial) ou `phone_numbers` — deve ser uma lista não vazia",
      "templateNameRequired": "O nome do modelo é obrigatório",
      "templateMalformed": "O registro local do modelo está corrompido — use \"Sincronizar da Meta\" em Configurações para corrigi-lo antes de disparar.",
      "invalidPhoneFormat": "Formato de número de telefone inválido"
    },
    "whatsappConfig": {
      "fetchFailed": "Falha ao buscar a configuração",
      "noConfig": "Nenhuma configuração do WhatsApp salva ainda. Preencha o formulário e clique em Salvar configuração.",
      "tokenCorrupted": "O token de acesso salvo não pode ser descriptografado com a ENCRYPTION_KEY atual. Isso geralmente significa que a chave mudou ou é diferente entre ambientes (local vs Hostinger vs Vercel). Clique em \"Redefinir configuração\" abaixo e salve novamente.",
      "credentialsRequired": "access_token e phone_number_id são obrigatórios",
      "phoneIdDigits": "O Phone Number ID deve conter apenas dígitos — é o ID numérico exibido em Meta → WhatsApp → API Setup, não o número de telefone em si.",
      "wabaIdDigits": "O WhatsApp Business Account ID deve conter apenas dígitos — copie-o de Meta → WhatsApp → API Setup.",
      "pinDigits": "O PIN deve ter exatamente 6 dígitos.",
      "validateFailed": "Falha ao validar a configuração",
      "numberLinkedElsewhere": "Este número do WhatsApp já está vinculado a outra conta nesta instância. Cada número de telefone só pode ser conectado a um usuário do wacrm.",
      "encryptFailed": "Falha ao criptografar o token. Verifique se a ENCRYPTION_KEY é uma string hexadecimal válida de 64 caracteres nas suas variáveis de ambiente.",
      "updateFailed": "Falha ao atualizar a configuração",
      "saveFailed": "Falha ao salvar a configuração",
      "deleteFailed": "Falha ao excluir a configuração",
      "noConfigShort": "Nenhuma configuração do WhatsApp salva ainda.",
      "tokenUndecryptable": "Não é possível descriptografar o token de acesso salvo — provavelmente a ENCRYPTION_KEY mudou. Informe o token novamente para corrigir.",
      "phoneCheckFailed": "Falha na verificação dos dados do número: {message}",
      "wabaNoApps": "O WABA não tem apps inscritos. Salve a configuração novamente para inscrevê-lo.",
      "wabaCheckFailed": "Falha na verificação da inscrição do WABA: {message}",
      "noWabaId": "Nenhum WABA ID registrado — os webhooks não podem ser conectados sem ele. Adicione-o no formulário e salve novamente."
    },
    "media": {
      "idRequired": "O ID da mídia é obrigatório",
      "fetchFailed": "Falha ao buscar a mídia"
    },
    "react": {
      "idEmojiRequired": "message_id e emoji são obrigatórios",
      "messageNotFound": "Mensagem não encontrada",
      "notSent": "Não é possível reagir a uma mensagem que não foi enviada ao WhatsApp",
      "contactNoPhone": "O contato não tem número de telefone nem ID de usuário do WhatsApp",
      "unknownMetaError": "Erro desconhecido da API da Meta",
      "metaError": "Erro da API da Meta: {message}",
      "dbDeleteFailed": "Reação enviada à Meta, mas falhou ao removê-la do banco de dados",
      "dbUpsertFailed": "Reação enviada à Meta, mas falhou ao salvá-la no banco de dados"
    },
    "send": {
      "idsRequired": "É necessário informar conversation_id ou contact_id, além de message_type",
      "contactNotFound": "Contato não encontrado",
      "openConversationFailed": "Falha ao abrir uma conversa com este contato"
    },
    "templates": {
      "invalidId": "ID de modelo inválido.",
      "invalidJsonBody": "Corpo JSON inválido.",
      "notFound": "Modelo não encontrado.",
      "neverSubmitted": "Este modelo nunca foi enviado à Meta — use Novo modelo para enviá-lo.",
      "statusNotEditable": "Modelos com status {status} não podem ser editados. Permitidos: APPROVED, REJECTED, PAUSED.",
      "authNotEditable": "Modelos de AUTENTICAÇÃO não podem ser editados aqui — gerencie-os no Gerenciador do WhatsApp da Meta.",
      "validationFailed": "Falha na validação.",
      "headerUploadFailed": "Falha ao enviar a mídia do cabeçalho.",
      "metaEditFailed": "Falha ao editar na Meta.",
      "editedSaveFailed": "Editado na Meta, mas falhou ao salvar localmente: {message}. Use \"Sincronizar da Meta\" para recuperar.",
      "editFailed": "Falha ao editar o modelo.",
      "notConfiguredDelete": "WhatsApp não configurado — não é possível excluir na Meta.",
      "metaDeleteFailed": "Falha ao excluir na Meta.",
      "deletedLocalFailed": "Excluído na Meta, mas falhou ao excluir localmente: {message}.",
      "deleteFailed": "Falha ao excluir o modelo.",
      "authNotSupported": "Modelos de AUTENTICAÇÃO ainda não são suportados aqui — crie-os no Gerenciador do WhatsApp da Meta e use \"Sincronizar da Meta\".",
      "metaSubmitFailed": "Falha ao enviar à Meta.",
      "rateLimit": "Limite de requisições da Meta atingido (100 criações de modelo por hora). Tente novamente mais tarde.",
      "submittedSaveFailed": "Enviado à Meta, mas falhou ao salvar localmente: {message}. Use \"Sincronizar da Meta\" para recuperar.",
      "submitFailed": "Falha ao enviar o modelo.",
      "metaApiStatus": "Erro da API da Meta: {status}",
      "syncFailed": "Falha ao sincronizar os modelos"
    }
  }
}
