{
  "common": {
    "save": "Guardar",
    "cancel": "Cancelar",
    "delete": "Eliminar",
    "loading": "A carregar…",
    "back": "Voltar",
    "next": "Seguinte",
    "previous": "Anterior",
    "confirm": "Confirmar",
    "close": "Fechar",
    "status": "Estado",
    "language": "Idioma",
    "required": "Obrigatório",
    "optional": "Opcional",
    "success": "Operação concluída com sucesso",
    "searchClient": "Procurar cliente…",
    "noDate": "Sem data",
    "toasts": {
      "deleted": "Eliminado",
      "noChanges": "Não há alterações para guardar",
      "selectPatient": "Selecione um cliente"
    },
    "requiredHint": "* Campo obrigatório"
  },
  "nav": {
    "calendar": "Agenda",
    "patients": "Clientes",
    "clinicInfo": "Informações da empresa",
    "billingSub": "Faturação e subscrição",
    "catalogs": "Catálogos (serviços/profissionais/locais)",
    "timeBlocks": "Bloqueios de horário",
    "bookingSettings": "Definições de reserva online",
    "auditLog": "Auditoria",
    "platform": "Plataforma",
    "bonos": "Pacotes",
    "bookings": "Reservas",
    "settings": "Definições",
    "goToAgenda": "Ir para a minha agenda",
    "main": "Navegação principal",
    "account": "A minha conta",
    "pendingCount": "{{count}} reservas por rever",
    "team": "Equipa"
  },
  "auth": {
    "login": "Entrar",
    "logout": "Sair",
    "email": "E-mail",
    "password": "Palavra-passe",
    "forgotPassword": "Esqueceu-se da palavra-passe?",
    "signin": "Entrar",
    "sessionExpired": "A sua sessão expirou, inicie sessão novamente",
    "systemTitle": "Sistema de gestão",
    "emailPlaceholder": "seu@email.com",
    "passwordPlaceholder": "********",
    "showPassword": "Mostrar palavra-passe",
    "hidePassword": "Ocultar palavra-passe",
    "signinLoading": "A iniciar sessão…",
    "forgotTitle": "Recuperar palavra-passe",
    "forgotDescription": "Introduza o seu e-mail e enviaremos instruções para repor a sua palavra-passe.",
    "sendEmail": "Enviar e-mail",
    "sending": "A enviar…",
    "backToLogin": "Voltar ao início de sessão",
    "noAccount": "Não tem conta?",
    "createAccount": "Crie a sua empresa",
    "errors": {
      "generic": "Erro de autenticação",
      "invalidCredentials": "E-mail ou palavra-passe incorretos",
      "emailNotConfirmed": "Tem de confirmar o seu e-mail antes de iniciar sessão",
      "userNotFound": "Utilizador não encontrado",
      "tooManyAttempts": "Demasiadas tentativas. Aguarde alguns minutos e tente novamente",
      "passwordMin": "A palavra-passe deve ter pelo menos 8 caracteres",
      "alreadyRegistered": "Este e-mail já está registado",
      "network": "Erro de ligação. Verifique a sua internet",
      "invalidEmail": "O endereço de e-mail não é válido",
      "signupsDisabled": "O registo está desativado neste negócio",
      "weakPassword": "A palavra-passe é demasiado fraca",
      "operationFailed": "Não foi possível concluir a operação. Tente novamente",
      "userInfo": "Não foi possível obter a informação do utilizador",
      "unexpected": "Erro inesperado ao iniciar sessão",
      "resetSent": "Foi enviado um e-mail com as instruções para repor a sua palavra-passe",
      "resetError": "Erro ao pedir a recuperação da palavra-passe",
      "passwordUpdated": "Palavra-passe atualizada com sucesso",
      "passwordUpdateError": "Erro ao atualizar a palavra-passe",
      "samePassword": "A nova palavra-passe tem de ser diferente da anterior"
    },
    "reset": {
      "title": "Escolha uma nova palavra-passe",
      "description": "Introduza a palavra-passe que vai usar para entrar a partir de agora.",
      "inviteTitle": "Crie a sua palavra-passe",
      "inviteDescription": "Foi convidado para uma equipa. Escolha a palavra-passe que vai usar para entrar a partir de agora.",
      "newPassword": "Nova palavra-passe",
      "confirmPassword": "Repita a palavra-passe",
      "submit": "Guardar palavra-passe",
      "saving": "A guardar…",
      "mismatch": "As palavras-passe não coincidem",
      "checking": "A verificar o link…",
      "linkInvalidTitle": "O link já não é válido",
      "linkInvalid": "Este link de recuperação expirou ou já foi utilizado. Peça um novo e enviamo-lo de imediato.",
      "requestNew": "Pedir um novo link",
      "doneTitle": "Palavra-passe atualizada",
      "done": "Já pode entrar com a sua nova palavra-passe."
    }
  },
  "appointments": {
    "new": "Novo agendamento",
    "status": {
      "pending": "Pendente",
      "booked": "Confirmado",
      "completed": "Concluído",
      "cancelled": "Cancelado",
      "noShow": "Não compareceu"
    },
    "duration": "Duração",
    "service": "Serviço",
    "practitioner": "Profissional",
    "location": "Local",
    "paid": "Pago",
    "toasts": {
      "created": "Agendamento criado com sucesso",
      "createError": "Erro ao criar o agendamento",
      "updated": "Agendamento atualizado com sucesso",
      "updateError": "Erro ao atualizar o agendamento",
      "deleted": "Agendamento eliminado com sucesso",
      "deleteError": "Erro ao eliminar o agendamento",
      "rescheduled": "Agendamento reagendado com sucesso",
      "rescheduleError": "Erro ao reagendar o agendamento"
    }
  },
  "booking": {
    "title": "Reserva online",
    "step": {
      "service": "Escolha um serviço",
      "practitioner": "Escolha um profissional",
      "slot": "Escolha data e hora",
      "details": "Os seus dados",
      "location": "Escolha um local"
    },
    "loading": "A carregar…",
    "errorTitle": "Não é possível continuar",
    "payment": {
      "successTitle": "Pagamento confirmado.",
      "successText": "Recebemos o seu pagamento e o seu agendamento está confirmado. Vai receber um e-mail com os detalhes.",
      "cancelTitle": "Pagamento cancelado.",
      "cancelText": "Não foi cobrado nenhum valor. Pode tentar novamente escolhendo outra vez o serviço."
    },
    "noServices": "Sem serviços disponíveis.",
    "changeService": "← Mudar serviço",
    "changePractitioner": "← Mudar profissional",
    "loadingSlots": "A carregar horários…",
    "noSlotsDay": "Não há horários livres em {{date}}.",
    "patient": {
      "firstName": "Nome",
      "lastName": "Apelido",
      "phone": "Telefone",
      "email": "E-mail",
      "contactNote": "Indique um telefone ou e-mail para podermos confirmar o seu agendamento.",
      "comments": "Comentários (opcional)",
      "accept": "Aceito o tratamento dos meus dados para gerir este agendamento"
    },
    "confirmBook": "Confirmar reserva",
    "result": {
      "booked": "Reserva confirmada!",
      "pending": "Pedido enviado",
      "pendingText": "{{business}} ainda tem de confirmar o seu agendamento: até lá, não está garantido. Avisamos assim que for aceite.",
      "redirecting": "A redirecionar para pagamento seguro…",
      "confirmedBadge": "Confirmada",
      "pendingBadge": "Pendente de aprovação",
      "manageNote": "Pode gerir ou cancelar o seu agendamento através do link que lhe enviámos.",
      "notifiedEmail": "Enviámos-lhe os detalhes do agendamento por e-mail.",
      "notifiedSms": "Enviámos-lhe os detalhes do agendamento por SMS.",
      "notifiedNone": "Não foi possível enviar-lhe um aviso. Guarde esta página ou adicione o agendamento ao seu calendário.",
      "addToCalendar": "Adicionar ao calendário",
      "googleCalendar": "Google Calendar",
      "manage": "Gerir o meu agendamento",
      "bookAnother": "Fazer outro agendamento"
    },
    "submitError": "Não foi possível concluir a reserva. Tente novamente.",
    "chooseAnotherSlot": "Escolher outro horário",
    "practitionersError": "Não foi possível carregar os profissionais. Tente novamente.",
    "slotsError": "Não foi possível carregar os horários disponíveis. Tente novamente.",
    "retry": "Tentar novamente",
    "poweredBy": "Reservas com BookingForNow — crie a sua grátis",
    "createYours": {
      "question": "Tem um negócio?",
      "link": "Crie uma página de reservas como esta, grátis"
    },
    "metaDescription": "Reserve online com {{name}}: escolha o serviço, a data e a hora em menos de um minuto.",
    "otherDate": "Outra data:",
    "noSlotsShort": "Sem horários",
    "depositNote": "Reserva com depósito de {{amount}} — é descontado do preço total.",
    "eyebrow": "Reserva online",
    "stepCounter": "Passo {{current}} de {{total}}",
    "depositTitle": "Depósito de reserva",
    "anyProfessional": "Qualquer disponível",
    "anyProfessionalHint": "Atribuímos um profissional livre no horário que escolher.",
    "morning": "Manhã",
    "afternoon": "Tarde",
    "errors": {
      "loadServices": "Erro ao carregar os serviços",
      "businessNotFound": "Não encontrámos este negócio. Verifique o link.",
      "loadFailed": "Não foi possível carregar a página de reservas. Tente novamente dentro de alguns minutos.",
      "onlineBookingDisabled": "Este negócio não está a aceitar reservas online de momento.",
      "slotTaken": "Esse horário acabou de ser ocupado. Atualizámos os horários: escolha outro.",
      "outsideHours": "Esse horário está fora do horário de atendimento. Escolha outro.",
      "tooSoon": "Esse horário está demasiado próximo para reservar online. Escolha um mais tarde.",
      "tooFar": "Essa data está demasiado distante para reservar online. Escolha uma mais próxima.",
      "invalidStart": "O horário escolhido não é válido. Escolha outro.",
      "invalidEmail": "Verifique o e-mail: não parece válido.",
      "invalidPhone": "Verifique o telefone: não parece válido.",
      "missingFields": "Faltam dados obrigatórios. Verifique o formulário.",
      "contactRequired": "Indique um telefone ou um e-mail para o podermos avisar.",
      "acceptRequired": "Precisamos da sua aceitação para gerir o agendamento.",
      "rateLimited": "Demasiadas tentativas seguidas. Aguarde alguns minutos e tente novamente.",
      "tooManyActive": "Já tem várias reservas ativas. Contacte o negócio para as gerir.",
      "captchaFailed": "Não foi possível concluir a verificação de segurança. Tente novamente.",
      "serviceNotFound": "Este serviço já não está disponível. Escolha outro.",
      "practitionerUnavailable": "Esse profissional já não está disponível para este serviço. Escolha outro.",
      "invalidLocation": "Esse local já não está disponível. Escolha outro.",
      "network": "Sem ligação. Verifique a sua internet e tente novamente."
    },
    "stepNames": {
      "location": "Local",
      "service": "Serviço",
      "practitioner": "Profissional",
      "slot": "Data e hora",
      "details": "Os seus dados",
      "done": "Confirmação"
    },
    "changeLocation": "← Mudar de local",
    "changeSlot": "← Mudar data ou hora",
    "durationShort": "{{minutes}} min",
    "price": "Preço",
    "noPractitionersFor": "Neste momento não há profissionais disponíveis para «{{service}}». Escolha outro serviço.",
    "callBusiness": "Ligar para {{phone}}",
    "dateOutOfRange": "Só é possível reservar entre {{from}} e {{to}}.",
    "tzNotice": "As horas são apresentadas na hora local do negócio: {{zone}}.",
    "closedDay": "O negócio está fechado em {{date}}.",
    "searchingNext": "A procurar o próximo dia com horários livres…",
    "noNextAvailable": "Não encontrámos horários livres nos próximos dias. Experimente outra data ou outro profissional.",
    "nextAvailable": "Próximo dia disponível: {{date}}",
    "requiredHint": "* Campo obrigatório",
    "privacyNotice": "Responsável pelos seus dados: {{business}}. São usados apenas para gerir o seu agendamento e avisá-lo sobre ele; a BookingForNow trata-os por conta do negócio. Pode pedir acesso, retificação ou eliminação contactando {{business}}.",
    "privacyLink": "Política de privacidade",
    "captchaExpired": "A verificação expirou. Conclua-a novamente para continuar.",
    "submitting": "A reservar…",
    "demo": {
      "notice": "Isto é uma demonstração: não é criada nenhuma reserva real.",
      "detail": "Nada do que escrever é enviado nem guardado.",
      "cta": "Crie a sua página de reservas grátis",
      "linkLabel": "Ver um exemplo de página de reservas"
    }
  },
  "dashboard": {
    "patient": {
      "selectTitle": "Selecionar cliente",
      "search": "Procurar cliente por nome, telefone ou e-mail…",
      "sessions": "sessões"
    },
    "appointment": {
      "date": "Data",
      "time": "Hora",
      "create": "Criar agendamento",
      "editTitle": "Editar agendamento",
      "saveChanges": "Guardar alterações"
    }
  },
  "calendar": {
    "title": "Calendário de agendamentos",
    "legend": {
      "title": "Legenda:",
      "paid": "Pago",
      "unpaid": "Por cobrar",
      "closed": "Não laborável",
      "overdue": "Por cobrar (já passou)"
    },
    "view": {
      "month": "Mês",
      "week": "Semana",
      "day": "Dia"
    },
    "weekTotal": "Total da semana",
    "today": "Hoje",
    "hideAmount": "Ocultar valor",
    "showAmount": "Mostrar valor",
    "deleteMessage": "Tem a certeza de que pretende eliminar este agendamento?",
    "sessionNotes": "Notas do agendamento",
    "deleteDetails": "Esta ação não pode ser desfeita.",
    "saving": "A guardar...",
    "sessionNotesHint": "Estas notas ficam associadas apenas a este agendamento",
    "remind": "Lembrar",
    "newPatient": "Novo cliente",
    "session": "sessão",
    "useBono": "Usar pacote",
    "noBonoOption": "Sem pacote (pagamento avulso)",
    "moveMessage": "Tem a certeza de que pretende mover este agendamento?",
    "editPatient": "Editar cliente",
    "timeSlotHint": "Horas permitidas: {{start}} - {{end}} em intervalos de 30 minutos",
    "deleteTitle": "Eliminar agendamento",
    "noPhone": "Sem telefone",
    "sessionNotesPlaceholder": "Observações, serviço realizado, estado do cliente...",
    "creating": "A criar...",
    "moveTitle": "Mover agendamento",
    "noPatients": "Não foram encontrados clientes",
    "patient": "Cliente",
    "moveBtnText": "Mover",
    "navNextPeriod": "Período seguinte",
    "exportByApptLabel": "Exportar faturas por agendamento do mês de {{month}}",
    "navPrevPeriod": "Período anterior",
    "navGoNextPeriod": "Ir para o período seguinte",
    "exportByPatientLabel": "Exportar faturas por cliente do mês de {{month}}",
    "whatsappReminder": "Enviar lembrete por WhatsApp",
    "exportByAppt": "Exportar faturas por agendamento (uma fatura por agendamento)",
    "editPatientInfo": "Editar informação do cliente",
    "navGoPrevPeriod": "Ir para o período anterior",
    "exportByPatient": "Exportar faturas por cliente (uma fatura agrupando os agendamentos do cliente)",
    "closedSlot": "Não laborável / Fechado",
    "moreCount": "+{{count}} mais",
    "form": {
      "service": "Serviço",
      "serviceNone": "Sem serviço",
      "duration": "Duração",
      "durationOther": "Outra",
      "priceLabel": "Valor",
      "paid": "Pago",
      "collected": "Cobrado",
      "pending": "Pendente",
      "bonoPrice": "Incluído no pacote",
      "practitioner": "Profissional",
      "practitionerNone": "Não atribuído",
      "noPractitionersForService": "Nenhum profissional ativo tem este serviço atribuído (veja Catálogos → Profissionais).",
      "allProfessionals": "Todos os profissionais",
      "durationFromService": "A duração é definida pelo serviço. Pode ajustá-la depois, editando o agendamento."
    },
    "overlapPractitioner": "Esse profissional já tem um agendamento a essa hora: {{name}} ({{time}}).",
    "overlapPatient": "O cliente já tem outro agendamento a essa hora ({{time}}).",
    "toasts": {
      "patientNotFound": "O cliente deste agendamento não foi encontrado",
      "patientUnknown": "Cliente desconhecido",
      "invalidTime": "A hora deve estar entre {{start}} e {{end}} em intervalos de 30 minutos",
      "exportBadFormat": "A exportação não devolveu o formato esperado. Tente novamente.",
      "exportError": "Erro ao exportar o relatório",
      "cancelled": "Agendamento cancelado",
      "cancelledNotified": "Agendamento cancelado. O cliente vai receber um e-mail de aviso.",
      "cancelError": "Não foi possível cancelar o agendamento",
      "updatedNotified": "Agendamento atualizado. O cliente vai receber um e-mail com a nova hora.",
      "rescheduledNotified": "Agendamento reagendado. O cliente vai receber um e-mail com a nova hora."
    },
    "timezoneNote": "Horas no fuso horário do negócio: {{tz}}",
    "showCancelled": "Mostrar cancelados",
    "blockedSlot": "Bloqueado",
    "minutesShort": "{{count}} min",
    "moveDetails": "{{from}} → {{to}}",
    "movePractitioner": "Profissional: {{from}} → {{to}}",
    "movePastWarning": "Atenção: a nova data já passou",
    "errors": {
      "practitionerNotAssigned": "Esse profissional não tem este serviço atribuído. Escolha outro profissional ou verifique os Catálogos.",
      "bonoUnavailable": "O pacote já não tem sessões disponíveis. Escolha outro ou crie o agendamento sem pacote.",
      "invalidDuration": "A duração deve ser um número inteiro de minutos entre {{min}} e {{max}}."
    },
    "whatsapp": {
      "reminder": "Olá {{name}}, lembramos o seu agendamento em {{business}} no dia {{date}} às {{time}}. Se precisar de o alterar ou não puder vir, avise-nos. Obrigado!",
      "reminderNoBusiness": "Olá {{name}}, lembramos o seu agendamento do dia {{date}} às {{time}}. Se precisar de o alterar ou não puder vir, avise-nos. Obrigado!"
    },
    "notify": {
      "label": "Avisar o cliente por e-mail",
      "hint": "Vamos enviar um e-mail para {{email}} com a nova hora."
    },
    "cancel": {
      "button": "Cancelar agendamento",
      "title": "Cancelar agendamento",
      "message": "O agendamento ficará cancelado e o horário livre. Poderá continuar a vê-lo com «Mostrar cancelados».",
      "confirm": "Sim, cancelar",
      "keep": "Não, manter"
    },
    "viewTitle": "Detalhes do agendamento",
    "readOnlyNotice": "A sua função só permite consultar a agenda."
  },
  "adminAjustes": {
    "title": "Definições de reserva online",
    "loading": "A carregar…",
    "bookingUrl": "URL pública de reservas:",
    "copyLink": "Copiar",
    "saved": "Alterações guardadas",
    "save": "Guardar alterações",
    "saving": "A guardar…",
    "online": {
      "legend": "Reservas online",
      "enable": "Ativar página pública de reservas",
      "autoAccept": "Aceitar agendamentos automaticamente (sem revisão manual)",
      "autoAcceptOnHint": "Cada reserva online fica confirmada de imediato e ocupa o horário na sua agenda. As de clientes com várias faltas anteriores continuarão a pedir a sua aprovação.",
      "autoAcceptOffHint": "Cada reserva online chega como «Pendente»: o horário fica reservado, mas só é confirmado quando a aprovar.",
      "goToPending": "Ver reservas pendentes",
      "noCaptchaHint": "A verificação anti-bots ainda não está ativada na plataforma. Até lá, por segurança, cada reserva online entra como pendente e terá de a aceitar em Reservas, mesmo com a confirmação automática ativada."
    },
    "policy": {
      "label": "Prazo para cancelar ou alterar a reserva online",
      "none": "Sem limite (até à hora da reserva)",
      "hoursBefore_one": "{{count}} hora antes",
      "hoursBefore_few": "{{count}} horas antes",
      "hoursBefore_many": "{{count}} horas antes",
      "hoursBefore_other": "{{count}} horas antes",
      "custom": "Outro prazo…",
      "customLabel": "Horas de antecedência (de 0 a 720)",
      "hoursUnit": "horas",
      "hint": "Os seus clientes podem cancelar ou alterar a reserva a partir da ligação que recebem ao reservar. Se faltar menos tempo do que o prazo escolhido, essa ligação deixa de o permitir e pede-lhes que o contactem. Não é cobrado nada: apenas se bloqueiam a alteração e o cancelamento online. Pode sempre cancelar ou mudar qualquer reserva a partir da agenda, e as novas reservas não são afetadas.",
      "invalid": "Indique um número inteiro de horas entre 0 e 720."
    },
    "locale": {
      "legend": "Localização",
      "language": "Idioma",
      "currency": "Moeda",
      "timezone": "Fuso horário",
      "country": "País (ISO)",
      "timezonePlaceholder": "Selecione um fuso horário",
      "invalidNotice": "Verifique os valores assinalados: com um fuso horário, moeda ou idioma incorretos, os seus clientes verão horas e preços errados.",
      "goToConfig": "Alterar nas Definições",
      "usedByBookingPage": "A sua página de reservas mostra as horas e os preços com estes valores."
    },
    "eyebrow": "Reserva online",
    "toasts": {
      "loadError": "Erro ao carregar as definições",
      "saveError": "Erro ao guardar"
    },
    "share": {
      "title": "Partilhe a sua página de reservas",
      "subtitle": "Este é o link onde os seus clientes reservam sozinhos. Coloque-o no Instagram, no Google Maps, no WhatsApp, no seu site ou na receção.",
      "copied": "Copiado",
      "copyFailed": "Não foi possível copiar. Selecione o texto e copie-o manualmente.",
      "open": "Ver como cliente",
      "disabledNotice": "A sua página ainda não aceita reservas: ative «Ativar página pública de reservas» mais abaixo e guarde as alterações.",
      "noServices": "Não tem nenhum serviço ativo: os seus clientes verão a página vazia.",
      "noPractitioners": "Não tem nenhum profissional ativo: os seus clientes não encontrarão horários.",
      "goToCatalogs": "Ir para serviços e profissionais",
      "trialBranding": "Durante o período de teste, a sua página de reservas, o portal de agendamentos, os e-mails enviados aos seus clientes e o agendamento que adicionam ao calendário incluem uma menção discreta ao BookingForNow e, depois de reservarem, os seus clientes veem um convite para criarem a sua própria página grátis. Com o Starter ou o Pro, tudo isto desaparece.",
      "whatsapp": "Partilhar no WhatsApp",
      "whatsappMessage": "Faça o seu agendamento em {{name}} quando quiser, em menos de um minuto: {{url}}",
      "showQr": "Código QR",
      "qrAlt": "Código QR da sua página de reservas",
      "qrHint": "Imprima-o e coloque-o na receção, na montra ou nos seus cartões: ao digitalizá-lo, abre-se a sua página de reservas.",
      "printQr": "Imprimir",
      "printCta": "Digitalize e agende",
      "downloadQr": "Transferir (SVG)",
      "qrError": "Não foi possível gerar o código QR. Recarregue a página e tente novamente.",
      "popupBlocked": "O navegador bloqueou a janela de impressão. Permita janelas pop-up para este site ou transfira o código QR.",
      "embedLabel": "Botão «Reservar» para o seu site",
      "embedHint": "Cole este código no seu site: mostra um botão que abre a sua página de reservas num novo separador.",
      "embedButtonLabel": "Agendar",
      "copyEmbed": "Copiar código",
      "iframeLabel": "Ou incorpore a página de reservas no seu site",
      "iframeHint": "Cole-o onde quiser que apareça o formulário de reserva. Se o seu site não permitir iframes, use o botão acima.",
      "copyIframe": "Copiar código",
      "iframeTitle": "Agendar em {{name}}"
    },
    "referral": {
      "title": "Recomende o BookingForNow",
      "lede_one": "Partilhe a sua ligação com outros negócios. Quando um deles se registar com ela e receber a primeira reserva online, oferecemos-lhe {{count}} dia com todas as funcionalidades ou, se já tem um plano pago, uma mensalidade como saldo a seu favor.",
      "lede_few": "Partilhe a sua ligação com outros negócios. Quando um deles se registar com ela e receber a primeira reserva online, oferecemos-lhe {{count}} dias com todas as funcionalidades ou, se já tem um plano pago, uma mensalidade como saldo a seu favor.",
      "lede_many": "Partilhe a sua ligação com outros negócios. Quando um deles se registar com ela e receber a primeira reserva online, oferecemos-lhe {{count}} dias com todas as funcionalidades ou, se já tem um plano pago, uma mensalidade como saldo a seu favor.",
      "lede_other": "Partilhe a sua ligação com outros negócios. Quando um deles se registar com ela e receber a primeira reserva online, oferecemos-lhe {{count}} dias com todas as funcionalidades ou, se já tem um plano pago, uma mensalidade como saldo a seu favor.",
      "linkLabel": "A sua ligação de recomendação:",
      "whatsapp": "Recomendar no WhatsApp",
      "whatsappMessage": "Recomendo-lhe o BookingForNow para gerir as reservas do seu negócio: os clientes reservam online sozinhos e há um plano gratuito. Experimente aqui: {{url}}",
      "terms": "Condições do programa",
      "stats": {
        "signedUp": "Registaram-se",
        "activated": "Já recebem reservas",
        "rewards": "Recompensas este ano",
        "rewardsValue": "{{n}} de {{max}}"
      },
      "newReward": "A sua recomendação deu frutos: já tem uma recompensa aplicada na sua conta.",
      "historyTitle": "As suas recompensas",
      "reward": {
        "trial_one": "{{count}} dia com todas as funcionalidades, até {{date}}",
        "trial_few": "{{count}} dias com todas as funcionalidades, até {{date}}",
        "trial_many": "{{count}} dias com todas as funcionalidades, até {{date}}",
        "trial_other": "{{count}} dias com todas as funcionalidades, até {{date}}",
        "credit": "Saldo a seu favor de {{amount}} na sua subscrição",
        "failed": "Não conseguimos aplicá-la automaticamente: estamos a revê-la manualmente e vamos escrever-lhe.",
        "cap": "Sem recompensa: já tinha recebido as {{max}} deste ano."
      },
      "privacy": "Só vê números: não lhe dizemos que negócios se registaram com a sua ligação."
    },
    "errors": {
      "invalidBranding": "O logótipo ou a cor não são válidos. Use um URL https e uma cor no formato #RRGGBB."
    },
    "branding": {
      "legend": "Aspeto da sua página"
    }
  },
  "adminAuditoria": {
    "title": "Registo de auditoria",
    "subtitle": "Registo inalterável de quem alterou o quê no seu negócio.",
    "filter": {
      "action": "Ação",
      "entity": "Entidade",
      "actor": "E-mail de quem fez a alteração",
      "apply": "Aplicar",
      "loading": "A carregar…",
      "allEntities": "Todas",
      "allActions": "Todas",
      "actorPlaceholder": "pessoa@exemplo.com"
    },
    "cols": {
      "date": "Data",
      "actor": "Quem",
      "action": "Ação",
      "entity": "Entidade",
      "id": "ID",
      "ip": "IP"
    },
    "close": "Fechar",
    "view": "Ver",
    "empty": "Sem entradas.",
    "eyebrow": "Registo",
    "noActor": "Cliente ou sistema",
    "verbs": {
      "create": "Criação",
      "update": "Alteração",
      "delete": "Eliminação",
      "anonymize": "Anonimização (eliminação de dados)",
      "bulk_import": "Importação em massa",
      "reschedule": "Reagendamento",
      "accept": "Aceitação",
      "reject": "Rejeição",
      "cancel": "Cancelamento",
      "mark_paid": "Marcado como pago",
      "upload": "Carregamento de ficheiro",
      "logo_upload": "Carregamento de logótipo",
      "practitioners_update": "Alteração dos profissionais atribuídos",
      "services_update": "Alteração dos serviços atribuídos",
      "locations_update": "Alteração dos locais atribuídos",
      "checkout_started": "Início do pagamento da subscrição",
      "confirmed_from_checkout": "Subscrição confirmada",
      "cancel_scheduled": "Cancelamento da subscrição programado",
      "reactivated": "Subscrição reativada",
      "downgraded_manual": "Mudança para um plano inferior",
      "billing_export": "Exportação da faturação",
      "plan_changed": "Mudança de plano",
      "ended_reconciled": "Subscrição terminada",
      "tenant_extend_trial": "Período de teste prolongado pelo suporte",
      "tenant_activate": "Conta ativada pelo suporte",
      "tenant_suspend": "Conta suspensa pelo suporte",
      "tenant_set_plan": "Plano alterado pelo suporte",
      "restore": "Restauro de cópia de segurança",
      "invite": "Convite para a equipa",
      "resend": "Convite reenviado",
      "remove": "Remoção da equipa",
      "terms_accepted": "Aceitação dos Termos e condições e da Política de privacidade",
      "attribution": "Origem do registo",
      "rewarded": "Recompensa do programa de recomendação",
      "marketing_unsubscribed": "Cancelamento dos e-mails de dicas e ofertas",
      "restore_failed": "Falha no restauro de cópia de segurança",
      "prices_update": "Alteração de preços",
      "feed_rotate": "Nova ligação de sincronização do calendário"
    },
    "entities": {
      "patient": "Cliente",
      "appointment": "Agendamento",
      "bono": "Pacote",
      "patient_file": "Ficheiro de cliente",
      "service": "Serviço",
      "practitioner": "Profissional",
      "location": "Local",
      "time_block": "Bloqueio de horário",
      "note_template": "Modelo de nota",
      "clinical_note": "Nota de sessão",
      "consent_form_template": "Modelo de consentimento",
      "consent_signature": "Assinatura de consentimento",
      "tenant_settings": "Definições do negócio",
      "tenant": "Subscrição",
      "report": "Relatório",
      "tenant_user": "Membro da equipa",
      "backup": "Cópia de segurança",
      "email_preferences": "Preferências de e-mail",
      "configuration": "Configuração"
    },
    "pagination": {
      "range": "Registos {{from}}–{{to}}"
    },
    "errors": {
      "invalidFilter": "Filtro inválido: o e-mail não pode conter espaços, vírgulas, parênteses, * nem %."
    }
  },
  "adminBloqueos": {
    "title": "Bloqueios de horário",
    "subtitle": "Períodos em que um profissional ou local não está disponível (férias, formação, manutenção…).",
    "filter": {
      "practitioner": "Profissional",
      "location": "Local",
      "all": "— Todos —",
      "allF": "— Todos —",
      "hidePast": "Ocultar bloqueios passados"
    },
    "form": {
      "newTitle": "Novo bloqueio",
      "editTitle": "Editar bloqueio",
      "practitioner": "Profissional",
      "location": "Local",
      "start": "Início",
      "end": "Fim",
      "reason": "Motivo",
      "reasonPlaceholder": "Férias, formação…",
      "globalHint": "Sem profissional nem local, o bloqueio fecha todo o negócio: ninguém poderá reservar nesse período.",
      "timezoneHint": "As horas são as do fuso horário do negócio: {{zone}}."
    },
    "empty": "Sem bloqueios.",
    "confirm": {
      "title": "Eliminar bloqueio",
      "message": "Tem a certeza de que pretende eliminar este bloqueio?"
    },
    "eyebrow": "Disponibilidade",
    "newLabel": "Novo bloqueio",
    "blockedLabel": "Bloqueado",
    "allPractitioners": "Todos os profissionais",
    "allLocations": "Todos os locais",
    "toasts": {
      "requiredTimes": "Início e fim obrigatórios",
      "endAfterStart": "O fim deve ser posterior ao início",
      "saved": "Bloqueio guardado"
    },
    "globalLabel": "Encerramento geral",
    "emptyUpcoming": "Não há bloqueios próximos",
    "emptyHint": "Bloqueie férias, feriados ou ausências para que ninguém possa reservar nessas horas.",
    "errors": {
      "notOwn": "Só pode gerir os seus próprios bloqueios.",
      "tooLong": "Um bloqueio não pode durar mais de {{days}} dias.",
      "invalid": "Verifique as datas e o motivo do bloqueio."
    }
  },
  "adminCatalogos": {
    "title": "Catálogos",
    "subtitle": "Gira os seus serviços, profissionais e locais.",
    "info": "Um serviço é o que oferece (p. ex., uma sessão). Um profissional é quem o realiza. Um local é o espaço físico. Para os associar, edite um serviço ou profissional e assinale as caixas correspondentes.",
    "loading": "A carregar…",
    "catalog": {
      "practitioners": "Profissionais atribuídos"
    },
    "tabs": {
      "services": "Serviços ({{count}})",
      "practitioners": "Profissionais ({{count}})",
      "locations": "Locais ({{count}})"
    },
    "common": {
      "save": "Guardar",
      "cancel": "Cancelar",
      "edit": "Editar",
      "delete": "Eliminar",
      "saving": "A guardar…",
      "active": "Ativo",
      "inactive": "Inativo"
    },
    "services": {
      "form": {
        "newTitle": "Novo serviço",
        "editTitle": "Editar serviço",
        "name": "Nome",
        "namePlaceholder": "Ex.: Corte de cabelo, Primeira consulta, Revisão…",
        "duration": "Duração (min)",
        "price": "Preço",
        "tax": "Imposto (%)",
        "color": "Cor",
        "active": "Ativo",
        "description": "Descrição"
      },
      "durationUnit": "{{min}} min",
      "newLabel": "Novo serviço",
      "emptyTitle": "Adicione o seu primeiro serviço",
      "emptyHint": "Um serviço é o que os seus clientes veem e reservam: nome, duração e preço."
    },
    "practitioners": {
      "form": {
        "newTitle": "Novo profissional",
        "editTitle": "Editar profissional",
        "firstName": "Nome",
        "lastName": "Apelidos",
        "email": "E-mail",
        "phone": "Telefone",
        "color": "Cor",
        "active": "Ativo",
        "bio": "Biografia"
      },
      "assignments": {
        "services": "Serviços",
        "locations": "Locais",
        "noServices": "Sem serviços definidos.",
        "noLocations": "Sem locais definidos."
      },
      "empty": "Sem profissionais.",
      "newLabel": "Novo profissional",
      "emptyTitle": "Adicione a sua equipa",
      "emptyHint": "Os profissionais são quem atende os agendamentos. Cada um tem a sua própria agenda."
    },
    "locations": {
      "form": {
        "newTitle": "Novo local",
        "editTitle": "Editar local",
        "name": "Nome",
        "address": "Morada",
        "cp": "Código postal",
        "city": "Cidade",
        "province": "Distrito / região",
        "country": "País",
        "phone": "Telefone",
        "email": "E-mail",
        "timezone": "Fuso horário",
        "timezonePlaceholder": "Selecione um fuso horário",
        "active": "Ativo"
      },
      "newLabel": "Novo local",
      "emptyTitle": "Crie o seu primeiro local",
      "emptyHint": "O local é o seu estabelecimento ou espaço de trabalho. É necessário pelo menos um para atribuir profissionais."
    },
    "confirm": {
      "title": "Confirmar eliminação",
      "serviceMessage": "Tem a certeza de que pretende eliminar este serviço?",
      "practitionerMessage": "Tem a certeza de que pretende eliminar este profissional?",
      "locationMessage": "Tem a certeza de que pretende eliminar este local?",
      "serviceLabel": "Serviço",
      "practitionerLabel": "Profissional",
      "locationLabel": "Local"
    },
    "eyebrow": "Definições",
    "toasts": {
      "nameRequired": "Nome obrigatório",
      "locationRequired": "Tem de atribuir pelo menos um local",
      "serviceSaved": "Serviço guardado",
      "practitionerSaved": "Profissional guardado",
      "locationSaved": "Local guardado",
      "loadError": "Erro ao carregar os catálogos",
      "saveError": "Erro ao guardar",
      "serviceRequired": "O nome e a duração são obrigatórios"
    },
    "inUse": {
      "title": "Não é possível eliminar",
      "message": "Tem agendamentos ou outros dados associados: se fosse eliminado, esse histórico ficaria incompleto.",
      "details": "Pode desativá-lo: deixará de estar disponível para novas reservas e o histórico é mantido.",
      "confirm": "Desativar",
      "deactivated": "Desativado: já não está disponível para novas reservas"
    }
  },
  "adminPendientes": {
    "title": "Reservas pendentes",
    "refresh": "Atualizar",
    "loading": "A carregar…",
    "empty": "Sem reservas pendentes de confirmação.",
    "accept": "Aceitar",
    "reject": "Rejeitar",
    "modal": {
      "title": "Rejeitar reserva",
      "reason": "Motivo (opcional, é enviado ao cliente)",
      "cancel": "Cancelar",
      "confirm": "Confirmar rejeição"
    },
    "eyebrow": "Caixa de entrada",
    "toasts": {
      "acceptError": "Erro ao aceitar a reserva",
      "rejectError": "Erro ao rejeitar a reserva",
      "alreadyHandled": "Esta reserva já tinha sido tratada (aceite, rejeitada ou cancelada) e foi retirada da caixa de entrada.",
      "overlap": "Não é possível aceitar: esse profissional já tem outro agendamento a essa hora. A reserva continua pendente."
    },
    "unnamedClient": "Cliente sem nome",
    "noService": "Sem serviço",
    "noPractitioner": "Sem profissional atribuído",
    "source": {
      "online": "Reserva online",
      "staff": "Criada pela equipa",
      "other": "Outra origem"
    },
    "payment": {
      "none": "Sem pagamento online",
      "pending": "Pagamento pendente",
      "paid": "Pago",
      "refunded": "Reembolsado",
      "failed": "Pagamento falhado"
    }
  },
  "billing": {
    "title": "Faturação",
    "planBilling": "Faturação e plano",
    "subtitle": "Escolha o plano que melhor se adapta ao seu negócio.",
    "info": "Cada plano define os limites da sua conta. Free: 1 profissional, 1 local, 2 utilizadores com acesso e até 50 clientes. Starter: até 3 profissionais, 1 local e 5 utilizadores, com lembretes automáticos por e-mail. Pro: profissionais, locais e utilizadores ilimitados, com lembretes automáticos por e-mail e suporte prioritário.",
    "currentStatus": {
      "plan": "Plano atual:",
      "renewal": "Próxima renovação:",
      "manage": "Gerir subscrição",
      "cancel": "Cancelar subscrição",
      "reactivate": "Reativar",
      "cancelingTag": "Cancelamento programado",
      "willCancelOn": "Será cancelada em {{date}} e a sua conta passará para o plano Free."
    },
    "cancelModal": {
      "title": "Cancelar subscrição",
      "message": "Tem a certeza de que quer cancelar a subscrição?",
      "keepAccess": "Mantém todas as funcionalidades até {{date}}. Depois, a sua conta passará para o plano Free (1 profissional, 1 local, até 50 clientes e sem lembretes automáticos).",
      "confirm": "Sim, cancelar",
      "downgradeNow": "O seu plano passará para Free de imediato (1 profissional, 1 local, até 50 clientes e sem lembretes automáticos)."
    },
    "usageSection": {
      "title": "Utilização atual",
      "patients": "Clientes",
      "practitioners": "Profissionais",
      "locations": "Locais",
      "unlimited": "(ilimitado)"
    },
    "cycle": {
      "monthly": "Mensal",
      "yearly": "Anual",
      "yearlySave": "2 meses grátis"
    },
    "plan": {
      "recommended": "Recomendado",
      "current": "Plano atual",
      "soon": "Em breve",
      "subscribe": "Subscrever",
      "change": "Mudar para este plano"
    },
    "loading": "A carregar...",
    "plans": {
      "free": {
        "tagline": "Grátis para sempre, para começar a receber reservas",
        "features": [
          "1 profissional e 1 local",
          "Até 50 clientes",
          "2 utilizadores com acesso ao painel",
          "Agenda, pacotes e página de reservas online 24/7"
        ],
        "note": "Plano gratuito permanente. Mude de plano quando quiser."
      },
      "starter": {
        "tagline": "Para pequenos negócios e profissionais individuais",
        "features": [
          "Até 3 profissionais e 1 local",
          "Clientes ilimitados",
          "Até 5 utilizadores com acesso ao painel",
          "Lembretes automáticos por e-mail",
          "Sem a marca BookingForNow na sua página de reservas"
        ]
      },
      "pro": {
        "tagline": "Para negócios em crescimento com vários locais",
        "features": [
          "Profissionais, locais e utilizadores ilimitados",
          "Lembretes automáticos por e-mail",
          "Sem a marca BookingForNow na sua página de reservas",
          "Suporte prioritário"
        ]
      }
    },
    "freePrice": "Grátis",
    "monthlySuffix": "/mês",
    "yearlySuffix": "/ano",
    "yearlyEquivalent": "equivale a {{monthly}}/mês",
    "toasts": {
      "planUnavailable": "Este plano ainda não está disponível.",
      "checkoutError": "Não foi possível iniciar o pagamento.",
      "portalError": "Não foi possível abrir o portal de faturação.",
      "portalNoCustomer": "Ainda não tem uma subscrição ativa. Escolha um plano para começar.",
      "cancelScheduled": "A sua subscrição será cancelada no fim do período.",
      "cancelError": "Não foi possível cancelar a subscrição.",
      "reactivated": "Subscrição reativada.",
      "reactivateError": "Não foi possível reativar a subscrição.",
      "planDowngraded": "O seu plano foi alterado para Free.",
      "alreadySubscribed": "Já tem uma subscrição ativa. Vamos levá-lo ao portal de faturação para mudar de plano.",
      "checkoutCanceled": "Saiu do pagamento sem o concluir. Não lhe foi cobrado nada.",
      "checkoutStub": "Os pagamentos ainda não estão ativados neste servidor. Escreva-nos para soporte@bookingfornow.com e ativamo-los consigo.",
      "checkoutConfirmed": "Subscrição ativada! Obrigado por confiar na BookingForNow.",
      "checkoutConfirmPending": "Pagamento recebido. A ativação pode demorar alguns segundos: recarregue a página se ainda não vir o seu plano.",
      "samePlan": "Esse já é o seu plano atual.",
      "providerUnavailable": "Não foi possível verificar a sua subscrição junto do fornecedor de pagamentos. Tente novamente dentro de alguns minutos.",
      "paymentIssue": "O seu último pagamento está pendente. Atualize o método de pagamento no portal de faturação antes de mudar de plano.",
      "planChanged": "Plano alterado. A diferença será refletida na sua próxima fatura.",
      "changePlanError": "Não foi possível mudar o plano. Não lhe foi cobrado nada."
    },
    "planErrors": {
      "planRequired": "Esta funcionalidade não está incluída no seu plano atual. Atualize para a ativar.",
      "planLimitReached": "Atingiu o limite do seu plano.",
      "subscriptionInactive": "A sua subscrição não está ativa. Atualize o método de pagamento para continuar.",
      "goToBilling": "Vá a Definições → Faturação para atualizar o seu plano.",
      "limitPatients": "Atingiu o máximo de {{limit}} clientes do seu plano.",
      "limitPractitioners": "Atingiu o máximo de {{limit}} profissionais do seu plano.",
      "limitLocations": "Atingiu o máximo de {{limit}} locais do seu plano.",
      "limitTeamMembers": "Atingiu o máximo de {{limit}} utilizadores do seu plano."
    },
    "downgrade": {
      "warnTitle": "Vai ultrapassar os limites do seu novo plano",
      "warnBody": "Ao mudar para um plano inferior, será desativado o que ultrapassar o limite do novo plano: {{resources}}. Nada é eliminado: tudo será reativado automaticamente quando voltar a um plano superior.",
      "practitioners_one": "{{count}} profissional",
      "practitioners_few": "{{count}} profissionais",
      "practitioners_many": "{{count}} profissionais",
      "practitioners_other": "{{count}} profissionais",
      "locations_one": "{{count}} local",
      "locations_few": "{{count}} locais",
      "locations_many": "{{count}} locais",
      "locations_other": "{{count}} locais",
      "confirm": "Compreendo, continuar"
    },
    "deactivatedByPlan": "Desativado pelo seu plano",
    "upgradeCta": "Melhore o seu plano",
    "planNames": {
      "free": "Free",
      "starter": "Starter",
      "pro": "Pro",
      "trial": "Teste gratuito"
    },
    "status": {
      "active": "Ativa",
      "trialing": "Em período de teste",
      "past_due": "Pagamento em atraso",
      "unpaid": "Por pagar",
      "canceled": "Cancelada",
      "incomplete": "Pagamento incompleto",
      "incomplete_expired": "Pagamento expirado",
      "paused": "Em pausa",
      "unknown": "Estado indeterminado"
    },
    "trialEndsOn": "termina em {{date}}",
    "ownerOnly": "Só o proprietário da conta pode subscrever, mudar ou cancelar o plano. Peça-lhe que o faça a partir do seu utilizador.",
    "billedInCurrency": "Os planos são cobrados em {{currency}}, mesmo que o seu negócio trabalhe em {{own}}. Não fazemos conversão: o seu banco aplicará a taxa de câmbio.",
    "changeModal": {
      "title": "Mudar de plano",
      "message": "Vai mudar a sua subscrição para o plano {{plan}} ({{price}}).",
      "proration": "A mudança aplica-se de imediato. A parte proporcional do período em curso será somada ou descontada na sua próxima fatura.",
      "deactivateWarn": "Ao passar para {{plan}}, serão desativados {{resources}} por excederem o limite. Não são eliminados: serão reativados quando voltar a subir de plano.",
      "confirm": "Confirmar mudança"
    }
  },
  "suspended": {
    "title": "Conta suspensa",
    "lead": "O acesso a <strong>{{brand}}</strong> está temporariamente suspenso.",
    "reason": "Os seus dados continuam guardados e nada foi eliminado. Escreva-nos e ajudamos a reativar a conta.",
    "contact": "Contactar suporte",
    "logout": "Terminar sessão",
    "support": "Se achar que isto é um erro, escreva para",
    "eyebrow": "Conta",
    "visitorTitle": "Este negócio não está disponível de momento",
    "visitorLead": "Não podemos mostrar-lhe esta página neste momento. Se é cliente, contacte diretamente o negócio; se a conta é sua, inicie sessão para a reativar.",
    "mailSubject": "Reativar a conta de {{brand}}"
  },
  "errors": {
    "generic": "Ocorreu um erro inesperado",
    "network": "Sem ligação ao servidor",
    "notFound": "Recurso não encontrado",
    "forbidden": "Não tem permissão para esta ação",
    "validation": "Verifique os campos assinalados",
    "loadAppointments": "Erro ao carregar os agendamentos",
    "loadPatients": "Erro ao carregar os clientes",
    "readonlyRole": "O seu utilizador é só de leitura: não pode fazer alterações."
  },
  "locale": {
    "es": "Español",
    "en": "English",
    "fr": "Français",
    "pt": "Português",
    "it": "Italiano",
    "de": "Deutsch",
    "ru": "Русский",
    "zh": "中文",
    "ko": "한국어",
    "ja": "日本語"
  },
  "config": {
    "tabs": {
      "clinic": "Informações da empresa",
      "backup": "Backup"
    },
    "clinic": {
      "title": "Informações da empresa",
      "name": "Nome da empresa",
      "phone": "Telefone",
      "email": "E-mail",
      "emailInvalid": "E-mail inválido",
      "address": "Morada",
      "saving": "A guardar...",
      "eyebrow": "Empresa",
      "emailPlaceholder": "contacto@empresa.com",
      "addressPlaceholder": "Rua Principal 123, Cidade",
      "contactHint": "Estes dados são apresentados na sua página de reservas e usados como endereço de resposta nos e-mails aos seus clientes.",
      "nameHint": "É o nome que os seus clientes veem na página de reservas e nos e-mails.",
      "phoneInvalid": "Use apenas números, espaços e os símbolos + - ( )"
    },
    "backup": {
      "title": "Gestão de backups",
      "subtitle": "Gere as cópias de segurança da base de dados",
      "create": "Criar backup",
      "creating": "A criar...",
      "stats": {
        "total": "Total de backups",
        "last": "Último backup",
        "size": "Espaço usado",
        "next": "Próximo automático"
      },
      "autoConfig": "Configuração automática",
      "daily": "Backup diário",
      "dailyTime": "Todos os dias às 2:00",
      "weekly": "Backup semanal",
      "weeklyTime": "Domingos às 3:00",
      "active": "Ativo",
      "byDate": "Backups por data",
      "viewList": "Vista de lista",
      "viewDate": "Vista por data",
      "refresh": "Atualizar",
      "loading": "A carregar backups...",
      "empty": "Sem backups disponíveis",
      "emptyHint": "Crie o seu primeiro backup usando o botão acima",
      "current": "Atual",
      "download": "Transferir",
      "restore": "Restaurar",
      "delete": "Eliminar",
      "cols": {
        "date": "Data",
        "name": "Nome",
        "size": "Tamanho",
        "type": "Tipo",
        "actions": "Ações"
      },
      "confirmDelete": {
        "title": "Eliminar backup",
        "message": "Tem a certeza de que pretende eliminar este backup?",
        "details": "Esta ação não pode ser desfeita.",
        "itemLabel": "Data"
      },
      "confirmRestore": {
        "title": "Restaurar backup",
        "message": "Tem a certeza de que pretende restaurar este backup?",
        "details": "Esta ação substituirá todos os dados atuais pelos do backup selecionado. Os dados atuais serão perdidos.",
        "itemLabel": "Data do backup"
      },
      "eyebrow": "Dados",
      "types": {
        "daily": "Diário",
        "weekly": "Semanal",
        "manual": "Manual",
        "unknown": "Desconhecido"
      }
    },
    "loading": "A carregar configuração...",
    "toasts": {
      "loadError": "Erro ao carregar a configuração",
      "clinicUpdateError": "Não foi possível guardar os dados de contacto. Verifique o telefone, o e-mail e a morada.",
      "backupsLoadError": "Erro ao carregar os backups",
      "backupCreated": "Backup criado com sucesso",
      "backupCreateError": "Erro ao criar o backup",
      "backupsRefreshed": "Lista de backups atualizada",
      "backupRestored": "Backup restaurado com sucesso",
      "backupRestoreError": "Erro ao restaurar o backup",
      "backupDeleted": "Backup eliminado com sucesso",
      "backupDeleteError": "Erro ao eliminar o backup",
      "downloadStarted": "Transferência iniciada",
      "backupDownloadError": "Erro ao transferir o backup",
      "invalidCountry": "O país deve ser um código ISO de 2 letras (por exemplo, PT, BR ou US).",
      "backupRestoreRolledBack": "Não foi possível restaurar a cópia. Os dados que tinha antes foram recuperados automaticamente.",
      "backupRestorePartial": "O restauro falhou a meio e não foi possível recuperar os dados automaticamente. Restaure a cópia «pre-restore» mais recente para voltar ao estado anterior.",
      "backupRestoreKeyMissing": "Não é possível restaurar: a cópia está encriptada e o servidor não tem configurada uma chave de encriptação válida. Nenhum dado foi alterado.",
      "backupRestoreDecryptFailed": "Não é possível restaurar: não foi possível desencriptar a cópia (foi encriptada com outra chave ou está danificada). Nenhum dado foi alterado.",
      "backupDownloadKeyMissing": "Não é possível transferir: a cópia está encriptada e o servidor não tem configurada uma chave de encriptação válida.",
      "backupDownloadDecryptFailed": "Não é possível transferir: não foi possível desencriptar a cópia (foi encriptada com outra chave ou está danificada)."
    },
    "readOnly": "Só o proprietário ou um administrador pode alterar estas definições.",
    "unsaved": {
      "message": "Tem alterações por guardar",
      "discard": "Descartar",
      "leaveConfirm": "Tem alterações por guardar nas Definições. Sair e descartá-las?"
    }
  },
  "patients": {
    "deleteModal": {
      "itemLabel": "Cliente",
      "title": "Eliminar cliente e apagar os seus dados",
      "message": "Tem a certeza de que pretende eliminar este cliente?",
      "confirm": "Eliminar",
      "details": "Os seus dados pessoais (nome, contacto, morada, documento, data de nascimento, notas e etiquetas) serão anonimizados de forma irreversível, os ficheiros anexados serão eliminados e os agendamentos futuros serão cancelados (as sessões de pacote reservadas são devolvidas). O histórico de agendamentos passados e os pacotes são mantidos sem dados pessoais. Esta ação não pode ser desfeita."
    },
    "editInfo": "Editar informação do cliente",
    "addSessions": "Adicionar pacote",
    "subtitle": "Faça a gestão da informação dos seus clientes",
    "cols": {
      "patient": "Cliente",
      "actions": "Ações",
      "delete": "Eliminar",
      "edit": "Editar"
    },
    "smart": {
      "estado": "Estado",
      "proxima": "Próximo",
      "visitas": "visitas",
      "bono": "pacote",
      "valor": "valor",
      "sinBono": "sem pacote",
      "sinVisitas": "sem visitas",
      "sinProxima": "sem próximo agendamento",
      "ultimaVisita": "últ. visita"
    },
    "perPage": "por página",
    "age": "{{years}} anos",
    "show": "Mostrar",
    "clearSearch": "Limpar pesquisa",
    "total": "clientes",
    "bonoForm": {
      "title": "Novo pacote",
      "minutes": "Minutos por sessão",
      "quantity": "Número de sessões",
      "totalPrice": "Preço total",
      "perSession": "Preço por sessão",
      "paid": "Pago",
      "add": "Criar pacote",
      "cancel": "Cancelar",
      "created": "Pacote criado com sucesso"
    },
    "title": "Gestão de clientes",
    "form": {
      "edit": "Editar cliente",
      "new": "Novo cliente",
      "save": "Guardar",
      "lastName": "Apelidos",
      "email": "E-mail",
      "phone": "Telefone",
      "cp": "Código postal",
      "whatsappHint": "Preferência do cliente. Nada é enviado automaticamente: a partir da agenda, pode enviar-lhe o lembrete por WhatsApp com um clique.",
      "whatsappLabel": "Aceita lembretes por WhatsApp",
      "firstName": "Nome",
      "province": "Distrito / Região",
      "familyContact": "Contacto alternativo",
      "update": "Atualizar",
      "dni": "NIF / Documento",
      "city": "Cidade",
      "address": "Morada",
      "optional": "(opcional)",
      "birthDate": "Data de nascimento",
      "phone2": "Telefone 2",
      "notes": "Notas",
      "firstNamePlaceholder": "Escreva o nome",
      "lastNamePlaceholder": "Insira os apelidos",
      "dniPlaceholder": "BI, passaporte ou outro documento",
      "phonePlaceholder": "Com indicativo internacional, se for de outro país",
      "phone2Placeholder": "Telefone alternativo",
      "emailPlaceholder": "email@exemplo.com",
      "familyContactPlaceholder": "Nome e telefone de outra pessoa de contacto",
      "addressPlaceholder": "Morada completa",
      "cpPlaceholder": "Código postal",
      "cityPlaceholder": "Cidade ou localidade",
      "provincePlaceholder": "Distrito, estado ou região",
      "notesPlaceholder": "Notas adicionais sobre o cliente...",
      "contactHint": "(telefone ou e-mail: pelo menos um)",
      "errors": {
        "firstNameRequired": "O nome é obrigatório",
        "contactRequired": "Indique pelo menos um telefone ou um e-mail",
        "phoneInvalid": "Telefone inválido: use entre 4 e 15 algarismos; pode incluir +, espaços, parênteses e hífenes",
        "emailInvalid": "O e-mail não é válido"
      }
    },
    "deletePatient": "Eliminar cliente",
    "newBtn": "Novo cliente",
    "viewDetails": "Ver detalhes do cliente",
    "showing": "A mostrar {{from}} - {{to}} de {{total}} clientes",
    "addFirst": "Adicionar o primeiro cliente",
    "cancelBtn": "Cancelar",
    "empty": {
      "noResults": "Não foram encontrados clientes",
      "noPatients": "Não há clientes registados",
      "hint": "Comece por adicionar o seu primeiro cliente para gerir os seus agendamentos",
      "hintSearch": "Tente outros termos de pesquisa"
    },
    "searchPlaceholder": "Pesquisar por nome, apelido ou telefone...",
    "import": {
      "button": "Importar",
      "title": "Importar clientes a partir de CSV",
      "step1": "1. Ficheiro",
      "step2": "2. Colunas",
      "step3": "3. Importar",
      "chooseFile": "Selecione um ficheiro .csv",
      "fileHint": "CSV com cabeçalho; separador vírgula ou ponto e vírgula; campos entre aspas são suportados.",
      "parseError": "Não foi possível ler o ficheiro. Verifique se é um CSV válido.",
      "detected": "{{rows}} linhas e {{cols}} colunas detetadas.",
      "mapTitle": "Atribua cada coluna a um campo",
      "ignore": "— Ignorar —",
      "preview": "Pré-visualização (primeiras 5 linhas)",
      "needFirstName": "Tem de atribuir uma coluna ao campo Nome.",
      "fields": {
        "firstName": "Nome",
        "lastName": "Apelidos",
        "phone": "Telefone",
        "email": "E-mail",
        "dni": "NIF / Documento",
        "birthdate": "Data de nascimento",
        "notes": "Notas"
      },
      "importBtn_one": "Importar {{count}} cliente",
      "importBtn_few": "Importar {{count}} clientes",
      "importBtn_many": "Importar {{count}} clientes",
      "importBtn_other": "Importar {{count}} clientes",
      "importing": "A importar…",
      "progress": "{{done}} de {{total}} linhas enviadas",
      "summaryTitle": "Importação concluída",
      "inserted": "Inseridos: {{count}}",
      "skipped": "Ignorados: {{count}}",
      "rowCol": "Linha",
      "reasonCol": "Motivo",
      "error": "A importação falhou. Tente novamente.",
      "reasons": {
        "invalid_row": "Linha inválida",
        "missing_firstName": "Falta o nome",
        "invalid_email": "E-mail inválido",
        "invalid_birthdate": "Data de nascimento inválida",
        "duplicate": "Duplicado (já existe um cliente com esse e-mail ou telefone)"
      },
      "datesDropped": "{{count}} datas de nascimento não foram reconhecidas: esses clientes foram importados sem data."
    },
    "eyebrow": "Diretório",
    "toasts": {
      "createFirst": "Crie primeiro o cliente e depois atribua-lhe o agendamento",
      "created": "Cliente criado com sucesso",
      "createError": "Erro ao criar o cliente",
      "updated": "Cliente atualizado com sucesso",
      "updateError": "Erro ao atualizar o cliente",
      "deleted": "Cliente eliminado: dados anonimizados e agendamentos futuros cancelados",
      "deleteError": "Erro ao eliminar o cliente",
      "loadEditError": "Erro ao carregar o cliente para edição",
      "loadOneError": "Erro ao carregar os dados do cliente",
      "bonoCreateError": "Erro ao criar o pacote"
    },
    "status": {
      "nuevo": "Novo",
      "activo": "Ativo",
      "fiel": "Fiel",
      "riesgo": "Em risco"
    },
    "export": {
      "button": "Exportar",
      "createdAt": "Data de registo",
      "filename": "clientes",
      "done": "{{count}} clientes exportados",
      "error": "Não foi possível exportar a lista de clientes. Tente novamente."
    }
  },
  "patientDetail": {
    "loading": "A carregar...",
    "loadingDetails": "A carregar detalhes do cliente...",
    "age": "{{years}} anos",
    "back": "Voltar",
    "edit": "Editar",
    "tags": {
      "placeholder": "Nova etiqueta",
      "empty": "Sem etiquetas",
      "removeLabel": "Remover etiqueta"
    },
    "stats": {
      "nextVisit": "Próxima visita",
      "noShows": "Faltas",
      "totalAppointments": "Total de agendamentos",
      "completed": "Concluídos",
      "lastVisit": "Última visita",
      "totalSpent": "Total gasto",
      "cancelledSub_one": "{{count}} cancelado",
      "cancelledSub_few": "{{count}} cancelados",
      "cancelledSub_many": "{{count}} cancelados",
      "cancelledSub_other": "{{count}} cancelados"
    },
    "info": {
      "phone2": "TELEFONE 2",
      "familyContact": "CONTACTO ALTERNATIVO",
      "phone": "TELEFONE",
      "city": "CIDADE",
      "address": "MORADA",
      "province": "DISTRITO / REGIÃO",
      "age": "IDADE",
      "email": "E-MAIL",
      "birthDate": "DATA DE NASCIMENTO",
      "fullName": "NOME COMPLETO",
      "title": "Dados pessoais",
      "dni": "DOCUMENTO DE IDENTIFICAÇÃO",
      "cp": "CÓDIGO POSTAL",
      "notes": "NOTAS"
    },
    "sessions": {
      "used": "Sessões usadas",
      "addTitle": "Adicionar pacote",
      "active": "Sessões disponíveis",
      "title": "Sessões disponíveis",
      "empty": "Sem pacotes ativos",
      "total": "Total de sessões"
    },
    "system": {
      "updated": "Última atualização:",
      "created": "Registado em:"
    },
    "tabs": {
      "history": "Histórico de agendamentos",
      "files": "Ficheiros",
      "credits": "Sessões"
    },
    "history": {
      "loading": "A carregar...",
      "colNotes": "Notas",
      "loadingText": "A carregar o histórico de agendamentos...",
      "colDate": "Data",
      "empty": "Não há agendamentos registados para este cliente.",
      "colTime": "Hora",
      "colDuration": "Duração",
      "colService": "Serviço",
      "colPrice": "Valor"
    },
    "files": {
      "loadingFiles": "A carregar ficheiros...",
      "allowedTypes": "Ficheiros permitidos: JPG, PNG, GIF, WEBP, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV (máx. 4 MB)",
      "empty": "Não há ficheiros anexados",
      "previewClickTitle": "Clique para ampliar",
      "descriptionPlaceholder": "Descreva o conteúdo do ficheiro...",
      "uploading": "A carregar...",
      "emptyHint": "Carregue o primeiro ficheiro com o formulário acima",
      "selectLabel": "Selecionar ficheiro",
      "uploadTitle": "Carregar novo ficheiro",
      "downloadTitle": "Transferir ficheiro",
      "descriptionLabel": "Descrição (opcional)",
      "upload": "Carregar ficheiro",
      "deleteTitle": "Eliminar ficheiro",
      "categoryLabel": "Categoria",
      "listTitle": "Ficheiros do cliente",
      "categories": {
        "document": "Documento",
        "photo": "Foto / imagem",
        "consent": "Consentimento",
        "invoice": "Fatura / orçamento",
        "report": "Relatório",
        "other": "Outro"
      }
    },
    "packs": {
      "empty": "Este cliente não tem pacotes",
      "title": "Pacotes",
      "addFirst": "Adicionar o primeiro pacote",
      "addBtn": "Adicionar pacote"
    },
    "notFound": {
      "title": "Cliente não encontrado",
      "message": "O cliente que procura não existe ou foi eliminado",
      "back": "Voltar a Clientes"
    },
    "deleteFileModal": {
      "confirm": "Eliminar",
      "title": "Eliminar ficheiro",
      "itemLabel": "Ficheiro",
      "details": "Esta ação não pode ser desfeita.",
      "message": "Tem a certeza de que pretende eliminar este ficheiro?"
    },
    "preview": {
      "closeTitle": "Fechar",
      "download": "Transferir ficheiro",
      "downloadTitle": "Transferir",
      "noPreview": "Pré-visualização não disponível para este tipo de ficheiro",
      "loading": "A carregar a pré-visualização…",
      "loadError": "Não foi possível carregar a pré-visualização. Pode transferir o ficheiro."
    },
    "markPaidModal": {
      "title": "Marcar como pago",
      "message": "Confirma que este pacote já está pago?",
      "confirm": "Marcar pago"
    },
    "eyebrow": "Ficha do cliente",
    "toasts": {
      "maxTags": "Máximo de 20 etiquetas por cliente.",
      "tagsSaveError": "Não foi possível guardar as etiquetas.",
      "filesLoadError": "Erro ao carregar os ficheiros",
      "fileTooLarge": "O ficheiro é demasiado grande (máximo 4 MB)",
      "fileTypeNotAllowed": "Tipo de ficheiro não permitido",
      "fileUploaded": "Ficheiro carregado com sucesso",
      "fileUploadError": "Erro ao carregar o ficheiro",
      "fileDownloadError": "Erro ao transferir o ficheiro",
      "fileDeleted": "Ficheiro eliminado com sucesso",
      "fileDeleteError": "Erro ao eliminar o ficheiro"
    },
    "loadError": {
      "title": "Não foi possível carregar a ficha",
      "message": "Houve uma falha de ligação ou do servidor. O cliente não foi eliminado: tente novamente.",
      "retry": "Tentar novamente"
    },
    "quick": {
      "label": "Ações rápidas",
      "call": "Ligar",
      "whatsapp": "WhatsApp",
      "email": "E-mail",
      "newAppointmentLabel": "Novo agendamento para {{name}}",
      "callLabel": "Ligar a {{name}}",
      "whatsappLabel": "Escrever a {{name}} por WhatsApp",
      "emailLabel": "Enviar um e-mail a {{name}}"
    }
  },
  "bonos": {
    "eyebrow": "Sessões pré-pagas",
    "title": "Pacotes",
    "subtitle": "Faça a gestão dos pacotes (sessões pré-pagas) dos seus clientes.",
    "info": "Um pacote agrupa várias sessões da mesma duração para um cliente, por um preço total. Usa-se ao criar o agendamento do cliente no calendário: escolha-o em «Usar pacote» e é descontada uma sessão. Se o agendamento for cancelado ou eliminado, a sessão volta ao pacote. As reservas online não descontam sessões do pacote.",
    "new": "Novo pacote",
    "formTitle": "Novo pacote",
    "patient": "Cliente",
    "minutes": "Minutos por sessão",
    "quantity": "Número de sessões",
    "totalPrice": "Preço total",
    "pricePerSession": "Preço por sessão",
    "perSessionShort": "/sessão",
    "paid": "Pago",
    "save": "Criar pacote",
    "saving": "A guardar…",
    "cancel": "Cancelar",
    "loading": "A carregar…",
    "empty": "Ainda não há pacotes. Crie o primeiro.",
    "minSessions_one": "{{min}} min · {{count}} sessão",
    "minSessions_few": "{{min}} min · {{count}} sessões",
    "minSessions_many": "{{min}} min · {{count}} sessões",
    "minSessions_other": "{{min}} min · {{count}} sessões",
    "paidChip": "Pago",
    "pendingChip": "Pendente",
    "togglePaidTitle": "Alterar estado de pagamento",
    "delete": "Eliminar",
    "created": "Pacote criado com sucesso",
    "deleted": "Pacote eliminado",
    "markedPaid": "Pacote marcado como pago",
    "markedPending": "Pacote marcado como por pagar",
    "inUse": "Não é possível eliminar: este pacote já tem sessões usadas.",
    "loadError": "Erro ao carregar os pacotes",
    "createError": "Erro ao criar o pacote",
    "updateError": "Erro ao atualizar o pacote",
    "deleteError": "Erro ao eliminar o pacote",
    "deleteModal": {
      "title": "Eliminar pacote",
      "message": "Tem a certeza de que pretende eliminar este pacote?",
      "details": "Esta ação não pode ser desfeita."
    },
    "itemLabel": "Pacote",
    "changePatient": "Alterar",
    "filters": {
      "label": "Filtrar pacotes",
      "all": "Todos",
      "unpaid": "Por pagar",
      "active": "Com sessões",
      "spent": "Esgotados",
      "noMatches": "Nenhum pacote corresponde ao filtro ou à pesquisa."
    },
    "unpaidTotal": "Por cobrar:",
    "createdOn": "Criado em {{date}}"
  },
  "patientPortal": {
    "loading": "A carregar…",
    "title": "O seu agendamento",
    "when": "Data e hora",
    "statusLabel": "Estado",
    "confirmReschedule": "Confirmar alteração",
    "cancel": "Cancelar agendamento",
    "notFound": "Agendamento não encontrado ou link inválido",
    "cancelConfirm": "Tem a certeza de que quer cancelar o seu agendamento?",
    "cancelled": "O seu agendamento foi cancelado.",
    "rescheduled": "O seu agendamento foi reagendado.",
    "actionError": "Não foi possível concluir a ação. Tente novamente.",
    "cancelTitle": "Cancelar agendamento",
    "policyWindow": "Pode cancelar ou reagendar até {{hours}}h antes do agendamento.",
    "policyAnytime": "Pode cancelar ou reagendar online até à hora do agendamento.",
    "policyPast": "Já não é possível cancelar nem reagendar online: o agendamento é daqui a menos de {{hours}}h. Contacte a empresa.",
    "policyNone": "Esta empresa não permite cancelar nem reagendar online. Contacte-a diretamente.",
    "openMap": "Ver no mapa",
    "pendingNote": "{{business}} ainda tem de confirmar este agendamento. Avisamos assim que for aceite.",
    "reschedule": "Alterar data ou hora",
    "rescheduleTitle": "Escolha o novo dia e a hora",
    "pickDate": "Dia",
    "newTime": "Novo horário: {{when}}",
    "keepCurrent": "Manter o agendamento atual",
    "bookAgain": "Fazer outro agendamento",
    "loadError": "Não foi possível carregar o agendamento. Tente novamente dentro de alguns minutos.",
    "errors": {
      "terminalStatus": "Este agendamento já não pode ser alterado.",
      "cancelDisabled": "Este negócio não permite cancelar online. Contacte-o diretamente.",
      "rescheduleDisabled": "Este negócio não permite alterar o agendamento online. Contacte-o diretamente.",
      "cancelTooLate": "Só é possível cancelar com pelo menos {{hours}} h de antecedência.",
      "rescheduleTooLate": "Só é possível alterar o agendamento com pelo menos {{hours}} h de antecedência."
    }
  },
  "signup": {
    "title": "Crie a sua empresa",
    "subtitle": "Teste grátis de 14 dias, sem cartão.",
    "clinicName": "Nome da empresa",
    "email": "E-mail",
    "password": "Palavra-passe",
    "submit": "Criar conta",
    "creating": "A criar…",
    "successTitle": "Conta criada!",
    "successMsg": "A sua empresa está pronta. Já pode iniciar sessão.",
    "goToLogin": "Ir para o início de sessão",
    "haveAccount": "Já tem conta?",
    "login": "Iniciar sessão",
    "disabled": "O registo não está disponível de momento.",
    "genericError": "Não foi possível criar a conta. Tente novamente.",
    "captchaHint": "Conclua a verificação anti-bots para continuar.",
    "sector": "A que se dedica o seu negócio?",
    "sectorPlaceholder": "Escolha um setor",
    "sectors": {
      "peluquerias": "Cabeleireiro ou barbearia",
      "estetica": "Centro de estética",
      "fisioterapeutas": "Fisioterapia",
      "gimnasios": "Ginásio ou personal trainer",
      "talleres": "Oficina mecânica",
      "consultores": "Consultoria ou coaching",
      "dentales": "Clínica dentária",
      "psicologos": "Psicologia",
      "veterinarios": "Clínica veterinária",
      "autoescuelas": "Escola de condução",
      "nutricionistas": "Nutrição e dietética",
      "tatuadores": "Estúdio de tatuagem ou piercing",
      "peluqueria-canina": "Tosquia e banhos para animais",
      "yoga-pilates": "Ioga ou pilates",
      "masajes-spa": "Massagens ou spa",
      "podologos": "Podologia",
      "otro": "Outro tipo de negócio"
    },
    "repeatPassword": "Repita a palavra-passe",
    "passwordsMismatch": "As palavras-passe não coincidem",
    "captchaRequired": "Conclua a verificação para continuar",
    "showPassword": "Mostrar palavra-passe",
    "hidePassword": "Ocultar palavra-passe",
    "acceptTerms": "Li e aceito os {{terms}} (incluindo o contrato de subcontratação para os dados dos meus clientes) e a {{privacy}}.",
    "termsLink": "Termos e condições",
    "privacyLink": "Política de privacidade",
    "gdprNotice": "Responsável: {{controller}}. Finalidade: criar e gerir a sua conta, prestar-lhe o serviço, saber por que canal nos conheceu e, se não se opuser, enviar-lhe dicas e ofertas sobre o BookingForNow. Fundamento jurídico: execução do contrato e interesse legítimo. Destinatários: os fornecedores que alojam o serviço, enquanto subcontratantes; não cedemos os seus dados a terceiros. Direitos: acesso, retificação, apagamento e os restantes previstos no RGPD, escrevendo para {{email}}. Mais informações na {{privacy}}.",
    "regionNote": "A sua conta será criada com: {{region}}. Pode alterar isto nas Definições.",
    "errors": {
      "rateLimited": "Demasiadas tentativas seguidas. Aguarde alguns minutos e tente novamente.",
      "captchaFailed": "Não conseguimos verificar que é uma pessoa. Repita a verificação e tente novamente.",
      "termsRequired": "Tem de aceitar os Termos e a Política de privacidade para criar a conta.",
      "missingFields": "Preencha o nome do negócio, o e-mail e a palavra-passe.",
      "emailRegistered": "Já existe uma conta com este e-mail."
    },
    "ownerName": "O seu nome",
    "ownerNameHint": "Vamos usá-lo para o cumprimentar e como primeiro profissional da sua agenda.",
    "marketingNotice": "Durante o teste e quando terminar, vamos enviar-lhe alguns e-mails com dicas e ofertas do BookingForNow. Se não os quiser receber, marque esta caixa; também pode cancelar a subscrição gratuitamente, com um clique, em qualquer um deles.",
    "marketingOptOut": "Não quero receber dicas nem ofertas do BookingForNow por e-mail",
    "bookingPageReady": "A sua página de reservas já está criada e aceita reservas a partir de hoje. Antes de a partilhar, reveja o seu horário e os serviços de exemplo:",
    "metaTitle": "Crie a sua conta grátis — BookingForNow",
    "metaDescription": "Crie a sua conta grátis na BookingForNow: agenda, reservas online 24/7, pacotes de sessões e lembretes automáticos. 14 dias de teste, sem cartão."
  },
  "login": {
    "metaDescription": "Inicie sessão na sua conta BookingForNow para gerir a agenda, as reservas online, os clientes e os pacotes de sessões do seu negócio.",
    "fillAllFields": "Por favor, preencha todos os campos",
    "loginError": "Erro ao iniciar sessão. Tente novamente.",
    "enterEmail": "Por favor, introduza o seu e-mail",
    "resetError": "Erro ao solicitar a recuperação da palavra-passe"
  },
  "landing": {
    "nav": {
      "login": "Iniciar sessão",
      "signup": "Criar conta",
      "goToApp": "Ir para a minha agenda"
    },
    "hero": {
      "subtitle": "Agenda, reservas online, pacotes de sessões e lembretes numa só plataforma. Dedique o seu tempo aos seus clientes, não à papelada.",
      "ctaPrimary": "Experimente 14 dias grátis",
      "note": "Sem cartão de crédito · Cancele quando quiser",
      "demo": "Ver demo",
      "titlePre": "Você faz o seu trabalho.",
      "titleAccentLead": "Nós cuidamos da",
      "titleAccent": "gestão",
      "stats": {
        "supportValue": "24/7",
        "supportLabel": "reserva online",
        "languagesValue": "10",
        "languagesLabel": "idiomas",
        "priceValue": "0€",
        "priceLabel": "para começar",
        "commissionValue": "0%",
        "commissionLabel": "comissões por reserva"
      },
      "badge": "Sem comissões · 14 dias grátis · Sem cartão",
      "heading": "Software de reservas e agendamentos online para negócios de serviços"
    },
    "features": {
      "title": "Programa de agenda e reservas online: o que inclui",
      "agenda": {
        "title": "Agenda multiprofissional",
        "text": "Organize os agendamentos de toda a equipa com uma agenda clara e sem sobreposições."
      },
      "booking": {
        "title": "Reserva online 24/7",
        "text": "Os seus clientes reservam sozinhos a partir da sua página pública, a qualquer hora e a partir de qualquer dispositivo."
      },
      "packs": {
        "title": "Pacotes de sessões por cliente",
        "text": "Venda a cada cliente o seu pacote de sessões: escolha-o ao criar o agendamento no calendário e é descontada uma sessão; se o agendamento for cancelado, a sessão volta. Na ficha do cliente vê quantas lhe restam."
      },
      "reminders": {
        "title": "Lembretes automáticos",
        "text": "Reduza as faltas com lembretes automáticos por e-mail. Incluídos nos planos Starter e Pro."
      },
      "eyebrow": "Funcionalidades",
      "subtitle": "Da gestão manual ao piloto automático. Tudo numa só plataforma."
    },
    "howItWorks": {
      "title": "A sua página de reservas online, a funcionar em menos de 5 minutos",
      "eyebrow": "Como funciona",
      "step1": {
        "title": "Crie a sua conta",
        "text": "Registe-se grátis, sem cartão de crédito. Em poucos minutos, o seu espaço de trabalho fica pronto."
      },
      "step2": {
        "title": "Configure os seus serviços",
        "text": "Adicione serviços, preços, horários e profissionais. O assistente guia-o passo a passo."
      },
      "step3": {
        "title": "Partilhe e comece",
        "text": "Partilhe o seu link no Instagram, no WhatsApp ou no seu site. Os seus clientes reservam sozinhos, 24/7."
      }
    },
    "pricing": {
      "title": "Preços do software de reservas",
      "subtitle": "Comece grátis e mude de plano quando o seu negócio crescer.",
      "free": "Grátis",
      "yearlyNote": "Com o plano anual paga apenas 10 meses: 2 meses grátis.",
      "cta": "Começar agora",
      "eyebrow": "Preços",
      "annualNote": "Faturado anualmente: {{total}} por ano · 2 meses grátis",
      "currencyNote": "Preços em euros (EUR).",
      "detailsLink": "Ver preços e limites em detalhe (em inglês)"
    },
    "finalCta": {
      "title": "Pronto para começar?",
      "text": "Crie a sua conta em menos de 2 minutos e configure o seu negócio hoje mesmo.",
      "eyebrow": "De que está à espera?"
    },
    "footer": {
      "tagline": "BookingForNow — gestão integral de agendamentos para o seu negócio.",
      "sectorsLabel": "Soluções por setor",
      "sectors": {
        "hairdressers": "Software de agendamento para cabeleireiros",
        "beauty": "Software de reservas para centros de estética",
        "physio": "Software de agendamento para fisioterapeutas",
        "gyms": "Software de reservas para ginásios",
        "workshops": "Software de agendamento para oficinas mecânicas",
        "consultants": "Software de agendamento para consultores",
        "allSectors": "Todos os setores"
      },
      "blog": "Blog: gestão de agendamentos e reservas",
      "tools": "Ferramentas gratuitas (em inglês)",
      "pagesInEnglish": "(páginas em inglês)",
      "freeScheduling": "Software de agendamento gratuito (em inglês)",
      "navLabel": "Navegação do rodapé",
      "support": "Suporte",
      "legalLabel": "Informação legal",
      "legal": {
        "notice": "Aviso legal",
        "privacy": "Privacidade",
        "terms": "Termos",
        "cookies": "Cookies",
        "contact": "Contacto"
      },
      "comparisons": {
        "booksy": "Alternativa a Booksy",
        "treatwell": "Alternativa a Treatwell",
        "fresha": "Alternativa a Fresha"
      },
      "calculator": "Calculadora de comissões de reservas",
      "referral": "Programa de recomendação",
      "inSpanish": "(em espanhol)"
    },
    "preview": {
      "title": "Painel diário",
      "kpiAppointments": "Agendamentos",
      "kpiOccupancy": "Ocupação",
      "kpiRevenue": "Receita",
      "chipPack": "pacote",
      "notifTitle": "Nova reserva online",
      "row1Name": "Lucía M.",
      "row1Service": "Corte de cabelo",
      "row2Name": "Carlos R.",
      "row2Service": "Massagem desportiva",
      "row3Name": "Ana G.",
      "row3Service": "Manicura",
      "live": "Em direto",
      "chipConfirmed": "Confirmado",
      "chipPending": "Pendente",
      "chipNew": "Novo",
      "row4Name": "Miguel S.",
      "row4Service": "Treino personalizado",
      "notifSub": "Marta L. · Hoje 16:00",
      "badge": "Preço fixo · Sem comissões",
      "sampleData": "Dados de exemplo"
    },
    "social": {
      "sectors": {
        "hair": "Cabeleireiros",
        "yoga": "Estúdios de ioga e pilates",
        "gyms": "Ginásios",
        "dental": "Clínicas dentárias",
        "spa": "Spas e massagens",
        "physio": "Fisioterapeutas",
        "garages": "Oficinas",
        "vets": "Veterinários"
      },
      "label": "Pensado para negócios que trabalham por agendamento"
    },
    "why": {
      "eyebrow": "Porquê a BookingForNow",
      "title": "Um sistema de reservas claro e sem letras pequenas",
      "flat": {
        "title": "Preço fixo, 0% de comissões",
        "text": "Paga o seu plano e mais nada. Nunca ficamos com uma percentagem das suas reservas nem dos seus novos clientes, ao contrário de alguns marketplaces."
      },
      "link": {
        "title": "O seu próprio link de reservas",
        "text": "Um link seu, não de um marketplace: coloque-o no Instagram, no Google Maps ou no WhatsApp e os seus clientes reservam sozinhos, sem instalar nada."
      },
      "languages": {
        "title": "10 idiomas e qualquer fuso horário",
        "text": "A sua agenda e a sua página de reservas falam o idioma dos seus clientes: espanhol, inglês, francês, português, italiano, alemão, russo, chinês, coreano e japonês."
      },
      "privacy": {
        "title": "Os seus dados são seus",
        "text": "Cumprimos o RGPD, não vendemos nem cedemos os seus dados e não mostramos publicidade aos seus clientes."
      }
    },
    "faq": {
      "eyebrow": "Antes de começar",
      "title": "Perguntas frequentes sobre o programa de gestão de agendamentos",
      "items": {
        "price": {
          "q": "Quanto custa a BookingForNow?",
          "a": "Há três planos de mensalidade fixa, com {{commission}}% de comissão por reserva: Free a {{free}} ({{practitioners}} profissional, até {{clients}} clientes, sem lembretes automáticos), Starter a {{starter}}/mês e Pro a {{pro}}/mês. A anuidade custa o mesmo que {{paidMonths}} meses, pelo que poupa {{freeMonths}}. Os valores estão em euros e acrescem os impostos aplicáveis. Todas as contas novas começam com um período de teste de {{trialDays}} dias, sem cartão."
        },
        "free": {
          "q": "O que inclui o plano gratuito e que limites tem?",
          "a": "O plano Free custa {{free}}, não tem limite de tempo e não pede cartão. Inclui a agenda, os pacotes de sessões e a sua página de reservas online para {{practitioners}} profissional, até {{clients}} clientes e {{locations}} local. Não inclui lembretes automáticos, que chegam com o Starter. O que os seus clientes veem (página de reservas, portal de agendamentos e e-mails) tem uma menção discreta à BookingForNow; com o Starter ou o Pro desaparece."
        },
        "commission": {
          "q": "Cobram comissão por reserva?",
          "a": "Não, em nenhum plano: {{commission}}% também no Free. Paga a mensalidade fixa do seu plano ({{free}} no Free) e mais nada, sem limite de reservas. A BookingForNow não cobra as reservas em seu nome: os seus clientes pagam-lhe no seu espaço, como até agora, pelo que não há percentagem nem intermediário de pagamentos."
        },
        "reminders": {
          "q": "A partir de que plano há lembretes automáticos?",
          "a": "A partir do Starter. Os lembretes automáticos de agendamento seguem por e-mail, para os clientes que deixam o seu e-mail, nos planos Starter e Pro e durante o período de teste; o plano Free não os inclui. Não há lembretes por SMS nem mensagens automáticas por WhatsApp."
        },
        "app": {
          "q": "É preciso instalar alguma aplicação?",
          "a": "Não. A BookingForNow funciona como aplicação web em qualquer telemóvel ou computador, sem instalações nem atualizações pendentes: gere a sua agenda a partir do navegador e os seus clientes reservam a partir do link do seu negócio, sem descarregar nada."
        },
        "trialEnd": {
          "q": "O que acontece quando terminam os {{trialDays}} dias de teste?",
          "a": "Se não tiver escolhido um plano, a sua conta passa sozinha para o plano Free e não lhe é cobrado nada: o período de teste não pede cartão. Nada é apagado. Se usava mais profissionais ou locais do que os incluídos no Free, os mais antigos continuam ativos e os restantes ficam em pausa até escolher um plano que os inclua. Os lembretes automáticos por e-mail, que são do Starter e do Pro, deixam de ser enviados."
        }
      }
    }
  },
  "onboarding": {
    "title": "Primeiros passos",
    "progress": "{{done}} de {{total}} concluídos",
    "toggle": "Mostrar ou ocultar a lista",
    "dismiss": "Dispensar",
    "copyLink": "Copiar link",
    "copied": "Link copiado para a área de transferência",
    "steps": {
      "services": "Configure os seus serviços e preços",
      "booking": "Ative a reserva online",
      "bookingOn": "A sua página já aceita reservas",
      "share": "Partilhe a sua página de reservas",
      "firstAppointment": "Crie o seu primeiro agendamento"
    },
    "stepDone": "Concluído:",
    "copyFailed": "Não foi possível copiar o link. Copie-o manualmente: {{url}}"
  },
  "settings": {
    "booking": {
      "logoUrl": "Logótipo da página de reservas (URL)",
      "useCustomColor": "Usar cor personalizada",
      "primaryColor": "Cor principal",
      "brandingHint": "O logótipo e a cor aplicam-se à sua página pública de reservas."
    },
    "logo": {
      "title": "Logótipo da empresa",
      "upload": "Carregar imagem",
      "change": "Alterar imagem",
      "uploading": "A carregar…",
      "format": "Formatos: PNG, JPG ou WEBP. Máximo 2 MB.",
      "uploaded": "Logótipo atualizado",
      "error": "Não foi possível carregar o logótipo",
      "errorFormat": "Formato não permitido. Use PNG, JPG ou WEBP.",
      "errorSize": "A imagem excede o tamanho máximo (2 MB)."
    }
  },
  "adminPlatform": {
    "eyebrow": "Operador",
    "title": "Plataforma",
    "forbidden": "Acesso reservado a administradores da plataforma.",
    "kpi": {
      "clinics": "Empresas",
      "trials": "Testes ativos",
      "mrr": "MRR estimado",
      "mrrHint": "só subscrições pagas",
      "mrrTitle": "Só contam as subscrições pagas ativas. Um plano atribuído manualmente neste painel não é uma subscrição e não conta.",
      "signupsPeriod": "Registos no período",
      "webVisitors": "Visitantes · site público",
      "webVisitorDaysHint": "visitantes-dia · últimos {{days}} dias",
      "webVisitorsHint": "soma por tipo de página e dia · últimos {{days}} dias",
      "onlineBookings": "Reservas online",
      "appointments": "Agendamentos criados",
      "errors5xx": "Erros 5xx",
      "periodHint": "últimos {{days}} dias"
    },
    "cols": {
      "clinic": "Empresa",
      "plan": "Plano",
      "status": "Estado",
      "signup": "Registo",
      "origin": "Origem"
    },
    "state": {
      "active": "Ativa",
      "suspended": "Suspensa"
    },
    "action": {
      "extend": "+14 dias",
      "extendTitle": "Prolongar o período de teste por 14 dias",
      "suspend": "Suspender",
      "activate": "Ativar",
      "changePlan": "Mudar plano"
    },
    "toasts": {
      "trialExtended": "Teste prolongado por 14 dias",
      "suspended": "Empresa suspensa",
      "activated": "Empresa ativada",
      "planChanged": "Plano alterado para {{plan}}"
    },
    "subtitle": "Monitorização da aplicação e do tráfego web",
    "refresh": "Atualizar",
    "range": {
      "label": "Período",
      "d7": "7 dias",
      "d30": "30 dias",
      "d90": "90 dias"
    },
    "tabs": {
      "overview": "Resumo",
      "traffic": "Tráfego web",
      "activity": "Atividade",
      "health": "Saúde",
      "tenants": "Empresas"
    },
    "funnel": {
      "title": "Funil de aquisição",
      "subtitle": "Do visitante à primeira reserva, nos últimos {{days}} dias",
      "ofPrevious": "{{pct}} do passo anterior",
      "activatedHint": "Negócios criados no período com pelo menos um agendamento",
      "visitorsHint": "Cada visitante conta uma vez por dia, independentemente do número de páginas do site público que veja. É o mesmo valor do indicador e da zona «Site público».",
      "landingVisitorsHint": "Soma dos visitantes-dia da página inicial e das landings: quem vê as duas no mesmo dia conta duas vezes.",
      "cohortBookingsHint": "Reservas online dos negócios ativados no período. O total de todos os negócios está no indicador «Reservas online».",
      "stages": {
        "visitors": "Visitantes-dia do site público",
        "landingVisitors": "Visitantes-dia na página inicial e nas landings",
        "signupVisitors": "Visitantes de /signup",
        "signups": "Registos",
        "activated": "Negócios ativados (≥1 agendamento)",
        "onlineBookings": "Reservas online",
        "cohortBookings": "Reservas online desses negócios"
      },
      "perActivated": "{{n}} por negócio ativado"
    },
    "audience": {
      "title": "Visitantes por zona",
      "subtitle": "Últimos {{days}} dias, por tipo de página",
      "views_one": "{{n}} página vista",
      "views_few": "{{n}} páginas vistas",
      "views_many": "{{n}} páginas vistas",
      "views_other": "{{n}} páginas vistas",
      "visitors_one": "{{n}} visitante",
      "visitors_few": "{{n}} visitantes",
      "visitors_many": "{{n}} visitantes",
      "visitors_other": "{{n}} visitantes",
      "zones": {
        "web": {
          "label": "Site público",
          "hint": "A página inicial, as páginas de setor, as comparações e as ferramentas, o blog, o registo e as páginas legais. É o valor que mede o posicionamento."
        },
        "booking": {
          "label": "Páginas de reservas dos negócios",
          "hint": "Clientes dos negócios na respetiva página de reservas e na ligação do seu agendamento. Não é tráfego do site."
        },
        "app": {
          "label": "Aplicação",
          "hint": "Equipas dos negócios no início de sessão e nos ecrãs privados."
        }
      },
      "note": "São visitantes-dia somados por tipo de página, não pessoas distintas: quem vê dois tipos de página (a página inicial e uma página de setor) conta duas vezes, quem passa do site para uma página de reservas conta nas duas zonas e quem volta noutro dia conta outra vez, porque a impressão digital anónima muda todos os dias às 00:00 UTC. Já as páginas vistas são exatas.",
      "noteWeb": "São visitantes-dia, não pessoas distintas: a impressão digital anónima muda todos os dias às 00:00 UTC, por isso quem volta noutro dia conta outra vez. No site público cada visitante conta uma vez por dia, independentemente do número de páginas que veja; as outras duas zonas somam os seus tipos de página (quem passa pelo início de sessão e depois usa a aplicação conta duas vezes) e quem passa do site para uma página de reservas conta nas duas zonas. Já as páginas vistas são exatas.",
      "webBreakdown": "Visitantes-dia do site público: {{total}}. Destes, {{engaged}} com origem externa (outro site ou uma campanha) ou com mais de uma página vista, e {{single}} com uma só página e entrada direta, o habitual num rastreador com aspeto de navegador normal. Entre os primeiros, com utilização da aplicação no mesmo dia (equipa ou novo registo): {{withApp}}.",
      "webBreakdownSignal": "Visitantes-dia do site público: {{total}}. Destes, {{engaged}} com origem externa (outro site ou uma campanha) ou com mais de uma página vista, e {{single}} com uma só página e entrada direta (sem origem conhecida: endereço escrito, favorito ou uma ligação que não envia a origem). Entre os primeiros, com utilização da aplicação no mesmo dia (equipa ou novo registo): {{withApp}}.",
      "other": "Sem classificação: {{visitors}} e {{views}} em rotas que o servidor não atribui a nenhuma zona: endereços que não existem (404) e /cuenta-suspendida."
    },
    "charts": {
      "visitorsPerDay": "Visitantes por dia",
      "allZones": "Todas as zonas juntas: site público, páginas de reservas e aplicação.",
      "signupsPerDay": "Registos por dia",
      "trafficPerDay": "Visitantes e páginas vistas por dia",
      "appointmentsPerDay": "Agendamentos e reservas online por dia",
      "newPatientsPerDay": "Novos clientes por dia",
      "emailsPerDay": "E-mails por dia",
      "apiRequestsPerDay": "Pedidos à API por dia",
      "api5xxPerDay": "Erros 5xx por dia",
      "apiP95PerDay": "Latência p95 por dia (ms, com crons e painel)"
    },
    "series": {
      "visitors": "Visitantes",
      "views": "Páginas vistas",
      "signups": "Registos",
      "appointments": "Agendamentos",
      "onlineBookings": "Reservas online",
      "newPatients": "Novos clientes",
      "emailsSent": "Enviados",
      "emailsFailed": "Falhados",
      "requests": "Pedidos",
      "errors5xx": "Erros 5xx",
      "p95": "Latência p95"
    },
    "chart": {
      "showTable": "Ver tabela",
      "hideTable": "Ocultar tabela",
      "noData": "Sem dados no período",
      "allZero": "Tudo a zero no período",
      "day": "Dia",
      "total": "Total"
    },
    "traffic": {
      "note": "Análise própria sem cookies. Só contam as visitas com sinal de uma pessoa real (um toque, uma tecla, o rato ou 15 segundos com a página à vista) e os bots são excluídos ({{bots}} visualizações de bots no período).",
      "visitorDays": "Os visitantes são visitantes-dia: a impressão digital anónima muda todos os dias às 00:00 UTC (02:00 em Espanha no verão, 01:00 no inverno), por isso quem volta noutro dia, muda de rede ou usa outro navegador conta outra vez.",
      "scope": "O gráfico diário e as listas de referenciadores, países, idiomas, dispositivos e UTM somam todas as zonas (site público, páginas de reservas dos negócios e aplicação); a repartição está em Resumo.",
      "beforeHumanSignal": "Este período inclui dias anteriores a {{date}}, quando ainda contavam como visitantes os rastreadores com aspeto de navegador normal: os valores desses dias estão inflacionados e não são comparáveis com os posteriores.",
      "dataSince": "Há dados desde {{date}}. O período escolhido começa antes: os seus primeiros dias aparecem vazios porque ainda não se media, não porque ninguém tenha entrado.",
      "topPages": "Páginas mais visitadas",
      "topPagesByZone": {
        "web": "Páginas do site público",
        "booking": "Rotas das páginas de reservas",
        "app": "Ecrãs da aplicação",
        "other": "Rotas sem classificação"
      },
      "referrers": "Referenciadores",
      "countries": "Países",
      "langs": "Idiomas",
      "devices": "Dispositivos",
      "utmSources": "UTM · origem",
      "utmCampaigns": "UTM · campanha",
      "pageTypes": "Tipos de página",
      "bookingPages": "Páginas de reservas mais visitadas",
      "direct": "(direto)",
      "visitors": "visitantes",
      "views": "visualizações",
      "showAll": "Ver as {{n}}",
      "showLess": "Ver menos",
      "empty": "Nada a mostrar no período",
      "openBooking": "Abrir a página de reservas"
    },
    "tracking": {
      "excluded": "Este navegador não conta nas estatísticas.",
      "counted": "Este navegador conta nas estatísticas. Para o excluir, inicie sessão nele como operador (fica marcado com a chave local {{key}}) ou ative o Do-Not-Track ou o Global Privacy Control.",
      "reasons": {
        "operator": "Iniciou sessão como operador da plataforma.",
        "optout": "Tem a chave local {{key}}, guardada automaticamente ao iniciar sessão como operador, pelo que também não conta sem sessão.",
        "dnt": "Tem o Do-Not-Track ativado.",
        "gpc": "Envia o sinal Global Privacy Control."
      },
      "sessionOnly": "Não foi possível guardar a chave local {{key}}: sem sessão, este navegador voltará a contar.",
      "otherDevices": "Os seus outros dispositivos contam até iniciar sessão neles uma vez como operador."
    },
    "pageTypes": {
      "landing": "Landing",
      "seo": "Landings SEO",
      "blog": "Blog",
      "legal": "Legal e contacto",
      "signup": "Registo",
      "login": "Início de sessão",
      "book": "Reserva pública",
      "portal": "Portal de clientes",
      "app": "Aplicação",
      "other": "Outros"
    },
    "devices": {
      "desktop": "Computador",
      "mobile": "Telemóvel",
      "tablet": "Tablet"
    },
    "activity": {
      "businessTitle": "Atividade de negócio",
      "businessNote": "Os negócios internos (test e demo) não contam.",
      "apiTitle": "API",
      "topErrors": "Erros de API mais frequentes",
      "noErrors": "Sem erros de API no período",
      "emailsNote": "Os falhados são destacados; os enviados dão contexto.",
      "cols": {
        "method": "Método",
        "route": "Rota",
        "status": "Código",
        "hits": "Ocorrências",
        "lastAt": "Última vez"
      }
    },
    "health": {
      "checkedAt": "Verificado {{time}}",
      "version": "Commit",
      "env": "Ambiente",
      "region": "Região",
      "configTitle": "Configuração",
      "configNote": "Só se verifica se cada variável tem valor na Vercel; nada é validado junto da Stripe, Resend, Cloudflare ou Sentry.",
      "configSummary": "{{ok}} de {{total}} obrigatórios",
      "dbTitle": "Base de dados",
      "dbLatency": "Latência",
      "dbOk": "Ligada",
      "dbSlow": "Ligada, lenta",
      "dbDown": "Sem resposta",
      "cronsTitle": "Tarefas programadas",
      "cronState": {
        "ok": "OK",
        "stale": "Atrasada",
        "failed": "Falhada",
        "never": "Nunca executada"
      },
      "cronLast": "Última execução",
      "cronSummary": "Ver resumo (JSON)",
      "cronNoRuns": "Sem execuções registadas",
      "cronRecent": "Últimas execuções",
      "cronHint": "Verifique CRON_SECRET na Vercel e o registo do Vercel Cron; se for «reminders», verifique também o workflow reminders-hourly no GitHub Actions",
      "cronFailedHint": "Verifique o erro da última execução e o registo da função na Vercel",
      "cronsError": "Não foi possível ler o registo dos crons: {{error}}",
      "errorsTitle": "Últimos erros",
      "noErrors": "Sem erros registados",
      "api24Title": "API · últimas 24 h",
      "api24Note": "A latência p95 é o tempo de resposta do servidor, sem contar os crons nem os pedidos deste painel; os restantes números incluem-nos.",
      "emails24Title": "E-mails · últimas 24 h",
      "requests": "Pedidos",
      "errors5xx": "Erros 5xx",
      "errors4xx": "Erros 4xx",
      "p95": "Latência p95",
      "sent": "Enviados",
      "failed": "Falhados",
      "noData": "Sem dados",
      "migrationTitle": "Falta aplicar a migração 31",
      "migrationBody": "A análise da plataforma precisa das tabelas e funções de {{file}}. Aplique-a no Supabase e recarregue.",
      "ok": "Correto",
      "configured": "Configurado",
      "missing": "Em falta",
      "recommended": "Recomendado",
      "optional": "Opcional",
      "on": "Ativado",
      "off": "Desativado",
      "cols": {
        "time": "Quando",
        "logger": "Origem",
        "tenant": "Empresa",
        "message": "Mensagem"
      },
      "items": {
        "supabase": {
          "label": "Supabase (URL + service key)",
          "hint": "Defina SUPABASE_URL e SUPABASE_SERVICE_KEY na Vercel"
        },
        "rlsJwtSecret": {
          "label": "Segredo JWT do Supabase (RLS)",
          "hint": "Copie o JWT secret do projeto Supabase para SUPABASE_JWT_SECRET na Vercel"
        },
        "cronSecret": {
          "label": "Segredo dos crons",
          "hint": "Adicione CRON_SECRET na Vercel; sem ele, os crons respondem 401"
        },
        "stripeSecretKey": {
          "label": "Chave secreta do Stripe",
          "hint": "Adicione STRIPE_SECRET_KEY na Vercel"
        },
        "stripeWebhookSecret": {
          "label": "Webhook do Stripe",
          "hint": "Crie o webhook no Stripe e adicione STRIPE_WEBHOOK_SECRET na Vercel"
        },
        "stripePrices": {
          "label": "Preços do Stripe ({{n}}/{{total}})",
          "hint": "Faltam IDs de preço: STRIPE_PRICE_STARTER_MONTHLY/YEARLY e STRIPE_PRICE_PRO_MONTHLY/YEARLY"
        },
        "resend": {
          "label": "Resend (envio de e-mail)",
          "hint": "Adicione RESEND_API_KEY na Vercel"
        },
        "emailFrom": {
          "label": "Remetente de e-mail",
          "hint": "Defina EMAIL_FROM com um domínio verificado no Resend"
        },
        "turnstile": {
          "label": "Turnstile (anti-bots)",
          "hint": "Adicione TURNSTILE_SECRET_KEY; sem ele, o registo público fica desprotegido"
        },
        "superadmins": {
          "label": "Administradores da plataforma ({{n}})",
          "hint": "Defina SUPERADMIN_EMAILS (e-mails separados por vírgulas)"
        },
        "publicAppBaseUrl": {
          "label": "URL pública da aplicação",
          "hint": "Defina PUBLIC_APP_BASE_URL (p. ex. https://www.bookingfornow.com)"
        },
        "sentry": {
          "label": "Sentry (erros do backend)",
          "hint": "Os erros já ficam guardados abaixo, em «Últimos erros». Com SENTRY_DSN, são também enviados para o Sentry."
        },
        "twilio": {
          "label": "Twilio (SMS)",
          "hint": "Depende de TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN e TWILIO_FROM_NUMBER. Com as três, os negócios do plano Pro enviam lembretes e confirmações por SMS; se faltar alguma, não se envia nenhum. Hoje nenhum plano o anuncia."
        },
        "tenantSubdomains": {
          "label": "Subdomínio próprio por negócio",
          "hint": "Com CLOUDFLARE_API_TOKEN, CLOUDFLARE_ZONE_ID, VERCEL_TOKEN e VERCEL_PROJECT_ID, cada registo cria o seu <negocio>.bookingfornow.com enquanto o projeto da Vercel tiver menos de VERCEL_MAX_DOMAINS domínios (45 por predefinição; aumente-o ao passar para a Vercel Pro)"
        },
        "signupEnabled": {
          "label": "Registo público",
          "hint": "SIGNUP_ENABLED=true permite novos registos"
        },
        "demoEnabled": {
          "label": "Modo demo",
          "hint": "Só abre a conta de demonstração da aplicação (e repõe-na todos os dias). A demo pública do site (/en/demo) funciona sempre e não depende disto."
        },
        "cronSecretExternal": {
          "label": "Credencial do disparo horário (GitHub Actions)",
          "hint": "Adicione CRON_SECRET_EXTERNAL na Vercel e o mesmo valor como segredo do repositório no GitHub; sem ele, os lembretes só são enviados uma vez por dia com o cron da Vercel"
        }
      },
      "schema": {
        "title": "Esquema da base de dados",
        "unknown": "Não verificado",
        "migrationsLabel": "Migrações SQL",
        "migrationsCount": "{{applied}} de {{total}} registadas em schema_migrations",
        "pendingState": "Pendentes: {{n}}",
        "pendingHint": "Aplique estas migrações antes de publicar código que dependa delas:",
        "baselineHint": "Não há nenhuma migração registada. Se a base de dados já estava atualizada, não as aplique: verifique o estado com --list e registe-as com --baseline --until=N.",
        "reasons": {
          "SQL_DIR_UNAVAILABLE": "A versão publicada não inclui backend/sql, pelo que não é possível comparar com a base de dados.",
          "MIGRATIONS_TABLE_MISSING": "A tabela schema_migrations não existe: a base de dados foi migrada manualmente. Registe o que já está aplicado com --baseline --until=N.",
          "MIGRATIONS_TABLE_UNREADABLE": "Não foi possível ler a tabela schema_migrations."
        },
        "overlapLabel": "Proteção contra sobreposição de agendamentos (migração 32)",
        "overlapOff": "Inativa",
        "overlapOffHint": "A restrição appointments_no_practitioner_overlap não existe: se duas pessoas reservarem ao mesmo tempo o mesmo horário com o mesmo profissional, ambos os agendamentos podem entrar. Procure os avisos «32/1 SALTADO» da migração 32, corrija a causa e volte a executar o seu bloco 1.",
        "overlapPendingHint": "A migração 32 ainda não foi aplicada: a proteção é criada ao aplicá-la (consulte a lista de migrações pendentes).",
        "overlapReasons": {
          "RPC_MISSING": "Não é possível verificar: falta a função platform_schema_flags da migração 31.",
          "RPC_ERROR": "Não foi possível verificar a restrição de sobreposição.",
          "RPC_UNEXPECTED": "A verificação da restrição de sobreposição devolveu uma resposta inesperada."
        },
        "notApplied": "Não aplicado",
        "flagPendingHint": "Chega com a migração {{n}}, que ainda está pendente (consulte a lista de migrações pendentes).",
        "flagsLabel": "Restantes verificações do esquema",
        "flagsReasons": {
          "RPC_OUTDATED": "A função platform_schema_flags ainda é a da migração 31. Aplique a migração 33 para verificar o resto do esquema (se já constar como aplicada, procure o aviso «33/6 SALTADO»).",
          "RPC_MISSING": "Não é possível verificar: falta a função platform_schema_flags (migrações 31 e 33).",
          "RPC_ERROR": "Não foi possível consultar o estado do esquema.",
          "RPC_UNEXPECTED": "A verificação do esquema devolveu uma resposta inesperada."
        },
        "flags": {
          "unassignedOverlap": {
            "label": "Proteção contra sobreposição de agendamentos sem profissional (migração 33)",
            "hint": "A restrição appointments_no_unassigned_overlap não existe: dois agendamentos sem profissional atribuído podem ocupar o mesmo horário ao mesmo tempo. Procure o aviso «33/2 SALTADO» da migração 33, resolva as sobreposições que indicar e volte a executá-la."
          },
          "durationCheck": {
            "label": "Duração coerente dos agendamentos (migração 33)",
            "hint": "A restrição appointments_duration_consistent não existe ou não está validada: pode haver agendamentos cuja hora de fim não corresponde à duração. Procure os avisos «33/3» da migração 33, corrija esses agendamentos e volte a executá-la."
          },
          "localeColumn": {
            "label": "Idioma do cliente nos agendamentos (migração 33)",
            "hint": "Falta a coluna appointments.locale, onde se guarda o idioma do cliente para lhe escrever nesse idioma. Procure o aviso «33/1 SALTADO» da migração 33, corrija a causa e volte a executá-la."
          },
          "rateLimit": {
            "label": "Limite de pedidos partilhado (migração 33)",
            "hint": "Falta a tabela rate_limit_hits ou a função rate_limit_hit: o registo e as cópias de segurança só são limitados na memória de cada instância, o que é fácil de contornar. Procure o aviso «33/4 SALTADO» da migração 33 e volte a executá-la."
          },
          "logsPrune": {
            "label": "Retenção automática de registos (migração 33)",
            "hint": "Falta a função logs_prune: o cron diário não aplica a retenção (os e-mails com mais de um ano mantêm o destinatário e o assunto, e os registos com mais de 3 anos não são apagados). Procure o aviso «33/5 SALTADO» da migração 33 e volte a executá-la."
          },
          "patientsSoftDelete": {
            "label": "Eliminação de clientes com anonimização (migração 21)",
            "hint": "Faltam as colunas deletedAt ou anonymizedAt de patients: a eliminação de clientes com anonimização e as consultas que excluem os clientes eliminados falham. Aplique (ou volte a executar) a migração 21."
          },
          "planDeactivation": {
            "label": "Desativação de recursos por plano (migração 30)",
            "hint": "Falta a coluna deactivatedByPlan em practitioners ou locations: ao descer de plano não é possível desativar os profissionais e locais a mais, nem reativá-los ao voltar a subir. Aplique (ou volte a executar) a migração 30."
          },
          "legacyWhatsapp": {
            "label": "Limpeza das colunas antigas do WhatsApp (migração 34)",
            "hint": "A tabela appointments ainda tem as colunas whatsappReminderSent e whatsappReminderSentAt, que já não são usadas. A migração 34 apaga-as e é destrutiva: aplique-a com --allow-destructive depois de fazer uma cópia de segurança."
          }
        }
      },
      "top4xx": {
        "title": "4xx mais frequentes",
        "hint": "Qualquer /api/* que não exista responde 401 se chegar sem sessão, por isso um 401 numa rota desconhecida é um robô, um scanner ou um teste manual. Verifique apenas as rotas próprias que se repitam."
      }
    },
    "tenants": {
      "search": "Pesquisar por nome ou slug…",
      "count_one": "{{count}} empresa",
      "count_few": "{{count}} empresas",
      "count_many": "{{count}} empresas",
      "count_other": "{{count}} empresas",
      "basicMode": "Dados de atividade indisponíveis; é apresentada a lista básica.",
      "never": "Nunca",
      "trialUntil": "Teste até {{date}}",
      "originDirect": "Direto",
      "noResults": "Nenhuma empresa corresponde ao filtro",
      "openBooking": "Abrir a sua página de reservas",
      "referral": {
        "referredBy": "Recomendado por {{slug}}",
        "statusPending": "por ativar",
        "statusActivated": "ativado",
        "summary": "Recomendou {{referred}} · {{activated}} ativos · {{rewards}} recompensas",
        "failed": "Recompensas falhadas: {{n}} (rever)"
      },
      "sort": {
        "label": "Ordenar por",
        "lastActivity": "Última atividade",
        "created": "Data de registo",
        "name": "Nome",
        "appointments": "Agendamentos no período"
      },
      "cols": {
        "patients": "Clientes",
        "appointments": "Agend. ({{days}} d)",
        "online": "Online ({{days}} d)",
        "lastActivity": "Última atividade",
        "bookingViews": "Visitas à reserva",
        "actions": "Ações"
      }
    },
    "confirmPlan": {
      "title": "Mudar plano",
      "message": "Mudar o plano de {{name}} de «{{from}}» para «{{to}}»? O backend ajustará os recursos aos limites do novo plano.",
      "confirm": "Mudar plano"
    },
    "confirmSuspend": {
      "title": "Suspender empresa",
      "message": "Suspender {{name}}? A sua equipa perderá o acesso de imediato e a sua página de reservas deixará de aceitar agendamentos. Pode reativá-la quando quiser."
    },
    "unavailable": {
      "title": "Análise indisponível",
      "migration": "Falta aplicar a migração 31 da base de dados, que cria as tabelas e funções de análise.",
      "error": "O backend devolveu um erro ao calcular a análise.",
      "loadError": "Não foi possível carregar a análise (HTTP {{status}}).",
      "howTo": "Como resolver",
      "migrationSteps": "Execute «{{cmd}}» a partir de backend/ (aplica {{file}}) e recarregue esta página.",
      "retry": "Tentar novamente"
    },
    "errors": {
      "TENANT_HAS_SUBSCRIPTION": "Esta empresa tem uma subscrição do Stripe: o seu plano é gerido pelo Stripe. Altere-a ou cancele-a lá primeiro.",
      "TENANT_HAS_ACTIVE_PLAN": "Esta empresa tem um plano de cortesia ativo. Passe-a primeiro para Free e depois prolongue o período de teste.",
      "TENANT_NOT_FOUND": "Essa empresa já não existe.",
      "INVALID_TENANT_ID": "Identificador de empresa inválido.",
      "INVALID_PLAN": "Esse plano não é válido."
    }
  },
  "businessHours": {
    "eyebrow": "Empresa",
    "title": "Horário de trabalho",
    "open": "Aberto",
    "closed": "Fechado",
    "addWindow": "+ Adicionar intervalo",
    "quitarTramo": "Remover intervalo",
    "desde": "De",
    "hasta": "Até",
    "errorFormato": "Formato de horário inválido. Verifique as horas (HH:MM) de cada intervalo.",
    "days": {
      "mon": "Segunda",
      "tue": "Terça",
      "wed": "Quarta",
      "thu": "Quinta",
      "fri": "Sexta",
      "sat": "Sábado",
      "sun": "Domingo"
    }
  },
  "subscriptionBanner": {
    "manage": "Gerir",
    "trialEndsToday": "O seu período de teste termina hoje. Escolha um plano para manter todas as funcionalidades.",
    "pastDue": "O seu último pagamento não foi concluído. Atualize o método de pagamento para evitar a suspensão do serviço.",
    "unpaid": "Existem faturas pendentes na sua conta. Regularize o pagamento para manter o serviço ativo.",
    "canceled": "A sua subscrição foi cancelada. Reative um plano para continuar a usar a plataforma.",
    "incompleteExpired": "Não foi possível concluir a sua subscrição. Tente o pagamento novamente para ativar o seu plano.",
    "generic": "Há um problema com a sua subscrição. Verifique as definições de faturação.",
    "freeHint": "Está no plano Free. Quando o seu negócio crescer, passe para um plano superior para aumentar os limites e as funcionalidades.",
    "viewPlans": "Ver planos",
    "trialEndsInDays_one": "O seu período de teste termina em {{count}} dia. Escolha um plano para manter todas as funcionalidades.",
    "trialEndsInDays_few": "O seu período de teste termina em {{count}} dias. Escolha um plano para manter todas as funcionalidades.",
    "trialEndsInDays_many": "O seu período de teste termina em {{count}} dias. Escolha um plano para manter todas as funcionalidades.",
    "trialEndsInDays_other": "O seu período de teste termina em {{count}} dias. Escolha um plano para manter todas as funcionalidades."
  },
  "titles": {
    "home": "Software de reservas online com plano grátis",
    "suspended": "Conta suspensa",
    "login": "Iniciar sessão no seu software de reservas",
    "resetPassword": "Recuperar palavra-passe",
    "agenda": "Agenda",
    "clients": "Clientes",
    "clientDetail": "Ficha do cliente",
    "settings": "Definições",
    "billing": "Faturação",
    "catalogs": "Catálogos",
    "audit": "Auditoria",
    "timeBlocks": "Bloqueios de agenda",
    "bookingSettings": "Definições de reserva online",
    "pendingBookings": "Reservas pendentes",
    "platform": "Plataforma",
    "publicBooking": "Reserva online",
    "myAppointment": "O meu agendamento",
    "signup": "Crie a sua conta grátis: 14 dias de teste sem cartão",
    "notFound": "Página não encontrada",
    "team": "Equipa",
    "bonos": "Pacotes"
  },
  "notFound": {
    "eyebrow": "Erro 404",
    "title": "Página não encontrada",
    "lead": "A página que procura não existe ou mudou de endereço.",
    "home": "Ir para a página inicial"
  },
  "a11y": {
    "skipToContent": "Saltar para o conteúdo"
  },
  "confirmModal": {
    "title": "Confirmar ação",
    "message": "Tem a certeza de que pretende continuar?",
    "itemLabel": "Elemento"
  },
  "whatsappCta": {
    "homeLabel": "Dúvidas? Escreva-nos pelo WhatsApp",
    "homeMessage": "Olá, vi o BookingForNow e tenho uma dúvida",
    "signupLead": "Dúvidas sobre o registo?",
    "signupLabel": "Escreva-nos pelo WhatsApp",
    "signupMessage": "Olá, estou a registar-me no BookingForNow e tenho uma dúvida",
    "ariaLabel": "{{label}} (abre num novo separador)"
  },
  "tour": {
    "stepOf": "Passo {{current}} de {{total}}",
    "close": "Fechar o tutorial",
    "skip": "Saltar tutorial",
    "configure": "Ir para a configuração",
    "finish": "Concluir",
    "relaunch": "Ver tutorial",
    "relaunchAria": "Ver o tutorial de configuração",
    "steps": {
      "business": {
        "title": "O seu negócio",
        "body": "Comece pelos dados do seu negócio: o telefone, o e-mail e a morada que os seus clientes verão ao reservar, bem como o idioma, a moeda e o fuso horário."
      },
      "team": {
        "title": "A sua equipa",
        "body": "Um profissional é você ou cada pessoa da sua equipa que atende agendamentos. Registe pelo menos um para poder receber reservas. Encontra-o no separador «Profissionais»."
      },
      "services": {
        "title": "Os seus serviços",
        "body": "Os serviços são o que oferece (uma sessão, um corte, uma revisão, uma aula…), cada um com a sua duração e o seu preço. Crie-os no separador «Serviços»."
      },
      "hours": {
        "title": "O seu horário",
        "body": "Defina o seu horário de atendimento para que os seus clientes só possam reservar quando está disponível."
      },
      "link": {
        "title": "Partilhe o seu link de reservas",
        "body": "A sua página já aceita reservas: partilhe o seu link público para que os seus clientes reservem por conta própria. Encontra-o em «Definições de reserva online», onde também a pode desativar.",
        "cta": "Ir para o meu link"
      }
    }
  },
  "team": {
    "eyebrow": "Definições",
    "title": "Equipa",
    "subtitle": "Dê acesso à sua agenda aos seus profissionais e à receção, cada um com as permissões adequadas.",
    "loadError": "Não foi possível carregar a equipa.",
    "retry": "Tentar novamente",
    "invite": {
      "title": "Convidar uma pessoa",
      "email": "E-mail",
      "emailPlaceholder": "nome@exemplo.com",
      "role": "Função",
      "practitioner": "A sua ficha de profissional",
      "practitionerNone": "Sem associação",
      "practitionerHelp": "Associe-o à sua ficha de profissional para que possa gerir os seus próprios bloqueios de horário.",
      "send": "Enviar convite",
      "sending": "A enviar…"
    },
    "members": {
      "linkOf": "Ficha de profissional de {{email}}",
      "title": "Pessoas com acesso",
      "you": "Você",
      "pending": "Convite pendente",
      "lastSeen": "Último acesso: {{date}}",
      "roleOf": "Função de {{email}}",
      "resend": "Reenviar",
      "remove": "Remover acesso"
    },
    "toasts": {
      "linkChanged": "Ficha de profissional atualizada",
      "invited": "Convite enviado para {{email}}",
      "resent": "Convite reenviado para {{email}}",
      "roleChanged": "Função atualizada",
      "removed": "{{email}} já não tem acesso"
    },
    "errors": {
      "PRACTITIONER_ALREADY_LINKED": "Essa ficha de profissional já está associada a outra conta.",
      "PRACTITIONER_NOT_FOUND": "Essa ficha de profissional já não existe.",
      "INVALID_EMAIL": "Esse e-mail não é válido.",
      "INVALID_ROLE": "Essa função não é válida.",
      "ROLE_NOT_ALLOWED": "Não tem permissão para atribuir ou gerir essa função.",
      "ALREADY_MEMBER": "Essa pessoa já faz parte da equipa.",
      "PLAN_LIMIT_REACHED": "Atingiu o número de utilizadores do seu plano.",
      "CANNOT_MODIFY_SELF": "Não pode alterar o seu próprio acesso.",
      "OWNER_PROTECTED": "O proprietário não pode ser alterado aqui.",
      "NOT_FOUND": "Essa pessoa já não faz parte da equipa.",
      "INVITE_LINK_FAILED": "Não foi possível gerar o convite. Tente novamente dentro de alguns minutos.",
      "AUTH_UNAVAILABLE": "O serviço de acesso não está disponível neste momento.",
      "ACCOUNT_MISMATCH": "A conta dessa pessoa mudou. Remova-lhe o acesso e volte a convidá-la.",
      "copyFailed": "Não foi possível copiar. Selecione o link e copie-o manualmente."
    },
    "seats": {
      "count": "{{used}} de {{limit}} utilizadores",
      "unlimited": "{{used}} utilizadores · sem limite",
      "full": "Atingiu o número de utilizadores do seu plano.",
      "upgrade": "Ver planos"
    },
    "manual": {
      "title": "Partilhe você mesmo o link de acesso",
      "body": "Não conseguimos enviar o e-mail para {{email}}. Copie este link e envie-o por WhatsApp ou pelo meio que preferir.",
      "linkLabel": "Link de acesso",
      "copy": "Copiar link",
      "copied": "Copiado",
      "expires": "O link é pessoal e expira em 24 horas. Não o publique."
    },
    "confirmRemove": {
      "title": "Remover acesso",
      "message": "Remover o acesso de {{email}}? Deixará de poder entrar na sua agenda de imediato. Os seus agendamentos e os seus dados não são eliminados."
    },
    "rolesGuide": {
      "title": "O que cada função pode fazer"
    },
    "roles": {
      "owner": {
        "name": "Proprietário",
        "help": "Tudo, incluindo a subscrição e a gestão da equipa."
      },
      "admin": {
        "name": "Administrador",
        "help": "Gere a agenda, os clientes, os pagamentos, os serviços e as definições. Pode convidar profissionais e receção. Não vê a subscrição."
      },
      "practitioner": {
        "name": "Profissional",
        "help": "Trabalha com a agenda, os clientes e as respetivas notas. Não gere pagamentos, relatórios nem definições."
      },
      "receptionist": {
        "name": "Receção",
        "help": "Gere a agenda, os clientes, os pagamentos e os pacotes. Não vê as notas privadas dos profissionais."
      },
      "readonly": {
        "name": "Só de leitura",
        "help": "Pode consultar a agenda e os clientes, mas não pode alterar nada."
      }
    },
    "managersOnly": "Só o proprietário ou um administrador pode gerir a equipa."
  },
  "theme": {
    "label": "Tema",
    "light": "Claro",
    "dark": "Escuro",
    "system": "Sistema"
  }
}
