import type { TranslationDictionary } from '@/types/i18n.types';

export const pt: TranslationDictionary = {
  common: {
    save: 'Salvar',
    cancel: 'Cancelar',
    delete: 'Excluir',
    edit: 'Editar',
    create: 'Criar',
    search: 'Pesquisar',
    filter: 'Filtrar',
    loading: 'Carregando...',
    noResults: 'Nenhum resultado encontrado',
    confirm: 'Confirmar',
    back: 'Voltar',
    next: 'Próximo',
    previous: 'Anterior',
    close: 'Fechar',
    retry: 'Tentar novamente',
    error: 'Erro',
    success: 'Sucesso',
    warning: 'Aviso',
    info: 'Informação',
    healthy: 'Saudável',
    degraded: 'Degradado',
    unhealthy: 'Indisponível',
    up: 'Ativo',
    down: 'Inativo',
    responseTime: 'Tempo de resposta',
    unknown: 'Desconhecido',
    operational: 'Operacional',
    notAvailable: 'N/D',
    yes: 'Sim',
    no: 'Não',
    never: 'Nunca',
    accessDenied: 'Você não tem permissão para acessar esta página.',
    brandName: 'Claw',
    brandVersion: 'Claw v{version}',
    select: 'Selecionar',
    download: 'Baixar',
    noDataAvailable: 'Nenhum dado disponível',
    showingPage: 'Exibindo página {page} de {total}',
  },
  auth: {
    login: 'Entrar',
    logout: 'Sair',
    email: 'E-mail',
    password: 'Senha',
    loginTitle: 'Entrar no Claw',
    loginSubtitle: 'Insira suas credenciais para continuar',
    loginButton: 'Entrar',
    logoutButton: 'Sair',
    sessionExpired: 'Sua sessão expirou. Faça login novamente.',
    invalidCredentials: 'E-mail ou senha inválidos',
    welcomeTitle: 'Bem-vindo ao Claw',
    welcomeSubtitle: 'Plataforma de Orquestração de IA',
    passwordPlaceholder: 'Digite sua senha',
    signingIn: 'Entrando...',
    loginFailed: 'Falha no login. Tente novamente.',
    tagline: 'Claw — Orquestração de IA local-first',
    authenticating: 'Autenticando...',
    emailPlaceholder: 'you@example.com',
  },
  nav: {
    dashboard: 'Painel',
    chat: 'Chat',
    compareModels: 'Comparar Modelos',
    consensusMode: 'Modo Consenso',
    escalationChain: 'Cadeia de Escalonamento',
    repairLab: 'Lab. de Reparo',
    decomposeLab: 'Decompositor de Tarefas',
    bestOfNLab: 'Geração Best-of-N',
    verifierLab: 'Verificador',
    pipelineLab: 'Lab. de Pipeline',
    costEnsemble: 'Conjunto por Custo',
    rolePackLab: 'Pacote de Funções',
    connectors: 'Conectores',
    models: 'Modelos',
    modelCatalog: 'Catálogo de Modelos',
    modelLocalFrontier: 'Modelos Frontier',
    localModels: 'Modelos Locais',
    routing: 'Roteamento',
    replayLab: 'Lab. de Replay',
    recoveryLab: 'Motor de Recuperação',
    adaptiveInsights: 'Insights Adaptativos',
    memory: 'Memória',
    context: 'Pacotes de Contexto',
    files: 'Arquivos',
    observability: 'Observabilidade',
    audits: 'Logs de Auditoria',
    logs: 'Registros',
    admin: 'Administração',
    settings: 'Configurações',
    workspace: 'Área de Trabalho',
    workspaceActions: 'Ações',
    workspaceApprovals: 'Aprovações',
    workspaceSyncHealth: 'Saúde da Sincronização',
    agent: 'Agente',
    agentTerminal: 'Terminal',
    agentRepos: 'Repositórios',
    agentCapabilities: 'Capacidades',
    agentActivity: 'Atividade',
    agentRecipes: 'Receitas',
    agentMarketplace: 'Mercado',
    agentActivityMemory: 'Memória de Atividade',
    discovery: 'Descoberta de Modelos',
    workspaceProviders: 'Provedores',
    workspaceAppConfigs: 'Configurações de App',
    workspaceGmail: 'Gmail',
    workspaceJira: 'Jira',
    workspaceSourceControl: 'Controlo de versão',
    workspaceSlack: 'Slack',
    workspaceDocs: 'Documentos',
    workspaceConfluence: 'Confluence',
    workspaceFigma: 'Figma',
    workspaceWorkflows: 'Fluxos de trabalho',
    researchProviders: 'Provedores de Pesquisa',
    researchRuns: 'Execuções de Pesquisa',
    research: 'Pesquisa',
    workspaceInbox: 'Caixa de entrada',
    workspaceSemanticSearch: 'Busca semântica',
    workspaceDigest: 'Resumo',
    workspaceAutomationPreferences: 'Preferências de automação',
    workspaceEmailSignatures: 'Assinaturas de e-mail',
    workspaceEmailTemplates: 'Modelos de e-mail',
    workspaceImplHandoffs: 'Entregas de código',
    adminAiActionPolicies: 'Políticas de ação IA',
    adminSuggestionRules: 'Regras de sugestão',
    adminWebhookDeliveries: 'Entregas de webhook',
  },
  chat: {
    newThread: 'Novo Chat',
    threads: 'Conversas',
    searchThreads: 'Pesquisar conversas...',
    noThreads: 'Nenhuma conversa ainda',
    noThreadsDesc: 'Inicie uma nova conversa para começar',
    sendMessage: 'Enviar mensagem',
    typeMessage: 'Digite uma mensagem...',
    deleteThread: 'Excluir Conversa',
    deleteThreadConfirm: 'Tem certeza que deseja excluir esta conversa?',
    threadCreated: 'Conversa criada',
    threadCreateFailed: 'Falha ao criar conversa',
    threadDeleted: 'Conversa excluída',
    threadDeleteFailed: 'Falha ao excluir conversa',
    threadUpdateFailed: 'Falha ao atualizar conversa',
    messageSendFailed: 'Falha ao enviar mensagem',
    feedbackFailed: 'Falha ao salvar feedback',
    regenerateFailed: 'Falha ao regenerar mensagem',
    aiThinking: 'A IA está pensando...',
    fallbackRetrying: 'Tentando com fallback...',
    providerFailed: 'falhou',
    tryingProvider: 'tentando',
    allProvidersFailed: 'Todos os provedores falharam em gerar uma resposta',
    imageGeneration: 'Geração de Imagem',
    generatedImage: 'Imagem Gerada',
    downloadImage: 'Baixar Imagem',
    fileGeneration: 'Geração de Arquivo',
    generatingFile: 'Gerando arquivo...',
    fileGenerationFailed: 'Falha na geração de arquivo',
    downloadFile: 'Baixar Arquivo',
    convertingFile: 'Convertendo arquivo',
    providerModel: 'Provedor / Modelo',
    pinThread: 'Fixar conversa',
    unpinThread: 'Desafixar conversa',
    archiveThread: 'Arquivar conversa',
    unarchiveThread: 'Desarquivar conversa',
    threadPinned: 'Conversa fixada',
    threadUnpinned: 'Conversa desafixada',
    threadArchived: 'Conversa arquivada',
    threadUnarchived: 'Conversa desarquivada',
    pinFailed: 'Falha ao atualizar fixação',
    archiveFailed: 'Falha ao atualizar arquivamento',
    showArchived: 'Mostrar arquivadas',
    hideArchived: 'Ocultar arquivadas',
    provenance: 'Proveniência da mensagem',
    provenanceProvider: 'Provedor',
    provenanceModel: 'Modelo',
    provenanceLatency: 'Latência',
    provenanceInputTokens: 'Tokens de entrada',
    provenanceOutputTokens: 'Tokens de saída',
    provenanceEstimatedCost: 'Custo estimado',
    provenanceRoutingMode: 'Modo de roteamento',
    provenanceFallbackUsed: 'Fallback usado',
    provenanceYes: 'Sim',
    provenanceNo: 'Não',
    globalSearch: 'Pesquisar conversas',
    globalSearchPlaceholder: 'Pesquisar todas as conversas...',
    globalSearchNoResults: 'Nenhuma conversa encontrada',
    systemPrompt: 'Prompt do Sistema',
    systemPromptPlaceholder: 'Instruções para a IA...',
    temperature: 'Temperatura',
    temperatureDescription: 'Controla a aleatoriedade. Menor = mais focado, maior = mais criativo.',
    maxTokens: 'Máx. Tokens',
    maxTokensDescription: 'Tamanho máximo da resposta da IA.',
    threadSettings: 'Configurações da Conversa',
    preferredModel: 'Modelo de IA Padrão',
    preferredModelDescription:
      'Modelo padrão para esta conversa. Pode ser substituído por mensagem.',
    settingsSaved: 'Configurações da conversa salvas',
    helpful: 'Útil',
    notHelpful: 'Não útil',
    feedbackSaved: 'Feedback salvo',
    attachFiles: 'Anexar Arquivos',
    noFiles: 'Nenhum arquivo enviado ainda',
    selectedFiles: '{count} arquivo(s) anexado(s)',
    contextPacks: 'Pacotes de Contexto',
    contextPacksDescription: 'Selecione pacotes de contexto para incluir nesta conversa.',
    noContextPacks: 'Nenhum pacote de contexto criado ainda',
    reRouted: 'Reencaminhada',
    reRoutedFrom: 'Reencaminhada de {provider}/{model}',
    weakResponse: 'Resposta fraca detectada',
    qualityScore: 'Qualidade: {score}%',
    judgeReferee: 'Juiz e Árbitro',
    judgeRefereeDescription:
      'Habilite crítica e verificação de respostas por IA para maior precisão.',
    judgeVerified: 'Verificado',
    judgeRevised: 'Revisado',
    judgeEscalated: 'Escalonado',
    judgeCriticFeedback: 'Feedback do Crítico',
    judgeReasoning: 'Raciocínio do Juiz',
    judgeEvaluating: 'Verificando resposta...',
    judgeModelLabel: 'Modelo Juiz',
    judgeModelAuto: 'Auto (qwen3:1.7b)',
    judgeModelDescription: 'Substituir o modelo local usado para veredito final',
    judgeOpenReview: 'Ver Resposta do Juiz',
    judgeReviewTitle: 'Revisão do Juiz',
    judgeReviewDescription:
      'Inspecione a resposta original, a decisão do juiz e a resposta gerada pelo juiz.',
    judgeDecisionLabel: 'Decisão',
    judgeConfidenceLabel: 'Confiança',
    judgeSummary: 'Resumo do Juiz',
    judgeResponse: 'Resposta do Juiz',
    judgeOriginalAnswer: 'Resposta Original',
    judgeRevisedAnswer: 'Resposta Revisada',
    judgeEscalatedAnswer: 'Resposta Escalonada',
    judgeExecutionModel: 'Modelo de Execução',
    judgeJudgeModel: 'Modelo Juiz',
    judgeCriticModel: 'Modelo Crítico',
    judgeCriticScore: 'Pontuação do Crítico',
    judgeJudgeLatency: 'Latência do Juiz',
    judgeTotalLatency: 'Latência Total da Revisão',
    judgeRecommendedChanges: 'Mudanças Recomendadas',
    judgeNoCriticFeedback: 'Nenhum feedback do crítico foi registrado para esta revisão.',
    judgeResponseTypeSummary: 'Resumo',
    judgeResponseTypeRevisedAnswer: 'Resposta Revisada',
    judgeResponseTypeEscalatedAnswer: 'Resposta Escalonada',
    judgeResponseTypeVerificationNote: 'Nota de Verificação',
    qualityThreshold: 'Limite de Qualidade',
    qualityThresholdDescription:
      'Pontuação mínima de qualidade antes do re-roteamento (0 = aceitar todos, 1 = muito rigoroso)',
    maxReRouteAttempts: 'Máx. Tentativas de Re-roteamento',
    maxReRouteAttemptsDescription:
      'Número máximo de tentativas de re-roteamento por mensagem (0-5)',
    reRouteReasonShort: 'Muito curta',
    reRouteReasonRefusal: 'Recusa detectada',
    reRouteReasonRepetition: 'Repetição excessiva',
    reRouteReasonEcho: 'Eco do prompt',
    reRouteReasonLowWords: 'Poucas palavras',
    backToThreads: 'Voltar às conversas',
    loadingThread: 'Carregando conversa...',
    selectOrStartTitle: 'Selecione uma conversa ou inicie um novo chat',
    selectOrStartDesc:
      'Escolha uma conversa existente na barra lateral ou crie uma nova para interagir com seus modelos de IA configurados.',
    untitled: 'Sem título',
    attachedFile: 'Arquivo anexado',
    beginningOfConversation: 'Início da conversa',
    composerPlaceholder: 'Digite sua mensagem...',
    currentAiProgress: 'Progresso atual da IA',
    fileGenerationCancelled: 'Geração de arquivo cancelada',
    fileGenerationFailedRetry: 'Falha na geração do arquivo. Tentar novamente?',
    generationCancelled: 'Geração cancelada',
    imageGenerationFailedRetry: 'Falha na geração da imagem. Tentar novamente?',
    judge: 'Juiz',
    live: 'Ao vivo',
    loadingImage: 'Carregando imagem...',
    loadingMessages: 'Carregando mensagens...',
    loadingMoreThreads: 'Carregando mais conversas...',
    loadingOlderMessages: 'Carregando mensagens anteriores...',
    loadingThreads: 'Carregando conversas...',
    manyMemories: '{count} memórias',
    modelThinking: 'O modelo está pensando...',
    noMatchingThreads: 'Nenhuma conversa correspondente',
    noMessagesYet: 'Ainda não há mensagens',
    noVisibleAnswer: 'Nenhuma resposta visível',
    oneMemory: '1 memória',
    open: 'Abrir',
    preparingDownload: 'Preparando download...',
    regenerate: 'Regenerar',
    searching: 'Pesquisando...',
    threadActions: 'Ações da conversa',
    toggleProvenance: 'Alternar proveniência',
    tryAnotherModel: 'Tentar outro modelo',
    tryingFallback: 'Tentando alternativa...',
    verifyingWith: 'Verificando com {model}',
    visibleAiProgress: 'Progresso visível da IA',
    useMemoryLabel: 'Usar memória nesta conversa',
    useMemoryDescription: 'Quando desativado, nenhuma memória é injetada no prompt.',
    useContextLabel: 'Usar pacotes de contexto nesta conversa',
    useContextDescription: 'Quando desativado, os pacotes anexados são ignorados.',
  },
  receipt: {
    openLabel: 'Mostrar o que a IA usou',
    contextUsed: 'Contexto usado',
    dialogTitle: 'Por que esta resposta',
    dialogDescription: 'Memórias e itens de pacote que influenciaram esta resposta.',
    loading: 'Carregando recibo...',
    notAvailable: 'Nenhum recibo disponível para esta mensagem.',
    memoriesCount: '{value} memórias',
    packItemsCount: '{value} itens do pacote',
    tokenBudget: 'Tokens: {used} / {total}',
    memoriesHeading: 'Memórias',
    packItemsHeading: 'Itens do pacote',
    warningsHeading: 'Avisos',
    scoreLabel: 'pontuação {value}',
    pinnedBadge: 'fixado',
    redactedPlaceholder: '(censurado — conteúdo oculto)',
  },
  preview: {
    openLabel: 'Pré-visualizar contexto',
    dialogTitle: 'O que a IA veria',
    dialogDescription:
      'Simulação da recuperação de memória e pacotes de contexto para o rascunho atual.',
    loading: 'Gerando pré-visualização...',
    failed: 'A pré-visualização falhou; o próximo envio ainda funcionará.',
    empty: 'Nenhum contexto será injetado para este rascunho.',
    memoryCount: '{value} memórias',
    packCount: '{value} itens do pacote',
    tokenBudget: 'Tokens: {used} / {total}',
    memoriesHeading: 'Memórias',
    packItemsHeading: 'Itens do pacote',
    redactedPlaceholder: '(censurado — conteúdo oculto)',
  },
  connectors: {
    title: 'Conectores',
    description: 'Gerencie suas conexões com provedores de IA',
    createConnector: 'Criar Conector',
    editConnector: 'Editar Conector',
    deleteConnector: 'Excluir Conector',
    testConnection: 'Testar Conexão',
    testingConnection: 'Testando...',
    syncModels: 'Sincronizar Modelos',
    name: 'Nome',
    nameHelp: 'Um nome amigável para identificar este conector no seu painel.',
    provider: 'Provedor',
    providerHelp: 'O provedor de IA com o qual este conector se comunicará.',
    authType: 'Tipo de Autenticação',
    authTypeHelp: 'Como autenticar com o provedor. A maioria usa Chave de API.',
    apiKey: 'Chave de API',
    apiKeyHelp: 'Sua chave secreta de API do provedor. Será criptografada em repouso.',
    baseUrl: 'URL Base',
    baseUrlHelp:
      'Substituir o endpoint de API padrão. Deixe em branco para usar o padrão do provedor.',
    region: 'Região',
    regionHelp: 'A região AWS onde seu endpoint Bedrock está implantado.',
    status: 'Status',
    healthy: 'Saudável',
    degraded: 'Degradado',
    error: 'Erro',
    noConnectors: 'Nenhum conector configurado',
    noConnectorsDesc: 'Adicione um conector para começar a usar provedores de IA',
    connectorCreated: 'Conector criado',
    connectorCreateFailed: 'Falha ao criar conector',
    connectorUpdated: 'Conector atualizado',
    connectorUpdateFailed: 'Falha ao atualizar conector',
    connectorDeleted: 'Conector excluído',
    connectorDeleteFailed: 'Falha ao excluir conector',
    testSuccessful: 'Teste de conexão bem-sucedido',
    testFailed: 'Teste de conexão falhou',
    modelsSynced: 'Modelos sincronizados com sucesso',
    syncFailed: 'Falha ao sincronizar modelos',
    testBeforeCreate: 'Salve o conector primeiro, depois teste pela lista de conectores.',
    loadingConnectors: 'Carregando conectores...',
    loadingConnector: 'Carregando conector...',
    addConnector: 'Adicionar Conector',
    loadFailed: 'Falha ao carregar conectores.',
    connectorDetail: 'Detalhes do Conector',
    connectorNotFound: 'Conector não encontrado',
    backToConnectors: 'Voltar aos conectores',
    syncing: 'Sincronizando...',
    enabled: 'Ativado',
    disabled: 'Desativado',
    configuration: 'Configuração',
    healthHistory: 'Histórico de Saúde',
    healthHistoryDesc:
      'O rastreamento de histórico de saúde estará disponível em uma atualização futura.',
    models: 'Modelos',
    oneModel: '{count} modelo',
    manyModels: '{count} modelos',
    updatedAt: 'Atualizado em {date}',
    addConnectorDesc: 'Adicionar um novo conector de provedor de IA',
    apiKeyPlaceholder: 'Insira a API Key',
    apiKeyPlaceholderEdit: 'Deixe em branco para manter a existente',
    baseUrlOptional: 'URL base (opcional)',
    baseUrlPlaceholder: 'https://api.example.com',
    defaultLabel: 'Padrão',
    editConnectorDesc: 'Atualizar configuração do conector',
    namePlaceholder: 'ex.: OpenAI Produção',
    regionPlaceholder: 'ex.: us-east-1',
    saveFirstThenTest: 'Salve o conector primeiro, depois teste',
    selectProvider: 'Selecione um provedor',
  },
  memory: {
    title: 'Memória',
    description: 'Gerenciar registros de memória da IA',
    createMemory: 'Criar Memória',
    editMemory: 'Editar Memória',
    deleteMemory: 'Excluir Memória',
    type: 'Tipo',
    content: 'Conteúdo',
    enabled: 'Ativado',
    disabled: 'Desativado',
    noMemories: 'Nenhum registro de memória',
    noMemoriesDesc: 'Crie registros de memória para dar contexto à IA',
    memoryCreated: 'Memória criada',
    memoryCreateFailed: 'Falha ao criar memória',
    memoryUpdated: 'Memória atualizada',
    memoryUpdateFailed: 'Falha ao atualizar memória',
    memoryDeleted: 'Memória excluída',
    memoryDeleteFailed: 'Falha ao excluir memória',
    memoryToggled: 'Memória alternada',
    memoryToggleFailed: 'Falha ao alternar memória',
    loadFailed: 'Falha ao carregar registros de memória.',
    loadingMemories: 'Carregando registros de memória...',
    addMemory: 'Adicionar Memória',
    contentPlaceholder: 'Insira o conteúdo da memória...',
    createMemoryDesc: 'Criar uma nova entrada de memória',
    editMemoryDesc: 'Atualizar detalhes da memória',
    source: 'Origem',
    typeSummary: 'Resumo',
    typeFact: 'Fato',
    typePreference: 'Preferência',
    typeInstruction: 'Instrução',
    filterAllTypes: 'Todos os tipos',
    tabSaved: 'Salvas',
    tabSuggestions: 'Sugestões',
    tabAudit: 'Auditoria',
    searchPlaceholder: 'Pesquisar memórias...',
    filterAllScopes: 'Todos os escopos',
    filterAllSources: 'Todas as fontes',
    filterAllSensitivities: 'Todas as sensibilidades',
    scopeUser: 'Pessoal',
    scopeThread: 'Esta conversa',
    scopeWorkspace: 'Espaço de trabalho',
    scopeProject: 'Projeto',
    sourceUserManual: 'Criada manualmente',
    sourceAiExtracted: 'Extraída do chat',
    sourceAutomation: 'Aprendida por automação',
    sourceImported: 'Importada',
    sensitivityNormal: 'Normal',
    sensitivitySensitive: 'Sensível',
    sensitivityRedacted: 'Censurada',
    loadingSuggestions: 'Carregando sugestões...',
    loadingAudit: 'Carregando auditoria...',
    noSuggestions: 'Sem sugestões no momento',
    noAudit: 'Sem entradas de auditoria ainda',
    auditNoMemoryId: '(memória excluída)',
    approveSuggestion: 'Aprovar',
    rejectSuggestion: 'Rejeitar',
    rejectAndSuppress: 'Rejeitar e suprimir semelhantes',
    suggestionConfidence: 'Confiança: {value}%',
    suggestionReason: 'Motivo: {value}',
  },
  files: {
    title: 'Arquivos',
    description: 'Enviar e gerenciar arquivos para contexto da IA',
    uploadFile: 'Enviar Arquivo',
    deleteFile: 'Excluir Arquivo',
    dragDrop: 'Arraste e solte arquivos aqui, ou clique para navegar',
    maxSize: 'Tamanho máximo: 50 MB',
    noFiles: 'Nenhum arquivo enviado',
    noFilesDesc: 'Envie arquivos para usar como contexto da IA',
    fileUploaded: 'Arquivo enviado',
    fileUploadFailed: 'Falha ao enviar arquivo',
    fileDeleted: 'Arquivo excluído',
    fileDeleteFailed: 'Falha ao excluir arquivo',
    uploadFailed: 'Falha ao enviar arquivo',
    loadFailed: 'Falha ao carregar arquivos.',
    loadingFiles: 'Carregando arquivos...',
    allTypesAccepted: 'Todos os tipos de arquivo aceitos',
    chunkIndex: 'Trecho #{index}',
    chunksTitle: 'Trechos do arquivo',
    dropFileHere: 'Solte o arquivo aqui',
    dropOrClick: 'Solte o arquivo aqui ou clique para procurar',
    fileFallback: 'Arquivo',
    noChunks: 'Nenhum trecho disponível',
    uploading: 'Enviando...',
    uploadNewFile: 'Enviar um novo arquivo',
    viewChunks: 'Ver trechos',
    statusPending: 'Pendente',
    statusProcessing: 'Processando',
    statusCompleted: 'Concluído',
    statusFailed: 'Falhou',
  },
  context: {
    title: 'Pacotes de Contexto',
    description: 'Organizar contexto para conversas de IA',
    createPack: 'Criar Pacote de Contexto',
    addItem: 'Adicionar Item',
    name: 'Nome',
    scope: 'Escopo',
    noContextPacks: 'Nenhum pacote de contexto',
    noContextPacksDesc: 'Crie pacotes de contexto para organizar o contexto da IA',
    packCreated: 'Pacote de contexto criado',
    packCreateFailed: 'Falha ao criar pacote de contexto',
    packUpdated: 'Pacote de contexto atualizado',
    packUpdateFailed: 'Falha ao atualizar pacote de contexto',
    packDeleted: 'Pacote de contexto excluído',
    packDeleteFailed: 'Falha ao excluir pacote de contexto',
    itemAdded: 'Item adicionado ao pacote de contexto',
    itemAddFailed: 'Falha ao adicionar item',
    itemUpdated: 'Item do pacote de contexto atualizado',
    itemUpdateFailed: 'Falha ao atualizar item',
    itemRemoved: 'Item removido do pacote de contexto',
    itemRemoveFailed: 'Falha ao remover item',
    loadFailed: 'Falha ao carregar pacotes de contexto.',
    contextPack: 'Pacote de Contexto',
    packDetailsDesc: 'Detalhes do pacote e itens',
    backToPacks: 'Voltar aos Pacotes',
    deletePack: 'Excluir Pacote',
    deleting: 'Excluindo...',
    loadingPackDetails: 'Carregando detalhes do pacote...',
    noItems: 'Nenhum item neste pacote',
    noItemsDesc:
      'Adicione notas de texto, instruções ou referências de arquivos a este pacote de contexto.',
    loadingContextPacks: 'Carregando pacotes de contexto...',
    addItemDesc:
      'Adicione uma nota de texto, instrução ou referência de arquivo a este pacote de contexto.',
    adding: 'Adicionando...',
    content: 'Conteúdo',
    contentPlaceholder: 'Digite o conteúdo...',
    fileId: 'ID do Arquivo',
    fileIdPlaceholder: 'Digite o ID do arquivo',
    itemType: 'Tipo',
    selectType: 'Selecione um tipo',
    createPackDesc: 'Criar um novo pacote de contexto',
    creating: 'Criando...',
    descriptionOptional: 'Descrição (opcional)',
    descriptionPlaceholder: 'Descreva a finalidade deste pacote',
    namePlaceholder: 'ex.: Contexto do Projeto Alpha',
    scopeOptional: 'Escopo (opcional)',
    scopePlaceholder: 'ex.: global, projeto, usuário',
    typeNote: 'Nota',
    typeInstruction: 'Instrução',
    typeFileReference: 'Referência de arquivo',
  },
  routing: {
    title: 'Políticas de Roteamento',
    description: 'Configurar roteamento de modelos de IA',
    createPolicy: 'Criar Política',
    editPolicy: 'Editar Política',
    deletePolicy: 'Excluir Política',
    name: 'Nome',
    mode: 'Modo de Roteamento',
    priority: 'Prioridade',
    active: 'Ativa',
    noPolicies: 'Nenhuma política de roteamento',
    noPoliciesDesc: 'Crie políticas de roteamento para controlar a seleção de modelos',
    policyCreated: 'Política criada',
    policyCreateFailed: 'Falha ao criar política',
    policyUpdated: 'Política atualizada',
    policyUpdateFailed: 'Falha ao atualizar política',
    policyDeleted: 'Política excluída',
    policyDeleteFailed: 'Falha ao excluir política',
    status: 'Status',
    inactive: 'Inativa',
    activate: 'Ativar',
    deactivate: 'Desativar',
    loadFailed: 'Falha ao carregar configuração de roteamento.',
    defaultRoutingMode: 'Modo de Roteamento Padrão',
    defaultRoutingModeDesc: 'Escolha como o roteador local distribui solicitações entre os modelos',
    defaultMode: 'Modo Padrão',
    fallbackSettings: 'Configurações de Fallback',
    fallbackSettingsDesc: 'Configurar comportamento de nova tentativa e timeout',
    maxRetries: 'Máx. Tentativas',
    timeoutMs: 'Tempo limite (ms)',
    loadingPolicies: 'Carregando políticas...',
    noPoliciesConfigured: 'Nenhuma política de roteamento configurada.',
    complexityLabel: 'Complexidade',
    complexitySimple: 'Simples',
    complexityMedium: 'Média',
    complexityComplex: 'Complexa',
    complexityExpert: 'Especialista',
    routingExplanation: 'Explicação do Roteamento',
    explanationSummary: 'Resumo da Decisão',
    explanationFactors: 'Fatores de Decisão',
    routingDurationMs: 'Duração do Roteamento',
    modalityLabel: 'Modalidade Detectada',
    modalityText: 'Texto',
    modalityCode: 'Código',
    modalityImageInput: 'Entendimento de Imagem',
    modalityImageOutput: 'Geração de Imagem',
    modalityAudioInput: 'Áudio / Fala',
    modalityVideoInput: 'Análise de Vídeo',
    modalityPdfInput: 'Documento / PDF',
    modalityWebSearch: 'Pesquisa na Web',
    modalityToolCalling: 'Chamada de Ferramentas',
    modalityStructuredOutput: 'Saída Estruturada',
    modalityOcr: 'OCR / Extração de Texto',
    modalityReasoning: 'Raciocínio Profundo',
    namePlaceholder: 'Minha Política de Roteamento',
    selectModePlaceholder: 'Selecione o modo de roteamento',
    editPolicyDesc: 'Atualize a configuração da política de roteamento.',
    createPolicyDesc:
      'Crie uma nova política de roteamento para controlar a distribuição de requisições.',
    weightsJsonLabel: 'Pesos de pontuação (JSON, opcional)',
    weightsJsonPlaceholder: '{"capability": 0.2, "domain": 0.1, ...}',
    weightsJsonHelp:
      'Opcional. Sobrescreve os pesos padrão por modo. Deve incluir todas as 14 dimensões e somar 1,0.',
    weightsJsonError: {
      invalidJson: 'O JSON de pesos não é um JSON válido.',
      notAnObject: 'Os pesos devem ser um objeto JSON.',
      missingDimension: 'O JSON de pesos deve incluir cada dimensão como número.',
      sumNotOne: 'Os pesos devem somar 1,0 (±0,001).',
    },
    models: {
      title: 'Registro de modelos',
      description:
        'Navegue por todos os modelos conhecidos pelo roteador. Sobrescreva custo, ciclo de vida ou flags de roteamento.',
      updateSucceeded: 'Modelo atualizado.',
      updateFailed: 'Falha ao atualizar o modelo.',
      overrideCleared: 'Substituição removida.',
      overrideClearFailed: 'Falha ao remover a substituição.',
      softDeleteSucceeded: 'Modelo marcado como removido.',
      softDeleteFailed: 'Falha ao remover o modelo.',
      columnProvider: 'Provedor',
      columnModelKey: 'Modelo',
      columnLifecycle: 'Ciclo de vida',
      columnQuality: 'Qualidade',
      columnCost: 'Custo',
      columnLatency: 'Latência',
      filterByProvider: 'Filtrar por provedor',
      filterByLifecycle: 'Filtrar por ciclo de vida',
    },
  },
  models: {
    title: 'Modelos',
    description: 'Ver todos os modelos de IA disponíveis',
    localTitle: 'Modelos Locais',
    localDescription: 'Gerenciar modelos de IA instalados localmente',
    pullModel: 'Baixar Modelo',
    assignRole: 'Atribuir Função',
    noModels: 'Nenhum modelo disponível',
    noModelsDesc: 'Conecte um provedor ou baixe modelos locais',
    modelPullStarted: 'Download de modelo iniciado',
    modelPullFailed: 'Falha ao baixar modelo',
    roleAssigned: 'Função atribuída',
    roleAssignFailed: 'Falha ao atribuir função',
    loadFailed: 'Falha ao carregar modelos.',
    loadingModels: 'Carregando modelos...',
    allProviders: 'Todos os provedores',
    allLifecycle: 'Todo ciclo de vida',
    noModelsMatch: 'Nenhum modelo corresponde aos filtros atuais.',
    localLoadFailed: 'Falha ao carregar modelos locais.',
    runtimeHealth: 'Saúde do Runtime',
    runtimeHealthDesc: 'Status atual do runtime de modelos locais',
    pullModelDesc: 'Baixar um novo modelo do registro',
    modelName: 'Nome do Modelo',
    runtime: 'Runtime',
    pulling: 'Baixando...',
    pull: 'Baixar',
    installedModels: 'Modelos Instalados',
    loadingLocalModels: 'Carregando modelos locais...',
    noLocalModels: 'Nenhum modelo local instalado',
    noLocalModelsDesc:
      'Baixe um modelo usando o formulário acima para começar com inferência local.',
    colModel: 'Modelo',
    colRuntime: 'Runtime',
    colSize: 'Tamanho',
    colFamily: 'Família',
    colParameters: 'Parâmetros',
    colRoles: 'Funções',
    noneRole: 'Nenhuma',
    modelNamePlaceholder: 'llama3:8b',
    capabilities: 'Capacidades',
    context: 'Contexto',
    lifecycle: 'Ciclo de vida',
    noSyncedModels: 'Nenhum modelo sincronizado',
    streaming: 'Streaming',
    tools: 'Ferramentas',
    vision: 'Visão',
  },
  observability: {
    title: 'Observabilidade',
    description: 'Monitorar uso e desempenho da IA',
    totalRequests: 'Total de Requisições',
    totalCost: 'Custo Total',
    avgLatency: 'Latência Média',
    activeModels: 'Modelos Ativos',
    clientLogs: 'Logs do Cliente',
    serverLogs: 'Logs do Servidor',
    auditTrail: 'Trilha de Auditoria',
    loadingData: 'Carregando dados de observabilidade...',
    failedToLoad: 'Falha ao carregar dados',
    failedToLoadDesc:
      'Não foi possível obter dados de observabilidade. Tente novamente mais tarde.',
    noDataYet: 'Nenhum dado de observabilidade ainda',
    noDataDesc:
      'Métricas e dados de desempenho aparecerão aqui assim que as requisições começarem a fluir pela camada de orquestração.',
    fullDescription: 'Monitorar saúde do sistema, latências de requisições e desempenho de modelos',
    totalRequestsLabel: 'Total de Requisições',
    acrossProviders: 'Em todos os provedores',
    estimatedCost: 'Custo Estimado',
    estimatedCostLabel: 'Custo Estimado',
    recentFailures: 'Falhas Recentes',
    highCriticalSeverity: 'Eventos de severidade ALTA + CRÍTICA',
    providerUsage: 'Uso por Provedor',
    modelUsage: 'Uso por Modelo',
    latencyBreakdown: 'Detalhamento de Latência',
    costSummary: 'Resumo de Custos',
    avg: 'Média',
    p50Median: 'P50 (Mediana)',
    p95: 'P95',
    totalTokens: 'Total de Tokens',
    requests: 'requisições',
    tokens: 'tokens',
    noData: 'Sem dados',
  },
  audits: {
    title: 'Logs de Auditoria',
    description: 'Ver logs de atividade do sistema',
    action: 'Ação',
    severity: 'Severidade',
    entity: 'Entidade',
    timestamp: 'Data/Hora',
    noAudits: 'Nenhum log de auditoria',
    noAuditsDesc: 'A atividade aparecerá aqui conforme você usa a plataforma',
    actor: 'Ator',
    details: 'Detalhes',
    loadingAudits: 'Carregando logs de auditoria...',
    loadFailed: 'Falha ao carregar auditorias',
    loadFailedDesc: 'Não foi possível obter logs de auditoria. Tente novamente mais tarde.',
    noMatchingAudits: 'Nenhum log de auditoria corresponde aos seus filtros.',
    allActions: 'Todas as Ações',
    allSeverities: 'Todas as Severidades',
    searchPlaceholder: 'Pesquisar...',
    ipAddress: 'Endereço IP',
  },
  admin: {
    title: 'Administração',
    description: 'Gerenciar usuários e configurações do sistema',
    users: 'Usuários',
    createUser: 'Criar Usuário',
    changeRole: 'Alterar Função',
    deactivate: 'Desativar',
    reactivate: 'Reativar',
    noUsers: 'Nenhum usuário encontrado',
    checkingServices: 'Verificando serviços...',
    healthUnreachable: 'Não foi possível acessar o serviço de saúde.',
    loadingUsers: 'Carregando usuários...',
    loadUsersFailed: 'Falha ao carregar usuários',
    loadUsersFailedDesc: 'Não foi possível obter a lista de usuários. Tente novamente mais tarde.',
    userRoleUpdated: 'Função do usuário atualizada',
    userRoleUpdateFailed: 'Falha ao atualizar função do usuário',
    userDeactivated: 'Usuário desativado',
    userDeactivateFailed: 'Falha ao desativar usuário',
    userStats: 'Estatísticas de Usuários',
    userStatsDesc: 'Visão geral dos usuários da plataforma',
    totalUsers: 'Total de Usuários',
    activeUsers: 'Usuários Ativos',
    platformHealth: 'Saúde da Plataforma',
    systemStatusOverview: 'Visão geral do status do sistema',
    userManagement: 'Gerenciamento de Usuários',
    colUsername: 'Usuário',
    colEmail: 'E-mail',
    colRole: 'Função',
    colStatus: 'Status',
    colJoined: 'Entrou em',
    colActions: 'Ações',
    roleAdmin: 'Administração',
    roleOperator: 'Operador',
    roleViewer: 'Visualizador',
  },
  settings: {
    title: 'Configurações',
    description: 'Gerenciar configurações da sua conta',
    profile: 'Perfil',
    profileDescription: 'Suas informações pessoais. Estes campos são somente leitura.',
    username: 'Usuário',
    email: 'E-mail',
    emailReadOnly: 'Entre em contato com um administrador para alterar seu e-mail.',
    role: 'Função',
    selectLanguage: 'Selecionar idioma',
    preferences: 'Preferências',
    language: 'Idioma',
    languageDescription: 'Selecione seu idioma de exibição preferido',
    appearance: 'Aparência',
    appearanceDescription: 'Escolha como o aplicativo se parece',
    system: 'Sistema',
    light: 'Claro',
    dark: 'Escuro',
    theme: 'Tema',
    changePassword: 'Alterar Senha',
    currentPassword: 'Senha Atual',
    newPassword: 'Nova Senha',
    confirmPassword: 'Confirmar Senha',
    passwordChanged: 'Senha alterada com sucesso',
    passwordChangeFailed: 'Falha ao alterar senha',
    passwordRequirements:
      'A senha deve ter pelo menos 8 caracteres com maiúscula, minúscula e um número',
    preferencesUpdated: 'Preferências atualizadas com sucesso',
    preferencesUpdateFailed: 'Falha ao atualizar preferências',
    devices: {
      title: 'Dispositivos',
      description: 'Gerencie agentes desktop pareados com sua conta.',
      emptyTitle: 'Nenhum dispositivo pareado',
      emptyBody: 'Execute `claw-agent login` na sua máquina para parear um dispositivo.',
      revoke: 'Revogar',
      rename: 'Renomear',
      scopesHeading: 'Escopos',
      revokedBanner: 'Este dispositivo foi revogado',
    },
    langEnglish: 'Inglês',
    langArabic: 'Árabe',
    langFrench: 'Francês',
    langItalian: 'Italiano',
    langGerman: 'Alemão',
    langSpanish: 'Espanhol',
    langRussian: 'Russo',
    langPortuguese: 'Português',
    langHindi: 'Hindi',
    appearanceSystem: 'Sistema',
    appearanceLight: 'Claro',
    appearanceDark: 'Escuro',
  },
  dashboard: {
    title: 'Painel',
    description: 'Visão geral da sua plataforma de IA',
    quickActions: 'Ações Rápidas',
    recentActivity: 'Atividade Recente',
    totalThreads: 'Total de Conversas',
    activeConnectors: 'Conectores Ativos',
    localModels: 'Modelos Locais',
    systemHealth: 'Saúde do Sistema',
    startNewChat: 'Iniciar Novo Chat',
    addConnector: 'Adicionar Conector',
    configureRouting: 'Configurar Roteamento',
    serviceStatus: 'Status dos Serviços',
    checkingHealth: 'Verificando saúde dos serviços...',
    healthUnreachable:
      'Não foi possível acessar o agregador de saúde. Verifique se o serviço de saúde está em execução.',
    servicesOperational: '{up} de {total} serviços operacionais',
    responseTimeMs: '{ms}ms',
    unreachable: 'inacessível',
    newChatLabel: 'Novo chat',
    newChatDesc: 'Iniciar uma nova conversa',
    manageConnectorsLabel: 'Gerenciar conectores',
    manageConnectorsDesc: 'Configure seus conectores de provedor de IA',
    routingSettingsLabel: 'Configurações de roteamento',
    routingSettingsDesc: 'Configure como as solicitações são roteadas',
  },
  catalog: {
    title: 'Catálogo de Modelos',
    description: 'Navegar e baixar modelos de IA',
    searchPlaceholder: 'Pesquisar modelos...',
    allCategories: 'Todos',
    coding: 'Programação',
    fileGeneration: 'Geração de Arquivos',
    imageGeneration: 'Geração de Imagens',
    routing: 'Roteamento',
    reasoning: 'Raciocínio',
    thinking: 'Pensamento e Busca',
    download: 'Baixar',
    downloading: 'Baixando...',
    installed: 'Instalado',
    failed: 'Falhou',
    unavailable: 'Indisponível',
    cloudOnly: 'Somente nuvem',
    cancel: 'Cancelar',
    recommended: 'Recomendado',
    noModels: 'Nenhum modelo encontrado',
    activeDownloads: 'Downloads Ativos',
    parameterCount: 'Parâmetros',
    modelSize: 'Tamanho',
    capabilities: 'Capacidades',
    models: 'modelos',
    scrollForMore: 'Role para ver mais',
    allLoaded: 'Todos os modelos carregados',
    searchBrowserHelpers: 'Auxiliares de Busca/Navegador',
    searchBrowserScoreLabel: 'Auxiliar',
    searchBrowserScoreTooltip:
      'Adequação para fluxos de busca e auxiliares de navegador (pontuação baseada em metadados, 0.00–1.00)',
    cancelDownloadFailed: 'Falha ao cancelar download',
    downloadCancelled: 'Download cancelado',
    downloadStarted: 'Download iniciado',
    downloadStartFailed: 'Falha ao iniciar download',
    modelRemoved: 'Modelo removido',
    modelRemoveFailed: 'Falha ao remover modelo',
  },
  replay: {
    title: 'Laboratório de Replay de Roteamento',
    description:
      'Reexecute decisões históricas de roteamento contra o roteador atual e compare resultados',
    runReplay: 'Executar Replay',
    running: 'Executando replay...',
    totalReplayed: 'Total Reexecutado',
    changed: 'Alterados',
    unchanged: 'Inalterados',
    oldRoute: 'Rota Original',
    newRoute: 'Nova Rota',
    improvement: 'Melhoria',
    noResults: 'Nenhum resultado de replay ainda',
    confidenceOld: 'Confiança Média (Antiga)',
    confidenceNew: 'Confiança Média (Nova)',
    replayComplete: 'Replay de roteamento concluído',
    replayFailed: 'Falha ao executar replay de roteamento',
    saveRun: 'Salvar execução',
    runName: 'Nome da execução',
    runNamePlaceholder: 'ex.: baseline-2026-04',
    threadIdFilter: 'ID da Conversa',
    threadIdPlaceholder: 'Filtrar por conversa...',
    startDate: 'Data de início',
    endDate: 'Data de término',
    suspicious: 'Suspeitos',
    avgImprovement: 'Melhoria Média',
    needsReview: 'Precisa de Revisão',
    noSuspiciousCases: 'Nenhum caso suspeito detectado',
    noSuspiciousCasesDesc: 'Todos os resultados de replay parecem limpos',
    confirmedRegression: 'Regressão Confirmada',
    markConfirmedRegression: 'Marcar como Regressão',
    caseReviewed: 'Caso revisado com sucesso',
    caseReviewFailed: 'Falha ao revisar caso',
    copyBundle: 'Copiar Pacote de Exportação',
    bundleCopied: 'Pacote de exportação copiado para a área de transferência',
    exportFailed: 'Falha ao exportar pacote',
    runsHistory: 'Histórico de Execuções',
    noRunsHistory: 'Nenhuma execução salva ainda',
    noRunsHistoryDesc: 'Ative "Salvar execução" ao executar um replay para acompanhar o histórico',
    runResults: 'Resultados',
    correct_improvement: 'Melhoria',
    bad_regression: 'Regressão',
    cost_win: 'Ganho de Custo',
    quality_win: 'Ganho de Qualidade',
    uncertain: 'Incerto',
    badRegression: 'Regressões',
    noOriginalContent: 'Nenhum prompt original armazenado',
    promoteCase: 'Promover para Teste',
    promoted: 'Caso promovido para fixture de teste',
    promoteFailed: 'Falha ao promover caso',
    compareRuns: 'Comparar Execuções',
    compareRunsTitle: 'Comparação de Execuções',
    compareRunsDesc: 'Selecione duas execuções para comparar decisões de roteamento',
    selectRunToCompare: 'Selecione uma execução para comparar',
    runA: 'Execução A',
    runB: 'Execução B',
    improved: 'Melhorado',
    regressed: 'Regrediu',
    suspiciousReasons: {
      empty_message_content: 'Prompt original ausente',
      large_confidence_drop: 'Grande queda de confiança',
      large_cost_increase: 'Grande aumento de custo',
      route_changed_with_negative_improvement: 'Rota alterada com impacto negativo',
    },
  },
  compare: {
    title: 'Comparar Modelos',
    description: 'Selecione 2-5 modelos e insira um prompt para comparar respostas lado a lado',
    selectModels: 'Selecionar Modelos',
    minModels: 'Selecione pelo menos {min} modelos',
    maxModels: 'Máximo de {max} modelos permitidos',
    sendPrompt: 'Comparar Modelos',
    comparing: 'Comparando...',
    compareFailed: 'Falha ao comparar modelos',
    results: 'Resultados',
    fastest: 'Mais rápido',
    completed: 'Concluído',
    failed: 'Falhou',
    latency: 'Latência',
    tokens: 'Tokens',
    noResults: 'Nenhum resultado de comparação ainda',
    modelCount: '{count} modelos',
    expand: 'Expandir',
    bestResponse: 'Melhor resposta',
    viewInThread: 'Ver na conversa',
    totalTokens: 'Total de Tokens',
    avgLatencyLabel: 'Latência Média',
    completedCount: '{count} concluídos',
    failedCount: '{count} falharam',
    timeoutCount: '{count} expiraram',
    modelsCompared: 'Modelos Comparados',
    summaryTitle: 'Resumo da Comparação',
    showMore: 'Mostrar mais',
    showLess: 'Mostrar menos',
    timeout: 'Expirou',
    noContent: 'Nenhum conteúdo disponível',
    noJudge: 'Sem juiz',
    judgeAwaiting: 'Aguardando juiz',
    judgeSkipped: 'Juiz ignorado',
    judgeFailed: 'Juiz falhou',
    judgeUnavailable: 'Juiz indisponível',
    judgeVerified: 'Verificado',
    judgeRevised: 'Revisado',
    judgeEscalated: 'Escalonado',
    modelsProcessing: 'Modelos processando...',
    processingMessage: 'Processando sua mensagem...',
  },
  consensus: {
    title: 'Modo Consenso',
    description: 'Selecione 2-5 modelos e deixe a IA sintetizar uma resposta de consenso',
    selectModels: 'Selecionar Modelos',
    minModels: 'Selecione pelo menos {min} modelos',
    maxModels: 'Máximo de {max} modelos permitidos',
    sendPrompt: 'Executar Consenso',
    running: 'Executando consenso...',
    sendFailed: 'Falha ao iniciar consenso',
    synthesizing: 'Sintetizando respostas...',
    synthesisReady: 'Síntese pronta',
    synthesisTitle: 'Síntese de Consenso',
    agreementScore: 'Pontuação de Concordância',
    confidenceLevel: 'Confiança',
    agreements: 'Concordâncias',
    disagreements: 'Discordâncias',
    contradictions: 'Contradições',
    synthesisRationale: 'Justificativa',
    modelBreakdown: 'Detalhamento por Modelo',
    completed: 'Concluído',
    failed: 'Falhou',
    timeout: 'Expirou',
    contentLength: 'Tamanho do conteúdo',
    noResults: 'Nenhum resultado de consenso ainda',
    viewInThread: 'Ver na conversa',
    high: 'Alta',
    medium: 'Média',
    low: 'Baixa',
    modelsSelected: '{count} modelos selecionados',
    synthesisRationaleLabel: 'Justificativa da síntese',
  },
  escalation: {
    title: 'Cadeia de Escalonamento',
    description:
      'Defina uma cadeia de modelos — mais barato primeiro, mais poderoso por último. A IA escalona automaticamente quando a qualidade é baixa',
    chainBuilder: 'Construir Sua Cadeia',
    addModel: 'Adicionar Modelo',
    removeModel: 'Remover',
    moveUp: 'Mover para cima',
    moveDown: 'Mover para baixo',
    minSteps: 'Adicione pelo menos {min} modelos',
    maxSteps: 'Máximo de {max} modelos na cadeia',
    sendPrompt: 'Executar Cadeia',
    running: 'Executando cadeia...',
    sendFailed: 'Falha ao iniciar cadeia de escalonamento',
    synthesizing: 'Executando escalonamento...',
    synthesisReady: 'Resultado pronto',
    resultTitle: 'Resultado do Escalonamento',
    stepUsed: 'Etapa Usada',
    totalSteps: 'Total de Etapas',
    escalated: 'Escalonado',
    notEscalated: 'Sem Necessidade de Escalonar',
    status: 'Status',
    statusSingleStep: 'Resolvido na primeira etapa',
    statusResolved: 'Resolvido após escalonamento',
    statusExhausted: 'Todas as etapas esgotadas',
    qualityScore: 'Pontuação de Qualidade',
    latency: 'Latência',
    step: 'Etapa',
    passed: 'Passou',
    failed: 'Falhou',
    finalModel: 'Modelo Final',
    noResults: 'Nenhum resultado de escalonamento ainda',
    viewInThread: 'Ver na conversa',
    stepsTimeline: 'Linha do Tempo das Etapas',
    finalAnswer: 'Resposta Final',
  },
  repair: {
    title: 'Laboratório de Reparo de Respostas',
    description:
      'Repare respostas malformadas, superficiais, incompletas ou alucinadas sem reiniciar.',
    contentLabel: 'Resposta para reparar',
    contentPlaceholder: 'Cole a resposta que você deseja reparar...',
    repairTypes: 'Tipos de reparo',
    schemaLabel: 'Esquema',
    schemaDesc: 'Corrigir JSON malformado, estrutura incorreta ou problemas de formato de dados.',
    formatLabel: 'Formato',
    formatDesc:
      'Corrigir formatação markdown, cabeçalhos, listas, blocos de código e estrutura geral.',
    completenessLabel: 'Completude',
    completenessDesc:
      'Expandir seções superficiais ou incompletas, adicionar pontos-chave ausentes.',
    factualityLabel: 'Factualidade',
    factualityDesc: 'Identificar e corrigir erros factuais, alucinações ou afirmações incorretas.',
    sendPrompt: 'Reparar Resposta',
    running: 'Reparando...',
    sendFailed: 'Falha ao iniciar reparo. Tente novamente.',
    synthesizing: 'Reparo em andamento...',
    resultTitle: 'Resposta Reparada',
    noResults: 'Nenhum resultado de reparo ainda',
    viewInThread: 'Ver na conversa',
    finalAnswer: 'Resposta Final',
    provider: 'Provedor',
    model: 'Modelo',
  },
  decompose: {
    title: 'Roteador de Decomposição de Tarefas',
    description:
      'Divida tarefas complexas em subtarefas, execute cada uma com o melhor modelo e então sintetize os resultados.',
    contentLabel: 'Tarefa Complexa',
    contentPlaceholder:
      'Descreva uma tarefa complexa para decompor, por exemplo, "Pesquise tendências de IA em 2025, crie um plano de ação de 3 pontos e escreva um resumo executivo."',
    maxSubTasks: 'Máx. Subtarefas',
    sendPrompt: 'Decompor e Executar',
    running: 'Decompondo...',
    synthesizing: 'Executando subtarefas e sintetizando resultados...',
    resultTitle: 'Resultado Sintetizado',
    viewInThread: 'Ver na Conversa',
    subTasksHeader: 'Resultados das Subtarefas',
    subTaskResult: 'Resultado',
    category: 'Categoria',
    model: 'Modelo',
    latencyMs: 'Latência',
    noResults: 'Sem Resultados de Decomposição',
    sendFailed: 'Decomposição de tarefa falhou. Tente novamente.',
  },
  bestOfN: {
    title: 'Geração de Candidatos Best-of-N',
    description:
      'Gere múltiplas respostas candidatas e selecione automaticamente a resposta de maior qualidade.',
    contentLabel: 'Prompt',
    contentPlaceholder: 'Insira seu prompt para gerar múltiplos candidatos...',
    nCandidates: 'Candidatos (N)',
    sendPrompt: 'Gerar Best-of-N',
    running: 'Gerando candidatos...',
    synthesizing: 'Pontuando e selecionando o melhor candidato...',
    resultTitle: 'Resultado do Melhor Candidato',
    viewInThread: 'Ver na Conversa',
    candidatesHeader: 'Todos os Candidatos',
    rank: 'Posição',
    score: 'Pontuação',
    model: 'Modelo',
    latency: 'Latência',
    noResults: 'Nenhum Candidato Gerado',
    sendFailed: 'Geração de candidatos falhou. Tente novamente.',
  },
  recovery: {
    title: 'Recuperação de Falha de Rota',
    description: 'Monitore falhas de provedor e eventos automáticos de recuperação por fallback.',
    totalDecisions: 'Total de Decisões',
    totalFallbacks: 'Eventos de Fallback',
    fallbackRate: 'Taxa de Fallback',
    providerTable: 'Detalhamento de Falhas por Provedor',
    provider: 'Provedor',
    fallbackCount: 'Alternativas',
    rate: 'Taxa',
    recentFallbacks: 'Eventos de Fallback Recentes',
    originalProvider: 'Original',
    originalModel: 'Modelo',
    fallbackProvider: 'Alternativa',
    fallbackModel: 'Modelo Fallback',
    mode: 'Modo',
    time: 'Hora',
    noFallbacks: 'Sem Eventos de Fallback',
    noData: 'Nenhuma decisão de roteamento registrada ainda.',
    loading: 'Carregando dados de recuperação...',
    error: 'Falha ao carregar estatísticas de recuperação.',
  },
  verify: {
    title: 'Verificador',
    description: 'Gere e verifique uma resposta antes de enviar',
    contentLabel: 'Seu prompt',
    contentPlaceholder: 'Insira sua pergunta ou tarefa...',
    maxRevisionsLabel: 'Máx. revisões',
    sendPrompt: 'Verificar e Enviar',
    running: 'Verificando...',
    synthesizing: 'Gerando e verificando resposta...',
    noResults: 'Nenhuma resposta verificada ainda',
    sendFailed: 'Verificação falhou. Tente novamente.',
    verified: 'Verificado',
    verifierScore: 'Pontuação de Qualidade',
    revisions: 'Revisões',
    issues: 'Problemas',
    viewInThread: 'Ver na Conversa',
  },
  adaptiveLearning: {
    title: 'Aprendizado Adaptativo de Rota',
    description: 'Insights derivados do histórico de roteamento para melhorar decisões futuras',
    loading: 'Carregando insights...',
    error: 'Falha ao carregar insights',
    windowDays: 'Janela',
    days: 'dias',
    totalDecisions: 'Total de Decisões',
    avgConfidence: 'Confiança Média',
    topReasonTags: 'Principais Motivos',
    providerTable: 'Desempenho de Provedores',
    modeBreakdown: 'Detalhamento por Modo',
    noData: 'Nenhuma decisão de roteamento nesta janela',
    provider: 'Provedor',
    fallbackRate: 'Taxa de Fallback',
    totalCalls: 'Total de Chamadas',
    topModes: 'Principais Modos',
    mode: 'Modo',
    count: 'Contagem',
    percentage: 'Porcentagem',
  },
  pipeline: {
    title: 'Pipeline Multi-Estágio',
    description: 'Roteie sua requisição por uma cadeia de estágios especializados',
    contentLabel: 'Sua requisição',
    contentPlaceholder: 'Descreva o que você precisa...',
    templateLabel: 'Modelo de pipeline',
    templateAnalyze: 'Analisar → Raciocinar → Formatar',
    templateCode: 'Codificar → Depurar → Revisar',
    templateDraft: 'Rascunhar → Criticar → Revisar',
    sendPrompt: 'Executar Pipeline',
    running: 'Executando pipeline...',
    synthesizing: 'Processando estágios...',
    noResults: 'Nenhum resultado de pipeline ainda',
    sendFailed: 'Pipeline falhou. Tente novamente.',
    stageBreakdown: 'Detalhamento de Estágios',
    stage: 'Estágio',
    model: 'Modelo',
    latency: 'Latência',
    viewInThread: 'Ver na Conversa',
  },
  costEnsemble: {
    title: 'Conjunto Consciente de Custo',
    description:
      'Execução inteligente: use um, dois ou três modelos baseado na complexidade da tarefa',
    contentLabel: 'Seu prompt',
    contentPlaceholder: 'Insira sua pergunta ou tarefa...',
    sendPrompt: 'Analisar e Enviar',
    running: 'Analisando custo...',
    synthesizing: 'Selecionando conjunto ótimo...',
    noResults: 'Nenhum resultado ainda',
    sendFailed: 'Conjunto por custo falhou. Tente novamente.',
    tier: 'Nível',
    tierSingle: 'Único',
    tierDuo: 'Duo',
    tierTrio: 'Trio',
    complexity: 'Complexidade',
    risk: 'Risco',
    ambiguity: 'Ambiguidade',
    reasoning: 'Raciocínio',
    candidates: 'Candidatos',
    viewInThread: 'Ver na Conversa',
  },
  rolePack: {
    title: 'Conjunto Baseado em Funções',
    description: 'Envie sua requisição a um time de funções de IA especializadas',
    contentLabel: 'Sua requisição',
    contentPlaceholder: 'Descreva o que você precisa...',
    packLabel: 'Selecionar time',
    packCoding: 'Time de Programação',
    packResearch: 'Time de Pesquisa',
    packMarketing: 'Time de Marketing',
    packLegal: 'Time Jurídico',
    sendPrompt: 'Executar Time',
    running: 'Time processando...',
    synthesizing: 'Executando todas as funções em paralelo...',
    noResults: 'Nenhum resultado de time ainda',
    sendFailed: 'Execução de time falhou. Tente novamente.',
    teamBreakdown: 'Resultados do Time',
    role: 'Função',
    model: 'Modelo',
    latency: 'Latência',
    viewInThread: 'Ver na Conversa',
  },
  advancedModelSelector: {
    label: 'Modelo de execução',
    auto: 'Auto (escolher melhor modelo local)',
    loading: 'Carregando modelos...',
    description:
      'Escolha Auto ou um modelo Ollama específico instalado localmente para este laboratório.',
    empty: 'Nenhum modelo de texto local disponível para este laboratório ainda.',
  },
  workspaceConnectors: {
    title: 'Conectores de Área de Trabalho',
    description: 'Conecte suas ferramentas de trabalho — GitHub, Slack, Jira, Google Drive e mais.',
    createConnector: 'Criar Conector',
    editConnector: 'Editar Conector',
    deleteConnector: 'Excluir Conector',
    testHealth: 'Testar Saúde',
    triggerSync: 'Sincronizar Agora',
    name: 'Nome',
    nameHelp: 'Um nome de exibição para este conector',
    provider: 'Provedor',
    providerHelp: 'A ferramenta de trabalho para conectar',
    permissionLevel: 'Nível de Permissão',
    permissionLevelHelp: 'O nível de acesso concedido a este conector',
    status: 'Status',
    connected: 'Conectado',
    degraded: 'Degradado',
    disconnected: 'Desconectado',
    pendingAuth: 'Autenticação Pendente',
    unknown: 'Desconhecido',
    noConnectors: 'Nenhum conector de área de trabalho',
    noConnectorsDesc: 'Conecte sua primeira ferramenta de trabalho para começar.',
    noConnectorsGuidance:
      'Conexões começam em Configurações de App. Registre seu app OAuth lá, depois clique em Conectar para vinculá-lo aqui.',
    overviewDescription:
      'Suas ferramentas de trabalho conectadas. Adicione novas em Configurações de App.',
    manageAppConfigs: 'Gerenciar Configurações de App',
    goToAppConfigs: 'Ir para Configurações de App',
    connectorCreated: 'Conector criado com sucesso.',
    connectorCreateFailed: 'Falha ao criar conector.',
    connectorDeleted: 'Conector excluído com sucesso.',
    connectorDeleteFailed: 'Falha ao excluir conector.',
    healthCheckStarted: 'Verificação de saúde iniciada.',
    healthCheckFailed: 'Verificação de saúde falhou.',
    syncStarted: 'Sincronização iniciada.',
    syncFailed: 'Falha ao iniciar sincronização.',
    loadFailed: 'Falha ao carregar conectores.',
    loadingConnectors: 'Carregando conectores...',
    addConnector: 'Adicionar Conector',
    connectViaOAuth: 'Conectar via OAuth',
    lastSync: 'Última Sincronização',
    never: 'Nunca',
    syncRuns: 'Execuções de Sincronização',
    healthEvents: 'Eventos de Saúde',
    enabled: 'Ativado',
    disabled: 'Desativado',
    deleteConfirm: 'Tem certeza que deseja excluir este conector? Esta ação não pode ser desfeita.',
    namePlaceholder: 'ex.: Workspace do GitHub',
    paused: 'Pausado',
  },
  workspaceObjects: {
    title: 'Objetos Sincronizados',
    description: 'Objetos sincronizados das suas ferramentas de trabalho conectadas.',
    loading: 'Carregando objetos...',
    loadFailed: 'Falha ao carregar objetos da área de trabalho.',
    noObjects: 'Nenhum objeto sincronizado ainda.',
    noObjectsDesc: 'Dispare uma sincronização em um conector para importar objetos.',
    selectConnector: 'Selecione um conector para ver seus objetos sincronizados.',
    source: 'Origem',
    viewObject: 'Ver Objeto',
  },
  workspaceSearch: {
    title: 'Pesquisa de Área de Trabalho',
    description: 'Pesquise em todos os objetos sincronizados da área de trabalho.',
    placeholder: 'Pesquisar documentos, issues, mensagens...',
    searching: 'Pesquisando...',
    noResults: 'Nenhum resultado encontrado.',
    noResultsDesc: 'Tente um termo de pesquisa diferente ou sincronize mais conectores.',
    searchFailed: 'Pesquisa falhou. Tente novamente.',
    resultCount: '{count} resultado(s)',
    viewSource: 'Ver Origem',
    score: 'Relevância',
  },
  workspaceObjectDetail: {
    title: 'Detalhe do Objeto',
    description: 'Inspecione um objeto sincronizado e atualize a partir do seu provedor.',
    loadFailed: 'Falha ao carregar objeto.',
    refresh: 'Atualizar do provedor',
    refreshing: 'Atualizando...',
    refreshFailed: 'Atualização falhou.',
    content: 'Conteúdo',
    metadata: 'Metadados',
    externalCreated: 'Criado no upstream',
    externalUpdated: 'Atualizado no upstream',
    openInProvider: 'Abrir no provedor',
    author: 'Autor: {author}',
  },
  connectorDetail: {
    title: 'Detalhe do Conector',
    description:
      'Histórico de sincronização, eventos de saúde e objetos recentemente sincronizados para este conector.',
    loadFailed: 'Falha ao carregar conector.',
    never: 'nunca',
    lastSync: 'Última sincronização: {value}',
    syncRunsCount: '{count} execuções de sincronização',
    objectsCount: '{count} objetos',
    recentObjects: 'Objetos recentes',
    noObjects:
      'Nenhum objeto sincronizado ainda. Dispare uma sincronização para puxar objetos do provedor.',
    syncHistory: 'Histórico de sincronização',
    noSyncRuns: 'Nenhuma execução de sincronização ainda.',
    syncRunLine: '{synced} sincronizados · {failed} falharam',
    healthHistory: 'Histórico de saúde',
    noHealthEvents: 'Nenhuma verificação de saúde registrada ainda.',
    healthOk: 'OK',
    activating:
      'Ativando este conector — importando seu primeiro conjunto de objetos do provedor. Você pode continuar usando o Claw enquanto isso roda.',
    askAi: 'Perguntar à IA sobre isto',
    askAiTitle: 'Sobre {name}',
    reconnect: 'Reconectar',
    reconnectTitle: 'Este conector está desconectado',
    reconnectDescription:
      'As credenciais armazenadas não são mais válidas. Reautorize em Configurações de App para restaurar o acesso.',
  },
  workspaceSyncRuns: {
    title: 'Execuções de sincronização',
    description: 'Histórico recente de sincronização para este conector.',
    loading: 'Carregando execuções...',
    loadFailed: 'Falha ao carregar execuções de sincronização.',
    empty: 'Nenhuma execução de sincronização ainda.',
    started: 'Iniciado',
    status: 'Status',
    type: 'Tipo',
    delta: 'Delta',
    found: 'Encontrados',
    synced: 'Sincronizados',
    failed: 'Falharam',
    duration: 'Duração',
  },
  workspaceSync: {
    dashboard: {
      title: 'Saúde da Sincronização',
      description: 'Visão ao vivo dos trabalhos de sincronização agendados em cada conector.',
      error_title: 'Não foi possível carregar o painel de sincronização',
      empty_title: 'Nenhum conector ainda',
      empty_description:
        'Assim que você conectar uma ferramenta de trabalho, sua saúde de sincronização aparecerá aqui.',
      scheduler_title: 'Agendador',
      scheduler_enabled: 'Agendador ativado',
      last_tick: 'Último tick',
      active_runs: 'Execuções ativas',
      dlq_backlog: 'Fila de DLQ',
      connectors_title: 'Conectores',
      col: {
        connector: 'Conector',
        freshness: 'Frescor',
        last_sync: 'Última sincronização',
        cadence: 'Cadência',
        success_rate: 'Taxa de sucesso 24h',
        avg_duration: 'Duração média',
        status: 'Status',
      },
    },
    band: {
      fresh: 'Fresco',
      slow: 'Lento',
      stale: 'Obsoleto',
    },
    cadence: {
      label: 'Sincronizar a cada',
      '1m': '1 minuto',
      '5m': '5 minutos',
      '10m': '10 minutos',
      '30m': '30 minutos',
      '1h': '1 hora',
      save: 'Salvar cadência',
      saving: 'Salvando...',
      saved: 'Cadência atualizada',
    },
    pause: {
      pause: 'Pausar sincronização',
      resume: 'Retomar sincronização',
      paused_label: 'Sincronização pausada',
      reason_placeholder: 'Motivo (opcional)',
    },
    chip: {
      synced_ago: 'Sincronizado há {ago}',
      stale: 'Obsoleto',
      paused: 'Pausado',
    },
  },
  aiActions: {
    dialog: {
      title: 'Executar Ação de IA · {action}',
      description:
        'Escolha um modelo e gere. AUTO deixa o roteador escolher com base no tipo de ação e classe de privacidade.',
      model_label: 'Modelo',
      generate: 'Gerar',
      regenerate: 'Regenerar',
      resolving: 'A gerar…',
      cancel: 'Cancelar',
      close: 'Fechar',
      copy: 'Copiar',
      copied: 'Copiado',
      generated_by: 'Gerado por {model}',
      resolution_mode: 'Modo: {mode}',
      resolution_primary: 'Primário: {model}',
      resolution_fallback: 'Modelos fallback enfileirados: {count}',
    },
  },
  approvals: {
    page: {
      title: 'Central de Aprovações',
      description: 'Revise e aprove ações pendentes geradas por IA em seus conectores.',
      empty_title: 'Nenhuma aprovação pendente',
      empty_description: 'Quando a IA gerar uma ação em seu nome, ela aparecerá aqui para revisão.',
      error_title: 'Não foi possível carregar aprovações',
      error_description: 'Algo deu errado ao carregar a lista de aprovações. Tente novamente.',
    },
    card: {
      approve: 'Aprovar',
      reject: 'Rejeitar',
      edit: 'Editar',
      edited: 'Editado · v{version}',
      source_stale: 'Origem obsoleta',
      attribution_auto: 'AUTO · {model}',
      attribution_manual: 'Manual · {model}',
    },
    bulk: {
      selected: '{count} selecionados',
      approve_all: 'Aprovar todos os selecionados',
      clear: 'Limpar seleção',
    },
    edit: {
      title: 'Editar rascunho',
      description: 'Edite o payload da ação. O rascunho original é preservado no histórico.',
      payload_label: 'Payload (JSON)',
      reason_placeholder: 'Motivo da edição (opcional)',
      save: 'Salvar e re-aprovar depois',
      cancel: 'Cancelar',
      invalid_json: 'Payload deve ser JSON válido',
    },
    reject: {
      title: 'Rejeitar ação',
      description: 'Opcionalmente descreva por que está rejeitando esta ação.',
      reason_placeholder: 'Motivo (opcional)',
      confirm: 'Rejeitar',
      cancel: 'Cancelar',
    },
  },
  automationPreferences: {
    page: {
      title: 'Preferências de automação',
      description:
        'Controles por tipo de ação. Vence o mais restritivo: a política do admin é o piso; suas preferências só podem apertá-la.',
      loading: 'Carregando preferências…',
      error: 'Não foi possível carregar as preferências. Atualize.',
      empty: 'Nenhum tipo de ação ainda.',
    },
    row: {
      enabled: 'Habilitado',
      disabled: 'Desabilitado',
      toggleAria: 'Alternar automação para {kind}',
      autoApproveBelowRisk: 'Auto-aprovar quando o risco for ≤ ao limite',
      autoApproveDisabled: 'Auto-aprovação desativada (sempre em fila de revisão)',
      autoApproveAt: 'Auto-aprovar com risco ≤ {score}',
      perDayBudget: 'Limite diário',
      perDayBudgetPlaceholder: 'unlimited',
      clear: 'Limpar',
    },
  },
  connectorGrants: {
    title: 'Compartilhamento',
    description:
      'Compartilhe este conector com outros usuários. O proprietário sempre tem acesso total; os destinatários veem o nível de acesso que você escolher.',
    loading: 'Carregando permissões…',
    error: 'Não foi possível carregar as permissões.',
    empty: 'Ainda não há permissões. Este conector é acessível apenas para você.',
    granteeUserIdLabel: 'ID do usuário destinatário',
    granteeUserIdPlaceholder: 'cmnkgdc2c00009w92riuztmmd',
    accessLevelLabel: 'Nível de acesso',
    grant: 'Conceder acesso',
    granting: 'Concedendo…',
    revoke: 'Revogar',
    revoking: 'Revogando…',
    grantedBy: 'concedido por',
    levelReadOnly: 'Somente leitura',
    levelAiActions: 'Ações de IA',
    levelFull: 'Completo',
  },
  emailSignatures: {
    page: {
      title: 'Assinaturas de e-mail',
      description:
        'Gerencie as assinaturas adicionadas a e-mails redigidos por IA. Marque uma como padrão para uso automático.',
      loading: 'Carregando assinaturas…',
      error: 'Não foi possível carregar as assinaturas. Atualize a página.',
      empty: 'Ainda não há assinaturas. Crie uma para começar.',
      create: 'Nova assinatura',
      edit: 'Editar',
      delete: 'Excluir',
      deleting: 'Excluindo…',
      defaultBadge: 'Padrão',
    },
    dialog: {
      createTitle: 'Criar assinatura',
      editTitle: 'Editar assinatura',
      nameLabel: 'Nome',
      namePlaceholder: 'Assinatura profissional',
      bodyLabel: 'Conteúdo',
      bodyPlaceholder: 'Atenciosamente,\nAlice\nVP de Engenharia · Example Inc.',
      defaultLabel: 'Usar como padrão',
      save: 'Salvar',
      saving: 'Salvando…',
      cancel: 'Cancelar',
    },
  },
  research: {
    toggle: {
      placeholder: 'Pesquisa',
      autoProvider: 'Provedor Automático',
      noProviders: 'Nenhum provedor configurado',
    },
    modes: {
      off: 'Sem pesquisa',
      searchOnly: 'Pesquisa web',
      searchThenFetch: 'Pesquisa + busca',
      searchFetchExtract: 'Pesquisa + extração',
    },
    providers: {
      title: 'Provedores de Pesquisa',
      description: 'Provedores dinâmicos de pesquisa, busca e evidência.',
      createButton: 'Novo Provedor',
      createTitle: 'Adicionar Provedor de Pesquisa',
      createDescription: 'Registre um provedor Tavily / SearXNG / Ollama Web.',
      create: 'Criar',
      creating: 'Criando...',
      kind: 'Tipo',
      name: 'Nome',
      baseUrl: 'URL Base',
      apiKey: 'Chave de API (armazenada criptografada)',
      test: 'Testar',
      secretStored: 'Segredo armazenado',
      healthy: 'Saudável',
      unhealthy: 'Indisponível',
      loadFailed: 'Falha ao carregar provedores.',
      emptyTitle: 'Nenhum provedor de pesquisa',
      emptyDescription:
        'Adicione um provedor para começar a embasar o chat com evidências ao vivo.',
      col: {
        name: 'Nome',
        kind: 'Tipo',
        baseUrl: 'URL Base',
        status: 'Status',
        secret: 'Segredo',
        actions: 'Ações',
      },
      namePlaceholder: 'ex.: Tavily Produção',
    },
    runs: {
      title: 'Execuções de Pesquisa',
      description: 'Histórico de execuções de pesquisa disparadas do chat.',
      loadFailed: 'Falha ao carregar execuções.',
      emptyTitle: 'Nenhuma execução de pesquisa ainda',
      emptyDescription: 'Ative a pesquisa no chat para produzir evidências.',
    },
    evidence: {
      title: 'Evidência de pesquisa ao vivo',
      empty: 'Nenhum item de evidência retornado.',
      noTitle: '(sem título)',
      confidence: 'Confiança',
      warnings: 'Avisos',
      requestedModel: 'Modelo solicitado',
      toolsUsed: 'Ferramentas',
    },
    results: {
      open: 'Resultados da Pesquisa',
      title: 'Resultados da Pesquisa',
      description:
        'Inspecione a escolha de provedor, cadeia de fallback, pacote de evidências e rastro de pesquisa.',
      provider: 'Provedor',
      selectionMode: 'Seleção',
      selectionAuto: 'Automática',
      selectionExplicit: 'Explícita',
      fallbackUsed: 'Fallback usado',
      query: 'Consulta de pesquisa',
      evidenceCount: 'Itens de evidência',
      attempts: 'Tentativas de provedor',
      trace: 'Rastro de pesquisa',
    },
  },
  workspaceActions: {
    title: 'Ações de Área de Trabalho',
    description: 'Revise e aprove ações automáticas de escrita antes que sejam executadas.',
    approve: 'Aprovar',
    reject: 'Rejeitar',
    cancel: 'Cancelar',
    rejectTitle: 'Rejeitar Ação',
    rejectDesc: 'Forneça um motivo opcional para rejeitar esta ação.',
    rejectReasonPlaceholder: 'Motivo (opcional)',
    confirmReject: 'Confirmar Rejeição',
    connector: 'Conector',
    rejectionReason: 'Motivo da rejeição',
    pendingApproval: 'Aguardando Aprovação',
    executing: 'Executando',
    executed: 'Executada',
    failed: 'Falhou',
    rejected: 'Rejeitada',
    noActions: 'Nenhuma ação encontrada',
    noActionsDesc: 'Ações automáticas de escrita criadas pela IA aparecerão aqui para sua revisão.',
    loadFailed: 'Falha ao carregar ações.',
    viewPayload: 'Ver payload',
    requestedAt: 'solicitada em {value}',
    reviewedAt: 'revisada em {value}',
    executedAt: 'executada em {value}',
    approved: 'Aprovado',
    expired: 'Expirado',
    edited: 'Editado',
  },
  workspaceProviders: {
    catalog: {
      title: 'Catálogo de Provedores de Área de Trabalho',
      description: 'Navegue pelas integrações de área de trabalho suportadas.',
      loadFailed: 'Falha ao carregar o catálogo de provedores.',
      emptyTitle: 'Nenhum provedor disponível',
      emptyDescription: 'Nenhum provedor de área de trabalho está registrado ainda.',
      available: 'Disponível',
      comingSoon: 'Em breve',
      objectTypes: 'tipos de objeto',
      docs: 'Documentação',
    },
    appConfigs: {
      title: 'Configurações de App de Provedores',
      description: 'Registre apps OAuth e credenciais para provedores de área de trabalho.',
      createButton: 'Nova Configuração',
      createTitle: 'Criar configuração de app do provedor',
      createDescription: 'Registre credenciais OAuth ou um token de acesso pessoal.',
      create: 'Criar',
      creating: 'Criando...',
      editTitle: 'Editar configuração da aplicação do fornecedor',
      editDescription:
        'Atualize os valores de configuração e metadados deste fornecedor. Deixe os campos secretos em branco para mantê-los inalterados.',
      editSecretHint:
        'Os campos secretos deixados em branco manterão o valor anteriormente armazenado. Preencha-os apenas para rodar credenciais.',
      save: 'Guardar',
      saving: 'A guardar…',
      provider: 'Provedor',
      providerPlaceholder: 'Selecione um provedor...',
      name: 'Nome',
      namePlaceholder: 'ex.: app de produção GitHub',
      authMode: 'Modo de autenticação',
      descriptionLabel: 'Descrição',
      descriptionPlaceholder: 'Notas opcionais sobre esta configuração',
      test: 'Testar',
      connect: 'Conectar',
      testResult: 'Resultado do teste: {status} ({latency}ms)',
      secretStored: 'Segredo armazenado',
      emptyTitle: 'Nenhuma configuração de provedor ainda',
      emptyDescription:
        'Adicione suas primeiras credenciais de provedor para habilitar conectores.',
      loadFailed: 'Falha ao carregar configurações de app.',
      fields: {
        secret: '(segredo)',
      },
      columns: {
        name: 'Nome',
        provider: 'Provedor',
        authMode: 'Autenticação',
        status: 'Status',
        secret: 'Segredo',
        lastValidated: 'Última validação',
        actions: 'Ações',
      },
      errors: {
        nameRequired: 'Um nome é obrigatório.',
      },
    },
    oauthCallback: {
      exchangingTitle: 'Concluindo conexão...',
      exchangingDescription: 'Trocando o código de autorização com o provedor.',
      successTitle: 'Conectado!',
      successDescription: 'Redirecionando você de volta à área de trabalho...',
      successDescriptionNamed: '{name} conectado. Redirecionando você de volta...',
      errorTitle: 'Falha na conexão',
      errorUnknown: 'Ocorreu um erro desconhecido.',
    },
  },
  agent: {
    title: 'Agente Desktop',
    description: 'Gerencie agentes desktop conectados e comandos de terminal.',
    loading: 'Carregando sessões do agente...',
    loadFailed: 'Falha ao carregar dados do agente.',
    noSessions: 'Nenhuma sessão ativa',
    noSessionsDesc: 'Inicie o agente desktop Claw na sua máquina para conectar.',
    noCommands: 'Nenhum comando',
    noCommandsDesc: 'Comandos de terminal pendentes aparecerão aqui.',
    noRepos: 'Nenhum repositório',
    noReposDesc: 'Repositórios detectados pelo agente aparecerão aqui.',
    terminal: 'Comandos de Terminal',
    terminalDesc: 'Aprovar ou rejeitar comandos de terminal solicitados pelo agente.',
    capabilities: 'Fila de Capacidades',
    capabilitiesDesc:
      'Aprovar ou rejeitar invocações de capacidades em sistema de arquivos, processos, navegador e outras classes.',
    capabilityClass: 'Classe',
    capabilityOperation: 'Operação',
    blastRadius: 'Raio de Impacto',
    reversibility: 'Reversibilidade',
    riskScore: 'Pontuação de Risco',
    matchedPolicy: 'Política Correspondente',
    activity: 'Atividade do Agente',
    activityDesc: 'Capacidades recentes e execuções de receitas em todos os seus dispositivos.',
    autoApproved: 'Aprovado automaticamente',
    denied: 'Negado',
    rolledBack: 'Revertido',
    recipes: 'Receitas',
    recipesDesc: 'Automações multipasso que encadeiam invocações de capacidades.',
    noRecipes: 'Ainda sem receitas',
    noRecipesDesc: 'Crie uma receita para automatizar fluxos multipasso.',
    recipeRunDetail: 'Detalhe de Execução',
    recipeRunDetailDesc: 'Progresso em tempo real da execução de uma receita.',
    runStatus: 'Status de Execução',
    cancelRun: 'Cancelar Execução',
    steps: 'Passos',
    marketplace: 'Mercado de Receitas',
    marketplaceDesc: 'Navegue e instale receitas assinadas publicadas pela comunidade.',
    noListings: 'Ainda sem listagens',
    noListingsDesc: 'Quando publicadores enviam receitas assinadas, elas aparecem aqui.',
    install: 'Instalar',
    activityMemory: 'Memória de Atividade',
    activityMemoryDesc:
      'Entradas de atividade sincronizadas na nuvem optadas dos seus dispositivos.',
    noActivity: 'Ainda sem entradas de atividade',
    noActivityDesc:
      'Atividade registrada em seus dispositivos só aparece aqui após opt-in para sync na nuvem.',
    repos: 'Repositórios',
    reposDesc: 'repositórios detectados',
    pendingCommands: 'Comandos Pendentes',
    pendingApproval: 'Aprovação Pendente',
    recentCommands: 'Comandos Recentes',
    approve: 'Aprovar',
    reject: 'Rejeitar',
    version: 'Versão',
    commands: 'comandos',
    files: 'arquivos',
    dirty: 'Modificado',
    connect: {
      title: 'Conectar um dispositivo',
      approveDescription: 'Revise os detalhes do dispositivo e escopos antes de aprovar.',
      scopesLabel: 'Permissões (escopos)',
      approveButton: 'Aprovar',
      denyButton: 'Cancelar',
      successTitle: 'Dispositivo pareado',
      successBody: 'Você pode fechar esta aba e voltar ao seu terminal.',
      expiredTitle: 'Link de pareamento inválido ou expirado',
      expiredBody: 'Execute `claw-agent login` novamente para iniciar um novo pareamento.',
      deniedTitle: 'Aprovação cancelada',
      deniedBody: 'Nenhuma credencial foi emitida. Você pode fechar esta aba.',
      accountMismatchTitle: 'Conta incorreta',
      accountMismatchBody: 'Entre com a conta à qual deseja parear este dispositivo.',
      deviceNamePlaceholder: 'ex.: Meu MacBook Pro',
    },
    rejectedByUser: 'Rejeitado pelo usuário',
  },
  discovery: {
    title: 'Descoberta de Modelos',
    description: 'Descubra, classifique e aprove novos modelos Ollama dinamicamente.',
    searchPlaceholder: 'Pesquisar candidatos...',
    filter: {
      status: 'Status',
      all: 'Todos',
      pending: 'Pendente',
      approved: 'Aprovado',
      rejected: 'Rejeitado',
      imported: 'Importado',
      duplicate: 'Duplicado',
    },
    actions: {
      refresh: 'Executar Descoberta',
      dryRun: 'Execução de Teste',
      approve: 'Aprovar',
      reject: 'Rejeitar',
    },
    runs: {
      title: 'Execuções Recentes de Descoberta',
      empty: 'Nenhuma execução de descoberta ainda. Clique em "Executar Descoberta" para iniciar.',
      discovered: 'descobertos',
      imported: 'importados',
      skipped: 'ignorados',
    },
    candidates: {
      title: 'Candidatos',
      empty: {
        title: 'Nenhum candidato',
        description: 'Dispare uma execução de descoberta para encontrar novos modelos.',
      },
    },
    candidate: {
      size: 'Tamanho',
      confidence: 'Confiança',
    },
    packs: {
      title: 'Pacotes de Hardware',
      empty: 'Nenhum pacote de hardware configurado.',
      install: 'Instalar Pacote',
      noModelsYet: 'Nenhum modelo corresponde a este perfil ainda.',
    },
  },
  validation: {
    required: 'Este campo é obrigatório',
    invalidEmail: 'Insira um endereço de e-mail válido',
    tooShort: 'Deve ter pelo menos {min} caracteres',
    tooLong: 'Deve ter no máximo {max} caracteres',
    invalidUrl: 'Insira uma URL válida',
    fileTooLarge: 'O tamanho do arquivo excede o máximo permitido',
    invalidFileType: 'Este tipo de arquivo não é suportado',
  },
  toast: {
    loginSuccess: 'Login bem-sucedido',
    loginFailed: 'Falha ao fazer login',
    logoutFailed: 'Falha ao fazer logout',
    sessionExpired: 'Sessão expirada, faça login novamente',
  },
  accessibility: {
    closeSidebar: 'Fechar barra lateral',
    openSidebar: 'Abrir barra lateral',
    toggleSidebar: 'Alternar barra lateral',
    userMenu: 'Menu do usuário',
    closeDialog: 'Fechar diálogo',
    openMenu: 'Abrir menu',
    search: 'Pesquisar',
    openSearch: 'Abrir pesquisa',
    closeSearch: 'Fechar pesquisa',
    navigation: 'Navegação principal',
    notifications: 'Notificações',
    languageSelector: 'Selecionar idioma',
    themeToggle: 'Alternar tema',
    resizeInput: 'Redimensionar entrada de mensagem',
  },
  actions: {
    test: 'Testar',
    testing: 'Testando...',
    sync: 'Sincronizar',
    syncing: 'Sincronizando...',
    archive: 'Arquivar',
    unarchive: 'Desarquivar',
    pin: 'Fixar',
    unpin: 'Desafixar',
    duplicate: 'Duplicar',
    copy: 'Copiar',
    copied: 'Copiado',
    copyToClipboard: 'Copiar para área de transferência',
    view: 'Ver',
    viewAll: 'Ver todos',
    viewDetails: 'Ver detalhes',
    download: 'Baixar',
    upload: 'Enviar',
    refresh: 'Atualizar',
    reset: 'Redefinir',
    apply: 'Aplicar',
    approve: 'Aprovar',
    approving: 'Aprovando...',
    reject: 'Rejeitar',
    rejecting: 'Rejeitando...',
    reload: 'Recarregar',
    reconnect: 'Reconectar',
    expand: 'Expandir',
    collapse: 'Recolher',
    enable: 'Ativar',
    disable: 'Desativar',
    remove: 'Remover',
    add: 'Adicionar',
    select: 'Selecionar',
    selectAll: 'Selecionar todos',
    deselectAll: 'Desmarcar todos',
    clear: 'Limpar',
    submit: 'Enviar',
    more: 'Mais',
    less: 'Menos',
    showMore: 'Mostrar mais',
    showLess: 'Mostrar menos',
  },
  logs: {
    allLevels: 'Todos os Níveis',
    allActions: 'Todas as Ações',
    allSeverities: 'Todas as Severidades',
    allMethods: 'Todos os Métodos',
    methodPlaceholder: 'Método',
    componentPlaceholder: 'Componente...',
    actionPlaceholder: 'Ação...',
    routePlaceholder: 'Rota...',
    routeRegexPlaceholder: 'Rota (regex)...',
    userIdPlaceholder: 'ID do usuário...',
    messageContainsPlaceholder: 'Mensagem contém...',
    servicePlaceholder: 'Serviço...',
    controllerPlaceholder: 'Controlador...',
    entityTypePlaceholder: 'Tipo de entidade...',
    startDate: 'Data de início',
    endDate: 'Data de término',
    fullTextSearch: 'Pesquisa de texto completo...',
    searchAllFields: 'Pesquisar em todos os campos...',
    avgLatency: 'Latência média',
    errors: 'Erros',
    failedToLoadClient: 'Falha ao carregar logs do cliente',
    failedToLoadClientDesc: 'Não foi possível buscar os logs do cliente no servidor',
    failedToLoadServer: 'Falha ao carregar logs do servidor',
    failedToLoadServerDesc: 'Não foi possível buscar os logs do servidor',
    levelDistribution: 'Distribuição por nível',
    loadingClient: 'Carregando logs do cliente...',
    loadingServer: 'Carregando logs do servidor...',
    noActionData: 'Nenhum dado de ação',
    noClientLogs: 'Nenhum log do cliente',
    noClientLogsActivityDesc: 'Nenhuma atividade de log do cliente foi registrada ainda',
    noComponentData: 'Nenhum dado de componente',
    noServerLogs: 'Nenhum log do servidor',
    noServerLogsActivityDesc: 'Nenhuma atividade de log do servidor foi registrada ainda',
    noServiceData: 'Nenhum dado de serviço',
    percentOfTotal: '% do total',
    topActions: 'Principais ações',
    topComponents: 'Principais componentes',
    topServices: 'Principais serviços',
    totalLogs: 'Total de logs',
  },
  gmail: {
    page: {
      title: 'Gmail',
      description: 'Navegue e gerencie mensagens do Gmail sincronizadas.',
      empty_title: 'Nenhum e-mail sincronizado',
      empty_description:
        'Nenhum e-mail foi sincronizado ainda. Acione uma sincronização no seu conector Gmail.',
      error_title: 'Não foi possível carregar os e-mails',
      no_connector_title: 'Nenhum conector Gmail encontrado',
      no_connector_description:
        'Conecte uma conta Gmail nos Conectores do Espaço de Trabalho para navegar na sua caixa de entrada.',
    },
    message: {
      from: 'De',
      to: 'Para',
      date: 'Data',
      subject: 'Assunto',
      reply: 'Responder',
      open_in_gmail: 'Abrir no Gmail',
      unread: 'Não lido',
      attachments: 'Anexos ({count})',
      download: 'Baixar {name}',
      htmlIframeTitle: 'Corpo do e-mail',
      toggleHtml: 'Alternar HTML',
      showHtml: 'Mostrar HTML',
      toggleImages: 'Alternar imagens',
      loadImages: 'Carregar imagens',
      imagesBlocked: 'Imagens bloqueadas',
    },
    actions: {
      summarize: 'Resumir',
      draft_reply: 'Rascunhar resposta',
      extract_tasks: 'Extrair tarefas',
      send_email: 'Enviar e-mail',
      draft_sent: 'Rascunho criado — revise em Aprovações',
      draft_failed: 'Falha ao criar rascunho',
    },
  },
  jira: {
    page: {
      title: 'Jira',
      description: 'Navegue e gerencie tickets Jira sincronizados.',
      empty_title: 'Nenhum ticket sincronizado',
      empty_description:
        'Nenhum ticket Jira foi sincronizado ainda. Acione uma sincronização no seu conector Jira para carregar tickets.',
      error_title: 'Não foi possível carregar os tickets',
      no_connector_title: 'Nenhum conector Jira encontrado',
      no_connector_description:
        'Conecte uma conta Jira nos Conectores do Workspace para começar a navegar seus tickets.',
    },
    ticket: {
      status: 'Status',
      priority: 'Prioridade',
      assignee: 'Responsável',
      reporter: 'Relator',
      project: 'Projeto',
      sprint: 'Sprint',
      story_points: 'Pontos de história',
      due_date: 'Prazo',
      labels: 'Rótulos',
      issue_type: 'Tipo',
      open_in_jira: 'Abrir no Jira',
      unassigned: 'Não atribuído',
      no_sprint: 'Sem sprint',
    },
    actions: {
      summarize: 'Resumir',
      write_comment: 'Escrever comentário',
      extract_tasks: 'Extrair tarefas',
    },
  },
  source_control: {
    page: {
      title: 'Controle de versão',
      description: 'Navegue pull requests do GitHub, GitLab e Bitbucket.',
      empty_title: 'Nenhuma pull request sincronizada',
      empty_description:
        'Nenhuma pull request foi sincronizada ainda. Acione uma sincronização no seu conector de controle de versão.',
      error_title: 'Não foi possível carregar as pull requests',
      no_connector_title: 'Nenhum conector de controle de versão encontrado',
      no_connector_description: 'Conecte GitHub, GitLab ou Bitbucket nos Conectores do Workspace.',
    },
    pr: {
      author: 'Autor',
      source_branch: 'De',
      target_branch: 'Para',
      reviewers: 'Revisores',
      additions: 'Adições',
      deletions: 'Exclusões',
      labels: 'Rótulos',
      draft: 'Rascunho',
      open_pr: 'Abrir PR',
      state_open: 'Aberto',
      state_closed: 'Fechado',
      state_merged: 'Mesclado',
      review_approved: 'Aprovado',
      review_changes: 'Alterações solicitadas',
      review_pending: 'Revisão pendente',
    },
    actions: {
      review: 'Revisar PR',
      summarize: 'Resumir',
      extract_tasks: 'Extrair tarefas',
    },
  },
  slack: {
    page: {
      title: 'Slack',
      description: 'Navegue e gerencie mensagens Slack sincronizadas.',
      empty_title: 'Nenhuma mensagem sincronizada',
      empty_description:
        'Nenhuma mensagem Slack foi sincronizada ainda. Acione uma sincronização no seu conector Slack.',
      error_title: 'Não foi possível carregar as mensagens',
      no_connector_title: 'Nenhum conector Slack encontrado',
      no_connector_description: 'Conecte um workspace Slack nos Conectores do Workspace.',
    },
    message: {
      channel: 'Canal',
      sender: 'De',
      date: 'Data',
      thread_reply: 'Resposta em thread',
      open_in_slack: 'Abrir no Slack',
      reactions: 'Reações',
    },
    actions: {
      summarize: 'Resumir',
      reply: 'Rascunhar resposta',
      extract_tasks: 'Extrair tarefas',
    },
  },
  confluence: {
    page: {
      title: 'Confluence',
      description: 'Navegue e gerencie páginas Confluence sincronizadas.',
      empty_title: 'Nenhuma página sincronizada',
      empty_description:
        'Nenhuma página Confluence foi sincronizada ainda. Acione uma sincronização no seu conector Confluence.',
      error_title: 'Não foi possível carregar as páginas',
      no_connector_title: 'Nenhum conector Confluence encontrado',
      no_connector_description:
        'Conecte um workspace Confluence nos Conectores do Workspace para explorar páginas.',
    },
    article: {
      space: 'Espaço',
      author: 'Autor',
      modified_by: 'Modificado por',
      version: 'Versão',
      labels: 'Etiquetas',
      parent: 'Pai',
      open_page: 'Abrir no Confluence',
    },
    actions: {
      summarize: 'Resumir',
      extract_tasks: 'Extrair tarefas',
      write_comment: 'Escrever comentário',
    },
  },
  docs: {
    page: {
      title: 'Documentos',
      description:
        'Navegue e gerencie documentos sincronizados do Google Drive, OneDrive e SharePoint.',
      empty_title: 'Nenhum documento sincronizado',
      empty_description:
        'Nenhum documento foi sincronizado ainda. Acione uma sincronização no seu conector Drive ou SharePoint.',
      error_title: 'Não foi possível carregar os documentos',
      no_connector_title: 'Nenhum conector de documentos encontrado',
      no_connector_description:
        'Conecte o Google Drive, OneDrive ou SharePoint nos Conectores do Workspace para explorar documentos.',
    },
    file: {
      owner: 'Proprietário',
      modified_by: 'Modificado por',
      size: 'Tamanho',
      type: 'Tipo',
      open_file: 'Abrir arquivo',
      shared_with: 'Compartilhado com',
      path: 'Caminho',
    },
    actions: {
      summarize: 'Resumir',
      extract_tasks: 'Extrair tarefas',
      draft_email: 'Rascunhar e-mail',
    },
  },
  figma: {
    page: {
      title: 'Figma',
      description: 'Navegue e gerencie arquivos de design Figma sincronizados.',
      empty_title: 'Nenhum design encontrado',
      empty_description: 'Nenhum arquivo de design Figma foi sincronizado ainda.',
      error_title: 'Falha ao carregar designs',
      no_connector_title: 'Figma não conectado',
      no_connector_description: 'Conecte seu espaço de trabalho Figma para navegar pelos designs.',
    },
    design: {
      team: 'Equipa',
      project: 'Projeto',
      modified_by: 'Modificado por',
      components: 'Componentes',
      open_in_figma: 'Abrir no Figma',
      last_updated: 'Última atualização',
    },
    actions: {
      summarize: 'Resumir design',
      extract_components: 'Extrair componentes',
      draft_spec: 'Rascunhar especificação',
    },
  },
  workflow: {
    page: {
      title: 'Fluxos entre Espaços de Trabalho',
      description:
        'Selecione objetos de vários provedores e execute ações de IA no contexto combinado.',
      empty_title: 'Nenhum objeto encontrado',
      empty_description: 'Nenhum objeto do espaço de trabalho foi sincronizado ainda.',
      error_title: 'Falha ao carregar objetos',
    },
    object: {
      add: 'Adicionar',
      remove: 'Remover',
      selected_count: 'objetos selecionados',
      clear_all: 'Limpar tudo',
    },
    actions: {
      summarize_all: 'Resumir tudo',
      extract_requirements: 'Extrair requisitos',
      draft_prd: 'Rascunhar PRD',
    },
  },
  gpuBadge: {
    cpuOnly: 'Apenas CPU',
    noGpu: 'Nenhuma GPU detectada — clique para ver modelos locais',
    vendor: {
      nvidia: 'NVIDIA',
      amd: 'AMD ROCm',
      metal: 'Metal',
      intel: 'Intel/Vulkan',
      unknown: 'GPU',
      cpu: 'CPU',
    },
  },
  localFrontier: {
    title: 'Modelos Frontier locais',
    subtitle:
      'Execute LLMs frontier de pesos abertos (Kimi K2, GLM-5.1, DeepSeek V3.2/V4) localmente.',
    loading: 'Carregando catálogo…',
    catalogEmpty: 'Nenhum modelo corresponde aos filtros.',
    catalogError: 'Falha ao carregar o catálogo. Verifique claw-llamacpp-service.',
    contextLength: 'tokens de contexto',
    requiresRamGb: 'GB RAM',
    sourceLink: 'HuggingFace',
    actions: {
      download: 'Baixar',
      load: 'Carregar',
      unload: 'Descarregar',
      deleteWeights: 'Excluir pesos',
      configure: 'Configurar runtime',
    },
    download: { start: 'Baixar', cancel: 'Cancelar', retry: 'Tentar novamente' },
    compat: {
      fits: 'Compatível com seu hardware',
      warns: 'Hardware no limite',
      refuses: 'Hardware insuficiente',
    },
    qualityTier: { survival: 'Sobrevivência', balanced: 'Equilibrado', best: 'Melhor' },
    preflight: {
      RAM_INSUFFICIENT: 'RAM insuficiente para este modelo.',
      DISK_INSUFFICIENT: 'Espaço em disco insuficiente (não é possível ignorar).',
      GPU_INSUFFICIENT: 'Nenhuma GPU compatível detectada.',
      BINARY_NOT_INSTALLED: 'Binário llama-server ainda não instalado.',
      RUNTIME_INCOMPATIBLE: 'O runtime instalado não pode executar este modelo.',
    },
    override: {
      warning: 'Seu hardware está abaixo dos requisitos. Ignore apenas se entender o risco.',
      confirmTypeSize: 'Digite o tamanho do modelo em GB para confirmar a substituição:',
    },
    delete: {
      confirm: 'Excluir pesos?',
      confirmTypePrompt: 'Digite o nome do modelo (ex. glm-5.1:Q4_K_M) para confirmar a exclusão.',
    },
    hardware: {
      title: 'Hardware e runtime',
      subtitle: 'Snapshot ao vivo desta máquina e do binário llama.cpp.',
      refresh: 'Atualizar',
      ram: 'RAM',
      disk: 'Disco',
      cpu: 'CPU',
      gpu: 'GPU',
      binary: 'Binário',
      cores: 'núcleos',
      noGpu: 'Nenhuma GPU detectada',
      notInstalled: 'Não instalado',
      loadedModel: 'Modelo carregado',
      noLoadedModel: 'Nenhum carregado',
    },
    filters: {
      category: 'Categoria',
      qualityTier: 'Nível de qualidade',
      compatibleOnly: 'Apenas compatíveis',
      refreshCatalog: 'Atualizar catálogo',
      refreshing: 'Atualizando…',
      allCategories: 'Todas as categorias',
      allTiers: 'Todos os níveis',
      categoryCoding: 'Código',
      categoryReasoning: 'Raciocínio',
      categoryThinking: 'Pensamento',
      categoryGeneral: 'Geral',
      categoryFileGen: 'Geração de arquivos',
    },
    downloads: {
      title: 'Downloads ativos',
      empty: 'Sem downloads ativos ou recentes.',
      cancel: 'Cancelar',
      retry: 'Tentar novamente',
      remove: 'Fechar',
      status: 'Status',
      bytes: 'Bytes',
      files: 'Arquivos',
      rate: 'Taxa',
      eta: 'Previsão',
      unknown: 'Preparando…',
    },
    deleteDialog: {
      title: 'Excluir pesos',
      description: 'Remove permanentemente os pesos baixados do disco.',
      promptLabel: 'Digite para confirmar',
      placeholder: 'modelo:tag',
      cancel: 'Cancelar',
      confirm: 'Excluir pesos',
      warning: 'Não pode ser desfeito. Você precisará baixar novamente para usar este modelo.',
    },
    overrideDialog: {
      title: 'Substituir verificação de hardware?',
      description: 'Sua máquina não atende às especificações recomendadas.',
      reasonsTitle: 'Motivos:',
      cancel: 'Cancelar',
      proceed: 'Baixar mesmo assim',
    },
    configDialog: {
      title: 'Configuração de runtime',
      description: 'Ajuste os parâmetros llama.cpp para o modelo carregado.',
      ngpuLayers: 'Camadas GPU',
      ngpuLayersHint: 'Camadas para descarregar na GPU. Vazio = automático.',
      ctxSize: 'Tamanho do contexto',
      ctxSizeHint: 'Janela de contexto máxima em tokens.',
      threads: 'Threads CPU',
      threadsHint: 'Número de threads CPU. Vazio = automático.',
      cpuMoe: 'CPU MoE',
      cpuMoeHint: 'Executar camadas mixture-of-experts apenas na CPU.',
      customArgs: 'Args personalizados',
      customArgsHint: 'Flags llama-server adicionais (allowlist aplicada).',
      cancel: 'Cancelar',
      save: 'Salvar',
    },
  },

  emailTemplates: {
    page: {
      title: 'Modelos de e-mail',
      description:
        'Pontos de partida reutilizáveis (assunto + corpo) para e-mails redigidos por IA. Os {{placeholders}} são preenchidos ao usar o modelo.',
      loading: 'Carregando modelos…',
      error: 'Não foi possível carregar os modelos. Atualize a página.',
      empty: 'Ainda não há modelos. Crie um para começar.',
      create: 'Novo modelo',
      edit: 'Editar',
      delete: 'Excluir',
      deleting: 'Excluindo…',
      defaultBadge: 'Padrão',
      subjectLabel: 'Assunto',
    },
    dialog: {
      createTitle: 'Criar modelo',
      editTitle: 'Editar modelo',
      nameLabel: 'Nome',
      namePlaceholder: 'E-mail de acompanhamento',
      subjectLabel: 'Assunto',
      subjectPlaceholder: 'Acompanhamento sobre {{topic}}',
      bodyLabel: 'Corpo',
      bodyPlaceholder: 'Olá {{name}},\n\nRetomando o assunto de {{topic}}…',
      defaultLabel: 'Usar como padrão',
      save: 'Salvar',
      saving: 'Salvando…',
      cancel: 'Cancelar',
    },
  },

  inbox: {
    page: {
      title: 'Caixa de entrada do espaço',
      description:
        'Cross-provider feed of every recent workspace object — filter by provider, type, attention.',
      loading: 'Carregando caixa…',
      loadingMore: 'Carregando mais…',
      loadMore: 'Carregar mais',
      empty: 'Nenhum item corresponde aos filtros.',
      error: 'Não foi possível carregar a caixa. Atualize.',
    },
    filter: {
      providers: 'Provedor:',
      types: 'Tipo:',
      needsAttention: 'Requer atenção',
      hasSuggestion: 'Tem sugestão',
      reset: 'Redefinir filtros',
    },
    row: {
      needsAttention: 'Requer atenção',
      hasSuggestion: 'Tem sugestão',
      mark: 'Marcar como urgente',
      unmark: 'Remover urgência',
      openExternal: 'Abrir',
      viewFile: 'Ver arquivo',
    },
  },
  fileViewer: {
    loading: 'Carregando arquivo…',
    error: 'Não foi possível carregar este arquivo.',
    unsupported:
      'Pré-visualização indisponível para este tipo de arquivo. Use Baixar para abri-lo localmente.',
    download: 'Baixar',
    close: 'Fechar',
  },
  search: {
    page: {
      title: 'Busca semântica',
      description: 'Pesquise todos os seus objetos — embeddings locais com privacidade.',
      placeholder: 'Type a natural-language question…',
      submit: 'Pesquisar',
      searching: 'Pesquisando…',
      reset: 'Redefinir',
      local: 'Embeddings locais ({model})',
      noResults: 'Nenhuma correspondência. Tente outras palavras.',
      error: 'A busca falhou. Tente novamente.',
    },
  },
  digest: {
    page: {
      title: 'Resumo',
      description: 'Seu resumo matinal: o que mudou em cada espaço conectado.',
      loading: 'Carregando resumo…',
      error: 'Não foi possível carregar o resumo.',
      noTodayDigest: 'Sem resumo para hoje. Gere um ou aguarde o cron.',
      today: 'Resumo de hoje',
      history: 'Resumos anteriores',
      generatedAt: 'Gerado {ts}',
      sectionsCount: '{n} sections',
      triggerDaily: 'Gerar resumo diário',
      triggerWeekly: 'Gerar resumo semanal',
      triggering: 'Gerando…',
      preferenceHint: 'Entrega diária: {hour}:00 ({tz})',
    },
    section: {
      highlights: 'Destaques',
      actionItems: 'Ações',
    },
  },
  adminAutomation: {
    dismiss: 'Dispensar',
    retry: 'Tentar novamente',
    policies: {
      title: 'Políticas de ação IA',
      description:
        'Regras de aprovação rigorosas por padrão. As predefinições do sistema podem ser desativadas mas não excluídas.',
      loading: 'Carregando políticas…',
      error: 'Não foi possível carregar as políticas.',
      empty: 'Nenhuma política configurada.',
      systemDefault: 'Padrão do sistema',
      priority: 'Prioridade {p}',
      providerRegex: 'Regex de provedor',
      actionKindRegex: 'Regex tipo de ação',
      riskCeiling: 'Limite de risco',
      delete: 'Excluir',
      cannotDelete: 'Os padrões do sistema não podem ser excluídos',
      toggleActive: 'Alternar ativo',
      toggleSucceeded: 'Política atualizada.',
      toggleFailed: 'Não foi possível atualizar a política.',
      deleteSucceeded: 'Política excluída.',
      deleteFailed: 'Não foi possível excluir a política.',
      mutationError: 'Ocorreu um erro ao atualizar a política.',
      addPolicy: 'Adicionar política',
      editPolicy: 'Editar política',
      createTitle: 'Criar política',
      editTitle: 'Editar política',
      createDescription:
        'Defina uma nova regra de aprovação para ações do workspace redigidas por IA.',
      editDescription: 'Atualize esta regra de aprovação. O nome não pode ser alterado.',
      createSucceeded: 'Política criada.',
      createFailed: 'Não foi possível criar a política.',
      updateSucceeded: 'Política atualizada.',
      updateFailed: 'Não foi possível atualizar a política.',
      submit: 'Salvar política',
      submitting: 'Salvando…',
      nameLabel: 'Nome',
      nameHelp: 'Identificador em minúsculas no formato kebab-case (ex.: deny-pii).',
      descriptionLabel: 'Descrição',
      kindFieldLabel: 'Tipo',
      requireReasonLabel: 'Exigir motivo para HIGH/CRITICAL',
      isActiveLabel: 'Ativa',
      riskMaxScoreLabel: 'Pontuação máxima de risco (0–100)',
      priorityLabel: 'Prioridade (0–10000)',
      kindLabel: {
        DENY: 'Negar',
        ALLOW: 'Permitir',
        AUTO_APPROVE: 'Aprovar automaticamente',
      },
      riskLabel: {
        LOW: 'Baixo',
        MEDIUM: 'Médio',
        HIGH: 'Alto',
        CRITICAL: 'Crítico',
      },
    },
    rules: {
      title: 'Regras de gatilho',
      description:
        'Regras que convertem eventos brutos do provedor em sugestões de rascunho. Edite, desative ou exclua.',
      loading: 'Carregando regras…',
      error: 'Não foi possível carregar as regras.',
      empty: 'Nenhuma regra configurada.',
      systemDefault: 'Padrão do sistema',
      priority: 'Prioridade {p}',
      eventType: 'Tipo de evento',
      actionKind: 'Tipo de ação',
      providerRegex: 'Regex de provedor',
      contentRegex: 'Regex de conteúdo',
      delete: 'Excluir',
      cannotDelete: 'Os padrões do sistema não podem ser excluídos',
      toggleActive: 'Alternar ativo',
      toggleSucceeded: 'Regra atualizada.',
      toggleFailed: 'Não foi possível atualizar a regra.',
      deleteSucceeded: 'Regra excluída.',
      deleteFailed: 'Não foi possível excluir a regra.',
      mutationError: 'Ocorreu um erro ao atualizar a regra.',
      addRule: 'Adicionar regra',
      editRule: 'Editar regra',
      createTitle: 'Criar regra',
      editTitle: 'Editar regra',
      createDescription: 'Defina quando redigir uma sugestão a partir de um evento do workspace.',
      editDescription: 'Atualize esta regra de gatilho. O nome não pode ser alterado.',
      createSucceeded: 'Regra criada.',
      createFailed: 'Não foi possível criar a regra.',
      updateSucceeded: 'Regra atualizada.',
      updateFailed: 'Não foi possível atualizar a regra.',
      submit: 'Salvar regra',
      submitting: 'Salvando…',
      nameLabel: 'Nome',
      nameHelp: 'Identificador em minúsculas no formato kebab-case (ex.: github-pr-opened).',
      descriptionLabel: 'Descrição',
      eventTypeHelp: 'Padrão de evento como workspace.webhook.received.',
      actionKindHelp: 'Tipo de ação como SUMMARIZE, DRAFT, REWRITE.',
      isActiveLabel: 'Ativa',
      priorityLabel: 'Prioridade (0–10000)',
    },
  },
  adminWebhooks: {
    page: {
      title: 'Entregas de webhook',
      description: 'Inspecione e reproduza as entregas de webhook recebidas dos seus provedores.',
      loading: 'Carregando entregas…',
      error: 'Falha ao carregar as entregas de webhook.',
      empty: 'Nenhuma entrega corresponde aos seus filtros.',
    },
    filter: {
      providerPlaceholder: 'Filtrar por provedor (ex. GITHUB)',
      connectorPlaceholder: 'Filtrar por ID do conector',
      signaturePlaceholder: 'Estado da assinatura',
      signatureAny: 'Qualquer assinatura',
      signatureValid: 'Assinatura válida',
      signatureInvalid: 'Assinatura inválida',
      clear: 'Limpar filtros',
    },
    row: {
      deliveryId: 'ID da entrega',
      connector: 'Conector',
      bytes: 'Bytes do corpo',
      processedAt: 'Processado em',
    },
    status: {
      accepted: 'Aceito',
      rejected: 'Rejeitado',
      idempotent: 'Idempotente',
    },
    replay: 'Reproduzir',
    replaying: 'A repetir…',
    replaySucceeded: 'Entrega de webhook reproduzida.',
    replayFailed: 'Não foi possível reproduzir a entrega de webhook.',
  },
  implHandoff: {
    page: {
      title: 'Entregas de código',
      description:
        'Approved IMPL_PROMPT actions delivered to chat threads, agent terminals, or clipboard.',
      loading: 'Carregando entregas…',
      error: 'Não foi possível carregar as entregas.',
      empty: 'Sem entregas. Aprove um IMPL_PROMPT na fila.',
      openThread: 'Abrir tópico →',
    },
    picker: {
      title: 'Enviar IMPL_PROMPT para…',
      description: 'Escolha onde entregar o brief de código aprovado.',
      cancel: 'Cancelar',
      CHAT: { hint: 'Abrir um tópico novo com o brief pré-carregado' },
      AGENT: { hint: 'Enviar para a fila do terminal do agente' },
      CLIPBOARD: { hint: 'Copiar para área de transferência' },
    },
  },
  learned: {
    panel: {
      title: 'O que aprendemos',
      subtitle: '{count} preferences',
      description:
        'Patterns derived from your approve / reject / edit decisions. Used to personalise future suggestions.',
      loading: 'Carregando…',
      error: 'Não foi possível carregar as preferências.',
      empty: 'Vamos aprender com suas aprovações — sem preferências ainda.',
    },
  },
};
