{
  "common": {
    "save": "Save",
    "cancel": "Cancel",
    "delete": "Delete",
    "loading": "Loading…",
    "back": "Back",
    "next": "Next",
    "previous": "Previous",
    "confirm": "Confirm",
    "close": "Close",
    "status": "Status",
    "language": "Language",
    "required": "Required",
    "optional": "Optional",
    "success": "Done successfully",
    "searchClient": "Search client…",
    "noDate": "No date",
    "toasts": {
      "deleted": "Deleted",
      "noChanges": "No changes to save",
      "selectPatient": "Select a client"
    },
    "requiredHint": "* Required field"
  },
  "nav": {
    "calendar": "Calendar",
    "patients": "Clients",
    "clinicInfo": "Company information",
    "billingSub": "Billing & subscription",
    "catalogs": "Catalogs (services/practitioners/locations)",
    "timeBlocks": "Time blocks",
    "bookingSettings": "Online booking settings",
    "auditLog": "Audit log",
    "platform": "Platform",
    "bonos": "Packages",
    "bookings": "Bookings",
    "settings": "Settings",
    "goToAgenda": "Go to my calendar",
    "main": "Main navigation",
    "account": "My account",
    "pendingCount": "{{count}} bookings pending review",
    "team": "Team"
  },
  "auth": {
    "login": "Sign in",
    "logout": "Sign out",
    "email": "Email",
    "password": "Password",
    "forgotPassword": "Forgot your password?",
    "signin": "Sign in",
    "sessionExpired": "Your session has expired, please sign in again",
    "systemTitle": "Management System",
    "emailPlaceholder": "you@email.com",
    "passwordPlaceholder": "********",
    "showPassword": "Show password",
    "hidePassword": "Hide password",
    "signinLoading": "Signing in…",
    "forgotTitle": "Reset password",
    "forgotDescription": "Enter your email and we'll send you instructions to reset your password.",
    "sendEmail": "Send email",
    "sending": "Sending…",
    "backToLogin": "Back to sign in",
    "noAccount": "Don't have an account?",
    "createAccount": "Create your company",
    "errors": {
      "generic": "Authentication error",
      "invalidCredentials": "Incorrect email or password",
      "emailNotConfirmed": "You must confirm your email before signing in",
      "userNotFound": "User not found",
      "tooManyAttempts": "Too many attempts. Wait a few minutes and try again",
      "passwordMin": "Password must be at least 8 characters",
      "alreadyRegistered": "This email is already registered",
      "network": "Connection error. Check your internet",
      "invalidEmail": "The email address is not valid",
      "signupsDisabled": "Sign-ups are disabled for this business",
      "weakPassword": "The password is too weak",
      "operationFailed": "The operation could not be completed. Please try again",
      "userInfo": "Could not retrieve user information",
      "unexpected": "Unexpected error while signing in",
      "resetSent": "An email with instructions to reset your password has been sent",
      "resetError": "Error requesting password recovery",
      "passwordUpdated": "Password updated successfully",
      "passwordUpdateError": "Error updating the password",
      "samePassword": "Your new password must be different from the old one"
    },
    "reset": {
      "title": "Choose a new password",
      "description": "Enter the password you will use to log in from now on.",
      "inviteTitle": "Create your password",
      "inviteDescription": "You have been invited to a team. Choose the password you will use to log in from now on.",
      "newPassword": "New password",
      "confirmPassword": "Confirm password",
      "submit": "Save password",
      "saving": "Saving…",
      "mismatch": "The passwords do not match",
      "checking": "Checking your link…",
      "linkInvalidTitle": "This link is no longer valid",
      "linkInvalid": "This password reset link has expired or has already been used. Request a new one and we'll send it right away.",
      "requestNew": "Request a new link",
      "doneTitle": "Password updated",
      "done": "You can now log in with your new password."
    }
  },
  "appointments": {
    "new": "New appointment",
    "status": {
      "pending": "Pending",
      "booked": "Booked",
      "completed": "Completed",
      "cancelled": "Cancelled",
      "noShow": "No-show"
    },
    "duration": "Duration",
    "service": "Service",
    "practitioner": "Practitioner",
    "location": "Location",
    "paid": "Paid",
    "toasts": {
      "created": "Appointment created successfully",
      "createError": "Error creating the appointment",
      "updated": "Appointment updated successfully",
      "updateError": "Error updating the appointment",
      "deleted": "Appointment deleted successfully",
      "deleteError": "Error deleting the appointment",
      "rescheduled": "Appointment rescheduled successfully",
      "rescheduleError": "Error rescheduling the appointment"
    }
  },
  "booking": {
    "title": "Online booking",
    "step": {
      "service": "Pick a service",
      "practitioner": "Pick a practitioner",
      "slot": "Pick date & time",
      "details": "Your details",
      "location": "Choose a location"
    },
    "loading": "Loading…",
    "errorTitle": "Cannot continue",
    "payment": {
      "successTitle": "Payment confirmed.",
      "successText": "We've received your payment and your appointment is confirmed. You'll receive an email with the details.",
      "cancelTitle": "Payment cancelled.",
      "cancelText": "Nothing has been charged. You can try again by selecting the service again."
    },
    "noServices": "No services available.",
    "changeService": "← Change service",
    "changePractitioner": "← Change practitioner",
    "loadingSlots": "Loading slots…",
    "noSlotsDay": "There are no free slots on {{date}}.",
    "patient": {
      "firstName": "First name",
      "lastName": "Last name",
      "phone": "Phone",
      "email": "Email",
      "contactNote": "Please provide phone or email so we can confirm your appointment.",
      "comments": "Comments (optional)",
      "accept": "I agree to the processing of my data to manage this appointment"
    },
    "confirmBook": "Confirm booking",
    "result": {
      "booked": "Booking confirmed!",
      "pending": "Request sent",
      "pendingText": "{{business}} still has to confirm your appointment: it is not guaranteed until then. We'll let you know as soon as it is accepted.",
      "redirecting": "Redirecting to secure payment…",
      "confirmedBadge": "Confirmed",
      "pendingBadge": "Pending approval",
      "manageNote": "You can manage or cancel your appointment from the link we sent you.",
      "notifiedEmail": "We've emailed you the appointment details.",
      "notifiedSms": "We've sent you the appointment details by SMS.",
      "notifiedNone": "We couldn't send you a notification. Save this page or add the appointment to your calendar.",
      "addToCalendar": "Add to calendar",
      "googleCalendar": "Google Calendar",
      "manage": "Manage my appointment",
      "bookAnother": "Book another appointment"
    },
    "submitError": "We could not complete your booking. Please try again.",
    "chooseAnotherSlot": "Choose another time",
    "practitionersError": "We could not load the practitioners. Please try again.",
    "slotsError": "We could not load the available times. Please try again.",
    "retry": "Retry",
    "poweredBy": "Bookings powered by BookingForNow — create yours for free",
    "createYours": {
      "question": "Run a business?",
      "link": "Create a booking page like this one, for free"
    },
    "metaDescription": "Book online with {{name}}: pick a service, date and time in under a minute.",
    "otherDate": "Another date:",
    "noSlotsShort": "No slots",
    "depositNote": "Booking with a {{amount}} deposit — it is deducted from the total price.",
    "eyebrow": "Online booking",
    "stepCounter": "Step {{current}} of {{total}}",
    "depositTitle": "Booking deposit",
    "anyProfessional": "Any available",
    "anyProfessionalHint": "We'll assign you an available professional for the slot you pick.",
    "morning": "Morning",
    "afternoon": "Afternoon",
    "errors": {
      "loadServices": "Error loading services",
      "businessNotFound": "We couldn't find this business. Please check the link.",
      "loadFailed": "The booking page couldn't be loaded. Please try again in a few minutes.",
      "onlineBookingDisabled": "This business is not accepting online bookings at the moment.",
      "slotTaken": "That slot has just been taken. We've refreshed the times: please pick another one.",
      "outsideHours": "That time is outside opening hours. Please pick another slot.",
      "tooSoon": "That time is too soon to book online. Please pick a later one.",
      "tooFar": "That date is too far ahead to book online. Please pick an earlier one.",
      "invalidStart": "The selected time is not valid. Please pick another slot.",
      "invalidEmail": "Please check the email address: it doesn't look valid.",
      "invalidPhone": "Please check the phone number: it doesn't look valid.",
      "missingFields": "Some required details are missing. Please check the form.",
      "contactRequired": "Enter a phone number or an email so we can reach you.",
      "acceptRequired": "We need your consent to manage the appointment.",
      "rateLimited": "Too many attempts in a row. Please wait a few minutes and try again.",
      "tooManyActive": "You already have several active bookings. Please contact the business to manage them.",
      "captchaFailed": "The security check could not be completed. Please try again.",
      "serviceNotFound": "This service is no longer available. Please choose another one.",
      "practitionerUnavailable": "That professional is no longer available for this service. Please choose another one.",
      "invalidLocation": "That location is no longer available. Please choose another one.",
      "network": "No connection. Check your internet and try again."
    },
    "stepNames": {
      "location": "Location",
      "service": "Service",
      "practitioner": "Professional",
      "slot": "Date & time",
      "details": "Your details",
      "done": "Confirmation"
    },
    "changeLocation": "← Change location",
    "changeSlot": "← Change date or time",
    "durationShort": "{{minutes}} min",
    "price": "Price",
    "noPractitionersFor": "There are no professionals available for “{{service}}” right now. Please choose another service.",
    "callBusiness": "Call {{phone}}",
    "dateOutOfRange": "You can only book between {{from}} and {{to}}.",
    "tzNotice": "Times are shown in the business's local time: {{zone}}.",
    "closedDay": "The business is closed on {{date}}.",
    "searchingNext": "Looking for the next day with free slots…",
    "noNextAvailable": "We couldn't find free slots in the coming days. Try another date or another professional.",
    "nextAvailable": "Next available day: {{date}}",
    "requiredHint": "* Required field",
    "privacyNotice": "Data controller: {{business}}. Your details are used only to manage your appointment and notify you about it; BookingForNow processes them on the business's behalf. You can ask {{business}} to access, correct or delete them.",
    "privacyLink": "Privacy policy",
    "captchaExpired": "The verification has expired. Please complete it again to continue.",
    "submitting": "Booking…",
    "demo": {
      "notice": "This is a demo: no real appointment is created.",
      "detail": "Nothing you type is sent or saved.",
      "cta": "Create your free booking page",
      "linkLabel": "See an example booking page"
    }
  },
  "dashboard": {
    "patient": {
      "selectTitle": "Select Client",
      "search": "Search client by name, phone or email…",
      "sessions": "appointments"
    },
    "appointment": {
      "date": "Date",
      "time": "Time",
      "create": "Create appointment",
      "editTitle": "Edit appointment",
      "saveChanges": "Save changes"
    }
  },
  "calendar": {
    "title": "Appointment Calendar",
    "legend": {
      "title": "Legend:",
      "paid": "Paid",
      "unpaid": "Payment pending",
      "closed": "Non-working",
      "overdue": "Unpaid (past)"
    },
    "view": {
      "month": "Month",
      "week": "Week",
      "day": "Day"
    },
    "weekTotal": "Week total",
    "today": "Today",
    "hideAmount": "Hide amount",
    "showAmount": "Show amount",
    "deleteMessage": "Are you sure you want to delete this appointment?",
    "sessionNotes": "Appointment notes",
    "deleteDetails": "This action cannot be undone.",
    "saving": "Saving...",
    "sessionNotesHint": "These notes are associated with this specific appointment",
    "remind": "Remind",
    "newPatient": "New Client",
    "session": "appointment",
    "useBono": "Use package",
    "noBonoOption": "No package (single payment)",
    "moveMessage": "Are you sure you want to move this appointment?",
    "editPatient": "Edit Client",
    "timeSlotHint": "Allowed times: {{start}} - {{end}} in 30-minute steps",
    "deleteTitle": "Delete Appointment",
    "noPhone": "No phone",
    "sessionNotesPlaceholder": "Observations, work performed, client status...",
    "creating": "Creating...",
    "moveTitle": "Move Appointment",
    "noPatients": "No clients found",
    "patient": "Client",
    "moveBtnText": "Move",
    "navNextPeriod": "Next period",
    "exportByApptLabel": "Export invoices by appointment for {{month}}",
    "navPrevPeriod": "Previous period",
    "navGoNextPeriod": "Go to next period",
    "exportByPatientLabel": "Export invoices by client for {{month}}",
    "whatsappReminder": "Send reminder via WhatsApp",
    "exportByAppt": "Export invoices by appointment (one invoice per appointment)",
    "editPatientInfo": "Edit client information",
    "navGoPrevPeriod": "Go to previous period",
    "exportByPatient": "Export invoices by client (one invoice grouping the client's appointments)",
    "closedSlot": "Non-working / Closed",
    "moreCount": "+{{count}} more",
    "form": {
      "service": "Service",
      "serviceNone": "No service",
      "duration": "Duration",
      "durationOther": "Custom",
      "priceLabel": "Amount",
      "paid": "Paid",
      "collected": "Collected",
      "pending": "Pending",
      "bonoPrice": "Included in the package",
      "practitioner": "Professional",
      "practitionerNone": "Unassigned",
      "noPractitionersForService": "No active professional is assigned to this service (check Catalogs → Professionals).",
      "allProfessionals": "All professionals",
      "durationFromService": "The service sets the duration. You can adjust it afterwards by editing the appointment."
    },
    "overlapPractitioner": "That professional already has an appointment then: {{name}} ({{time}}).",
    "overlapPatient": "The client already has another appointment then ({{time}}).",
    "toasts": {
      "patientNotFound": "The client for this appointment was not found",
      "patientUnknown": "Unknown client",
      "invalidTime": "Time must be between {{start}} and {{end}} in 30-minute steps",
      "exportBadFormat": "The export did not return the expected format. Please try again.",
      "exportError": "Could not export the report",
      "cancelled": "Appointment cancelled",
      "cancelledNotified": "Appointment cancelled. The client will get an email about it.",
      "cancelError": "The appointment couldn't be cancelled",
      "updatedNotified": "Appointment updated. The client will get an email with the new time.",
      "rescheduledNotified": "Appointment rescheduled. The client will get an email with the new time."
    },
    "timezoneNote": "Times shown in the business time zone: {{tz}}",
    "showCancelled": "Show cancelled",
    "blockedSlot": "Blocked",
    "minutesShort": "{{count}} min",
    "moveDetails": "{{from}} → {{to}}",
    "movePractitioner": "Staff member: {{from}} → {{to}}",
    "movePastWarning": "Warning: the new date is in the past",
    "errors": {
      "practitionerNotAssigned": "That staff member is not assigned to this service. Pick another one or check Catalogs.",
      "bonoUnavailable": "That package has no sessions left. Pick another one or book without a package.",
      "invalidDuration": "Duration must be a whole number of minutes between {{min}} and {{max}}."
    },
    "whatsapp": {
      "reminder": "Hi {{name}}, this is a reminder of your appointment at {{business}} on {{date}} at {{time}}. If you need to change it or can't make it, please let us know. Thank you!",
      "reminderNoBusiness": "Hi {{name}}, this is a reminder of your appointment on {{date}} at {{time}}. If you need to change it or can't make it, please let us know. Thank you!"
    },
    "notify": {
      "label": "Notify the client by email",
      "hint": "We'll email {{email}} with the new time."
    },
    "cancel": {
      "button": "Cancel appointment",
      "title": "Cancel appointment",
      "message": "The appointment will be cancelled and its slot freed up. You can still see it with “Show cancelled”.",
      "confirm": "Yes, cancel",
      "keep": "No, keep it"
    },
    "viewTitle": "Appointment details",
    "readOnlyNotice": "Your role can only view the calendar."
  },
  "adminAjustes": {
    "title": "Online booking settings",
    "loading": "Loading…",
    "bookingUrl": "Public booking URL:",
    "copyLink": "Copy",
    "saved": "Changes saved",
    "save": "Save changes",
    "saving": "Saving…",
    "online": {
      "legend": "Online bookings",
      "enable": "Enable public booking page",
      "autoAccept": "Auto-accept appointments (no manual review)",
      "autoAcceptOnHint": "Every online booking is confirmed instantly and takes the slot in your calendar. Bookings from clients with several previous no-shows will still ask for your approval.",
      "autoAcceptOffHint": "Every online booking arrives as “Pending”: the slot is held, but it is not confirmed until you approve it.",
      "goToPending": "View pending bookings",
      "noCaptchaHint": "Anti-bot verification is not enabled on the platform yet. Until it is, for safety, every online booking arrives as pending and you have to accept it under Bookings, even with automatic confirmation turned on."
    },
    "policy": {
      "label": "Deadline to cancel or change a booking online",
      "none": "No limit (up to the appointment time)",
      "hoursBefore_one": "{{count}} hour before",
      "hoursBefore_few": "{{count}} hours before",
      "hoursBefore_many": "{{count}} hours before",
      "hoursBefore_other": "{{count}} hours before",
      "custom": "Other…",
      "customLabel": "Hours in advance (0 to 720)",
      "hoursUnit": "hours",
      "hint": "Your clients can cancel or change their booking from the link they receive when they book. With less time left than you choose here, that link no longer lets them do it and asks them to contact you. Nothing is charged: it only blocks online changes and cancellations. You can still cancel or move any booking from your calendar at any time, and new bookings are not affected.",
      "invalid": "Enter a whole number of hours between 0 and 720."
    },
    "locale": {
      "legend": "Localisation",
      "language": "Language",
      "currency": "Currency",
      "timezone": "Time zone",
      "country": "Country (ISO)",
      "timezonePlaceholder": "Select a time zone",
      "invalidNotice": "Check the highlighted values: with a wrong time zone, currency or language your clients will see the wrong times and prices.",
      "goToConfig": "Change in Settings",
      "usedByBookingPage": "Your booking page shows times and prices using these values."
    },
    "eyebrow": "Online booking",
    "toasts": {
      "loadError": "Error loading settings",
      "saveError": "Error while saving"
    },
    "share": {
      "title": "Share your booking page",
      "subtitle": "This is the link where your clients book by themselves. Put it on Instagram, Google Maps, WhatsApp, your website or at the front desk.",
      "copied": "Copied",
      "copyFailed": "Could not copy. Select the text and copy it manually.",
      "open": "View as a client",
      "disabledNotice": "Your page is not taking bookings yet: turn on “Enable public booking page” below and save your changes.",
      "noServices": "You have no active services: your clients will see an empty page.",
      "noPractitioners": "You have no active staff members: your clients will not find any time slots.",
      "goToCatalogs": "Go to services and staff",
      "trialBranding": "During your trial, your booking page, the appointment portal, the emails your clients receive and the appointment they add to their calendar carry a discreet mention of BookingForNow, and after booking your clients see an invitation to create their own page for free. Starter and Pro remove all of it.",
      "whatsapp": "Share on WhatsApp",
      "whatsappMessage": "Book your appointment at {{name}} whenever you like, in under a minute: {{url}}",
      "showQr": "QR code",
      "qrAlt": "QR code of your booking page",
      "qrHint": "Print it and place it at the front desk, in the window or on your cards: scanning it opens your booking page.",
      "printQr": "Print",
      "printCta": "Scan to book your appointment",
      "downloadQr": "Download (SVG)",
      "qrError": "The QR code could not be generated. Reload the page and try again.",
      "popupBlocked": "Your browser blocked the print window. Allow pop-ups for this site or download the QR code.",
      "embedLabel": "“Book now” button for your website",
      "embedHint": "Paste this code into your website: it shows a button that opens your booking page in a new tab.",
      "embedButtonLabel": "Book an appointment",
      "copyEmbed": "Copy code",
      "iframeLabel": "Or embed the booking page in your website",
      "iframeHint": "Paste it where you want the booking form to appear. If your website does not allow iframes, use the button above.",
      "copyIframe": "Copy code",
      "iframeTitle": "Book an appointment at {{name}}"
    },
    "referral": {
      "title": "Recommend BookingForNow",
      "lede_one": "Share your link with other businesses. When one signs up with it and gets its first online booking, we give you {{count}} day with every feature or, if you are already on a paid plan, one month’s fee as account credit.",
      "lede_few": "Share your link with other businesses. When one signs up with it and gets its first online booking, we give you {{count}} days with every feature or, if you are already on a paid plan, one month’s fee as account credit.",
      "lede_many": "Share your link with other businesses. When one signs up with it and gets its first online booking, we give you {{count}} days with every feature or, if you are already on a paid plan, one month’s fee as account credit.",
      "lede_other": "Share your link with other businesses. When one signs up with it and gets its first online booking, we give you {{count}} days with every feature or, if you are already on a paid plan, one month’s fee as account credit.",
      "linkLabel": "Your referral link:",
      "whatsapp": "Recommend on WhatsApp",
      "whatsappMessage": "I recommend BookingForNow for managing your business’s appointments: your clients book online by themselves and there is a free plan. Try it here: {{url}}",
      "terms": "Program terms",
      "stats": {
        "signedUp": "Signed up",
        "activated": "Taking bookings",
        "rewards": "Rewards this year",
        "rewardsValue": "{{n}} of {{max}}"
      },
      "newReward": "Your recommendation has paid off: a reward has been applied to your account.",
      "historyTitle": "Your rewards",
      "reward": {
        "trial_one": "{{count}} day with every feature, until {{date}}",
        "trial_few": "{{count}} days with every feature, until {{date}}",
        "trial_many": "{{count}} days with every feature, until {{date}}",
        "trial_other": "{{count}} days with every feature, until {{date}}",
        "credit": "{{amount}} credit on your subscription",
        "failed": "We couldn’t apply it automatically: we are reviewing it by hand and will write to you.",
        "cap": "No reward: you had already received this year’s {{max}}."
      },
      "privacy": "You only see numbers: we don’t tell you which businesses signed up with your link."
    },
    "errors": {
      "invalidBranding": "The logo or the colour is not valid. Use an https URL and a colour in #RRGGBB format."
    },
    "branding": {
      "legend": "Your page's look"
    }
  },
  "adminAuditoria": {
    "title": "Audit log",
    "subtitle": "Tamper-proof record of who changed what in your business.",
    "filter": {
      "action": "Action",
      "entity": "Entity",
      "actor": "Email of who made the change",
      "apply": "Apply",
      "loading": "Loading…",
      "allEntities": "All",
      "allActions": "All",
      "actorPlaceholder": "person@example.com"
    },
    "cols": {
      "date": "Date",
      "actor": "Who",
      "action": "Action",
      "entity": "Entity",
      "id": "ID",
      "ip": "IP"
    },
    "close": "Close",
    "view": "View",
    "empty": "No entries.",
    "eyebrow": "Log",
    "noActor": "Client or system",
    "verbs": {
      "create": "Created",
      "update": "Updated",
      "delete": "Deleted",
      "anonymize": "Anonymised (data erasure)",
      "bulk_import": "Bulk import",
      "reschedule": "Rescheduled",
      "accept": "Accepted",
      "reject": "Rejected",
      "cancel": "Cancelled",
      "mark_paid": "Marked as paid",
      "upload": "File uploaded",
      "logo_upload": "Logo uploaded",
      "practitioners_update": "Assigned staff changed",
      "services_update": "Assigned services changed",
      "locations_update": "Assigned locations changed",
      "checkout_started": "Subscription checkout started",
      "confirmed_from_checkout": "Subscription confirmed",
      "cancel_scheduled": "Subscription cancellation scheduled",
      "reactivated": "Subscription reactivated",
      "downgraded_manual": "Downgraded to a lower plan",
      "billing_export": "Billing export",
      "plan_changed": "Plan changed",
      "ended_reconciled": "Subscription ended",
      "tenant_extend_trial": "Trial extended by support",
      "tenant_activate": "Account activated by support",
      "tenant_suspend": "Account suspended by support",
      "tenant_set_plan": "Plan changed by support",
      "restore": "Backup restored",
      "invite": "Team invitation",
      "resend": "Invitation resent",
      "remove": "Removed from the team",
      "terms_accepted": "Terms and Privacy policy accepted",
      "attribution": "Sign-up source",
      "rewarded": "Referral program reward",
      "marketing_unsubscribed": "Unsubscribed from tips and offers emails",
      "restore_failed": "Backup restore failed",
      "prices_update": "Prices changed",
      "feed_rotate": "Calendar sync link regenerated"
    },
    "entities": {
      "patient": "Client",
      "appointment": "Appointment",
      "bono": "Package",
      "patient_file": "Client file",
      "service": "Service",
      "practitioner": "Staff member",
      "location": "Location",
      "time_block": "Time block",
      "note_template": "Note template",
      "clinical_note": "Session note",
      "consent_form_template": "Consent form template",
      "consent_signature": "Consent signature",
      "tenant_settings": "Business settings",
      "tenant": "Subscription",
      "report": "Report",
      "tenant_user": "Team member",
      "backup": "Backup",
      "email_preferences": "Email preferences",
      "configuration": "Configuration"
    },
    "pagination": {
      "range": "Entries {{from}}–{{to}}"
    },
    "errors": {
      "invalidFilter": "Invalid filter: the email cannot contain spaces, commas, brackets, * or %."
    }
  },
  "adminBloqueos": {
    "title": "Time blocks",
    "subtitle": "Periods when a practitioner or location is unavailable (holidays, training, maintenance…).",
    "filter": {
      "practitioner": "Practitioner",
      "location": "Location",
      "all": "— All —",
      "allF": "— All —",
      "hidePast": "Hide past blocks"
    },
    "form": {
      "newTitle": "New block",
      "editTitle": "Edit block",
      "practitioner": "Practitioner",
      "location": "Location",
      "start": "Start",
      "end": "End",
      "reason": "Reason",
      "reasonPlaceholder": "Holiday, training…",
      "globalHint": "With no staff member and no location selected, the block closes the whole business: nobody will be able to book during that period.",
      "timezoneHint": "Times are in the business's time zone: {{zone}}."
    },
    "empty": "No blocks.",
    "confirm": {
      "title": "Delete block",
      "message": "Are you sure you want to delete this block?"
    },
    "eyebrow": "Availability",
    "newLabel": "New block",
    "blockedLabel": "Blocked",
    "allPractitioners": "All practitioners",
    "allLocations": "All locations",
    "toasts": {
      "requiredTimes": "Start and end are required",
      "endAfterStart": "End must be after start",
      "saved": "Block saved"
    },
    "globalLabel": "Business closed",
    "emptyUpcoming": "No upcoming blocks",
    "emptyHint": "Block holidays, days off or absences so that nobody can book during those hours.",
    "errors": {
      "notOwn": "You can only manage your own time blocks.",
      "tooLong": "A time block cannot last more than {{days}} days.",
      "invalid": "Check the dates and the reason of the time block."
    }
  },
  "adminCatalogos": {
    "title": "Catalogs",
    "subtitle": "Services, staff and locations for the company.",
    "info": "A service is what you offer (e.g. a massage). A practitioner is who performs it. A location is where it takes place. Assign each practitioner their services and locations.",
    "loading": "Loading…",
    "tabs": {
      "services": "Services ({{count}})",
      "practitioners": "Practitioners ({{count}})",
      "locations": "Locations ({{count}})"
    },
    "common": {
      "save": "Save",
      "cancel": "Cancel",
      "edit": "Edit",
      "delete": "Delete",
      "saving": "Saving…",
      "active": "Active",
      "inactive": "Inactive"
    },
    "services": {
      "form": {
        "newTitle": "New service",
        "editTitle": "Edit service",
        "name": "Name",
        "namePlaceholder": "e.g. Haircut, First consultation, Check-up…",
        "duration": "Duration (min)",
        "price": "Price",
        "tax": "Tax (%)",
        "color": "Color",
        "active": "Active",
        "description": "Description"
      },
      "durationUnit": "{{min}} min",
      "newLabel": "New service",
      "emptyTitle": "Add your first service",
      "emptyHint": "A service is what your clients see and book: name, duration and price."
    },
    "practitioners": {
      "form": {
        "newTitle": "New practitioner",
        "editTitle": "Edit practitioner",
        "firstName": "First name",
        "lastName": "Last name",
        "email": "Email",
        "phone": "Phone",
        "color": "Color",
        "active": "Active",
        "bio": "Bio"
      },
      "assignments": {
        "services": "Services",
        "locations": "Locations",
        "noServices": "No services defined yet.",
        "noLocations": "No locations defined yet."
      },
      "empty": "No practitioners.",
      "newLabel": "New practitioner",
      "emptyTitle": "Add your team",
      "emptyHint": "Staff members are the people who take the appointments. Each one has their own calendar."
    },
    "locations": {
      "form": {
        "newTitle": "New location",
        "editTitle": "Edit location",
        "name": "Name",
        "address": "Address",
        "cp": "Postal code",
        "city": "City",
        "province": "Province / region",
        "country": "Country",
        "phone": "Phone",
        "email": "Email",
        "timezone": "Time zone",
        "timezonePlaceholder": "Select a time zone",
        "active": "Active"
      },
      "newLabel": "New location",
      "emptyTitle": "Create your first location",
      "emptyHint": "A location is your premises or workplace. You need at least one to assign staff members."
    },
    "confirm": {
      "title": "Confirm deletion",
      "serviceMessage": "Are you sure you want to delete this service?",
      "practitionerMessage": "Are you sure you want to delete this practitioner?",
      "locationMessage": "Are you sure you want to delete this location?",
      "serviceLabel": "Service",
      "practitionerLabel": "Practitioner",
      "locationLabel": "Location"
    },
    "eyebrow": "Settings",
    "toasts": {
      "nameRequired": "Name is required",
      "serviceSaved": "Service saved",
      "practitionerSaved": "Practitioner saved",
      "locationSaved": "Location saved",
      "loadError": "Error loading catalogs",
      "saveError": "Error while saving",
      "locationRequired": "You must assign at least one location",
      "serviceRequired": "Name and duration are required"
    },
    "catalog": {
      "practitioners": "Assigned practitioners"
    },
    "inUse": {
      "title": "It cannot be deleted",
      "message": "It has appointments or other data linked to it: deleting it would leave that history incomplete.",
      "details": "You can deactivate it instead: it will no longer be offered for new bookings and the history is kept.",
      "confirm": "Deactivate",
      "deactivated": "Deactivated: it is no longer offered for new bookings"
    }
  },
  "adminPendientes": {
    "title": "Pending bookings",
    "refresh": "Refresh",
    "loading": "Loading…",
    "empty": "No pending bookings to confirm.",
    "accept": "Accept",
    "reject": "Reject",
    "modal": {
      "title": "Reject booking",
      "reason": "Reason (optional, sent to the client)",
      "cancel": "Cancel",
      "confirm": "Confirm rejection"
    },
    "eyebrow": "Inbox",
    "toasts": {
      "acceptError": "Error accepting the booking",
      "rejectError": "Error rejecting the booking",
      "alreadyHandled": "This booking had already been handled (accepted, rejected or cancelled) and has been removed from the inbox.",
      "overlap": "It cannot be accepted: that staff member already has another appointment at that time. The booking is still pending."
    },
    "unnamedClient": "Unnamed client",
    "noService": "No service",
    "noPractitioner": "No staff member assigned",
    "source": {
      "online": "Online booking",
      "staff": "Created by staff",
      "other": "Other source"
    },
    "payment": {
      "none": "No online payment",
      "pending": "Payment pending",
      "paid": "Paid",
      "refunded": "Refunded",
      "failed": "Payment failed"
    }
  },
  "billing": {
    "title": "Billing",
    "planBilling": "Billing & plan",
    "subtitle": "Choose the plan that best fits your business.",
    "info": "Each plan sets the limits of your account. Free: 1 staff member, 1 location, 2 users with access and up to 50 clients. Starter: up to 3 staff members, 1 location and 5 users, with automatic email reminders. Pro: unlimited staff, locations and users, with automatic email reminders and priority support.",
    "currentStatus": {
      "plan": "Current plan:",
      "renewal": "Next renewal:",
      "manage": "Manage subscription",
      "cancel": "Cancel subscription",
      "reactivate": "Reactivate",
      "cancelingTag": "Cancellation scheduled",
      "willCancelOn": "It will be canceled on {{date}} and your account will move to the Free plan."
    },
    "cancelModal": {
      "title": "Cancel subscription",
      "message": "Are you sure you want to cancel your subscription?",
      "keepAccess": "You keep every feature until {{date}}. After that, your account moves to the Free plan (1 staff member, 1 location, up to 50 clients and no automatic reminders).",
      "confirm": "Yes, cancel",
      "downgradeNow": "Your plan will switch to Free right now (1 staff member, 1 location, up to 50 clients and no automatic reminders)."
    },
    "usageSection": {
      "title": "Current usage",
      "patients": "Clients",
      "practitioners": "Practitioners",
      "locations": "Locations",
      "unlimited": "(unlimited)"
    },
    "cycle": {
      "monthly": "Monthly",
      "yearly": "Yearly",
      "yearlySave": "2 months free"
    },
    "plan": {
      "recommended": "Recommended",
      "current": "Current plan",
      "soon": "Coming soon",
      "subscribe": "Subscribe",
      "change": "Switch to this plan"
    },
    "loading": "Loading...",
    "plans": {
      "free": {
        "tagline": "Free forever, to start taking bookings",
        "features": [
          "1 staff member and 1 location",
          "Up to 50 clients",
          "2 users with access to the dashboard",
          "Calendar, session packs and 24/7 online booking page"
        ],
        "note": "Free forever. Change plan whenever you want."
      },
      "starter": {
        "tagline": "For small businesses and solo professionals",
        "features": [
          "Up to 3 staff members and 1 location",
          "Unlimited clients",
          "Up to 5 users with access to the dashboard",
          "Automatic email reminders",
          "No BookingForNow branding on your booking page"
        ]
      },
      "pro": {
        "tagline": "For growing businesses with multiple locations",
        "features": [
          "Unlimited staff, locations and users",
          "Automatic email reminders",
          "No BookingForNow branding on your booking page",
          "Priority support"
        ]
      }
    },
    "freePrice": "Free",
    "monthlySuffix": "/mo",
    "yearlySuffix": "/yr",
    "yearlyEquivalent": "works out to {{monthly}}/month",
    "toasts": {
      "planUnavailable": "This plan is not available yet.",
      "checkoutError": "Could not start the payment.",
      "portalError": "Could not open the billing portal.",
      "portalNoCustomer": "You don't have an active subscription yet. Choose a plan to get started.",
      "cancelScheduled": "Your subscription will cancel at the end of the period.",
      "cancelError": "Couldn't cancel the subscription.",
      "reactivated": "Subscription reactivated.",
      "reactivateError": "Couldn't reactivate the subscription.",
      "planDowngraded": "Your plan was switched to Free.",
      "alreadySubscribed": "You already have an active subscription. Taking you to the billing portal to change your plan.",
      "checkoutCanceled": "You left the checkout without completing it. You have not been charged.",
      "checkoutStub": "Payments are not enabled on this server yet. Email soporte@bookingfornow.com and we'll activate it with you.",
      "checkoutConfirmed": "Subscription activated! Thanks for trusting BookingForNow.",
      "checkoutConfirmPending": "Payment received. Activation may take a few seconds: reload the page if you don't see your plan yet.",
      "samePlan": "That is already your current plan.",
      "providerUnavailable": "We could not check your subscription with the payment provider. Please try again in a few minutes.",
      "paymentIssue": "Your last payment is pending. Update your payment method in the billing portal before changing plan.",
      "planChanged": "Plan changed. The difference will show on your next invoice.",
      "changePlanError": "The plan could not be changed. You have not been charged."
    },
    "planErrors": {
      "planRequired": "This feature is not included in your current plan. Upgrade to enable it.",
      "planLimitReached": "You have reached your plan limit.",
      "subscriptionInactive": "Your subscription is not active. Update your payment method to continue.",
      "goToBilling": "Go to Settings → Billing to upgrade your plan.",
      "limitPatients": "You have reached your plan's limit of {{limit}} clients.",
      "limitPractitioners": "You have reached your plan's limit of {{limit}} staff members.",
      "limitLocations": "You have reached your plan's limit of {{limit}} locations.",
      "limitTeamMembers": "You have reached your plan's limit of {{limit}} users."
    },
    "downgrade": {
      "warnTitle": "You'll exceed your new plan's limits",
      "warnBody": "Downgrading will deactivate whatever exceeds the new plan's limit: {{resources}}. Nothing is deleted: everything will be reactivated automatically when you upgrade again.",
      "practitioners_one": "{{count}} practitioner",
      "practitioners_few": "{{count}} practitioners",
      "practitioners_many": "{{count}} practitioners",
      "practitioners_other": "{{count}} practitioners",
      "locations_one": "{{count}} location",
      "locations_few": "{{count}} locations",
      "locations_many": "{{count}} locations",
      "locations_other": "{{count}} locations",
      "confirm": "I understand, continue"
    },
    "deactivatedByPlan": "Deactivated by your plan",
    "upgradeCta": "Upgrade your plan",
    "planNames": {
      "free": "Free",
      "starter": "Starter",
      "pro": "Pro",
      "trial": "Free trial"
    },
    "status": {
      "active": "Active",
      "trialing": "In trial",
      "past_due": "Payment overdue",
      "unpaid": "Unpaid",
      "canceled": "Canceled",
      "incomplete": "Payment incomplete",
      "incomplete_expired": "Payment expired",
      "paused": "Paused",
      "unknown": "Status unavailable"
    },
    "trialEndsOn": "ends on {{date}}",
    "ownerOnly": "Only the account owner can subscribe, change or cancel the plan. Ask them to do it from their own login.",
    "billedInCurrency": "Plans are billed in {{currency}}, even though your business works in {{own}}. We do not convert the price: your bank will apply the exchange rate.",
    "changeModal": {
      "title": "Change plan",
      "message": "You are about to switch your subscription to the {{plan}} plan ({{price}}).",
      "proration": "The change applies immediately. The prorated part of the current period will be added to or deducted from your next invoice.",
      "deactivateWarn": "Moving to {{plan}} will deactivate {{resources}} because they exceed its limit. They are not deleted: they come back when you upgrade again.",
      "confirm": "Confirm change"
    }
  },
  "suspended": {
    "title": "Account suspended",
    "lead": "Access to <strong>{{brand}}</strong> is temporarily suspended.",
    "reason": "Your data is still stored and nothing has been deleted. Write to us and we will help you reactivate the account.",
    "contact": "Contact support",
    "logout": "Sign out",
    "support": "If you think this is an error, write to",
    "eyebrow": "Account",
    "visitorTitle": "This business is not available right now",
    "visitorLead": "We can't show you this page right now. If you are a customer, please contact the business directly; if this is your account, log in to reactivate it.",
    "mailSubject": "Reactivate the {{brand}} account"
  },
  "errors": {
    "generic": "Something went wrong",
    "network": "No connection with the server",
    "notFound": "Resource not found",
    "forbidden": "You don't have permission for this action",
    "validation": "Please review the highlighted fields",
    "loadAppointments": "Failed to load appointments",
    "loadPatients": "Error loading clients",
    "readonlyRole": "Your user is read-only and cannot make changes."
  },
  "locale": {
    "es": "Español",
    "en": "English",
    "fr": "Français",
    "pt": "Português",
    "it": "Italiano",
    "de": "Deutsch",
    "ru": "Русский",
    "zh": "中文",
    "ko": "한국어",
    "ja": "日本語"
  },
  "config": {
    "tabs": {
      "clinic": "Company information",
      "backup": "Backup"
    },
    "clinic": {
      "title": "Company information",
      "name": "Company name",
      "phone": "Phone",
      "email": "Email",
      "emailInvalid": "Invalid email",
      "address": "Address",
      "saving": "Saving...",
      "eyebrow": "Company",
      "emailPlaceholder": "contact@company.com",
      "addressPlaceholder": "123 Main Street, City",
      "contactHint": "These details are shown on your booking page and used as the reply-to address in emails to your customers.",
      "nameHint": "This is the name your customers see on the booking page and in emails.",
      "phoneInvalid": "Use only digits, spaces and the symbols + - ( )"
    },
    "backup": {
      "title": "Backup Management",
      "subtitle": "Manage database backups",
      "create": "Create Backup",
      "creating": "Creating...",
      "stats": {
        "total": "Total backups",
        "last": "Last backup",
        "size": "Storage Used",
        "next": "Next Automatic"
      },
      "autoConfig": "Automatic Configuration",
      "daily": "Daily Backup",
      "dailyTime": "Every day at 2:00 AM",
      "weekly": "Weekly Backup",
      "weeklyTime": "Sundays at 3:00 AM",
      "active": "Active",
      "byDate": "Backups by Date",
      "viewList": "List View",
      "viewDate": "Date View",
      "refresh": "Refresh",
      "loading": "Loading backups...",
      "empty": "No backups available",
      "emptyHint": "Create your first backup using the button above",
      "current": "Current",
      "download": "Download",
      "restore": "Restore",
      "delete": "Delete",
      "cols": {
        "date": "Date",
        "name": "Name",
        "size": "Size",
        "type": "Type",
        "actions": "Actions"
      },
      "confirmDelete": {
        "title": "Delete Backup",
        "message": "Are you sure you want to delete this backup?",
        "details": "This action cannot be undone.",
        "itemLabel": "Date"
      },
      "confirmRestore": {
        "title": "Restore Backup",
        "message": "Are you sure you want to restore this backup?",
        "details": "This action will replace all current data with the selected backup. Current data will be lost.",
        "itemLabel": "Backup date"
      },
      "eyebrow": "Data",
      "types": {
        "daily": "Daily",
        "weekly": "Weekly",
        "manual": "Manual",
        "unknown": "Unknown"
      }
    },
    "loading": "Loading configuration...",
    "toasts": {
      "loadError": "Error loading the configuration",
      "clinicUpdateError": "Could not save the contact details. Check the phone, email and address.",
      "backupsLoadError": "Error loading backups",
      "backupCreated": "Backup created successfully",
      "backupCreateError": "Error creating the backup",
      "backupsRefreshed": "Backup list refreshed",
      "backupRestored": "Backup restored successfully",
      "backupRestoreError": "Error restoring the backup",
      "backupDeleted": "Backup deleted successfully",
      "backupDeleteError": "Error deleting the backup",
      "downloadStarted": "Download started",
      "backupDownloadError": "Error downloading the backup",
      "invalidCountry": "Country must be a 2-letter ISO code (for example ES, MX or US).",
      "backupRestoreRolledBack": "The backup could not be restored. Your previous data was recovered automatically.",
      "backupRestorePartial": "The restore failed midway and your data could not be recovered automatically. Restore the most recent “pre-restore” backup to go back to the previous state.",
      "backupRestoreKeyMissing": "The backup cannot be restored: it is encrypted and the server does not have a valid encryption key configured. No data has been changed.",
      "backupRestoreDecryptFailed": "The backup cannot be restored: it could not be decrypted (it was encrypted with a different key or is damaged). No data has been changed.",
      "backupDownloadKeyMissing": "The backup cannot be downloaded: it is encrypted and the server does not have a valid encryption key configured.",
      "backupDownloadDecryptFailed": "The backup cannot be downloaded: it could not be decrypted (it was encrypted with a different key or is damaged)."
    },
    "readOnly": "Only the owner or an administrator can change these settings.",
    "unsaved": {
      "message": "You have unsaved changes",
      "discard": "Discard",
      "leaveConfirm": "You have unsaved changes in Settings. Leave and discard them?"
    }
  },
  "patients": {
    "deleteModal": {
      "itemLabel": "Client",
      "title": "Delete client and erase their data",
      "message": "Are you sure you want to delete this client?",
      "confirm": "Delete",
      "details": "Their personal data (name, contact details, address, ID document, date of birth, notes and tags) will be irreversibly anonymised, their attached files will be deleted and their future appointments will be cancelled (booked package sessions are returned). Past appointment history and packages are kept without personal data. This action cannot be undone."
    },
    "editInfo": "Edit client information",
    "addSessions": "Add package",
    "subtitle": "Manage your clients' information",
    "cols": {
      "patient": "Client",
      "actions": "Actions",
      "delete": "Delete",
      "edit": "Edit"
    },
    "smart": {
      "estado": "Status",
      "proxima": "Next",
      "visitas": "visits",
      "bono": "pack",
      "valor": "value",
      "sinBono": "no pack",
      "sinVisitas": "no visits",
      "sinProxima": "no upcoming appointment",
      "ultimaVisita": "last visit"
    },
    "perPage": "per page",
    "age": "{{years}} years",
    "show": "Show",
    "clearSearch": "Clear search",
    "total": "clients",
    "bonoForm": {
      "title": "New package",
      "minutes": "Minutes per appointment",
      "quantity": "Number of appointments",
      "totalPrice": "Total price",
      "perSession": "Price per appointment",
      "paid": "Paid",
      "add": "Create package",
      "cancel": "Cancel",
      "created": "Package created successfully"
    },
    "title": "Client Management",
    "form": {
      "edit": "Edit Client",
      "new": "New Client",
      "save": "Save",
      "lastName": "Last name",
      "email": "Email",
      "phone": "Phone",
      "cp": "ZIP Code",
      "whatsappHint": "Client preference. Nothing is sent automatically: from the calendar you can send them the WhatsApp reminder with one click.",
      "whatsappLabel": "Accepts WhatsApp reminders",
      "firstName": "First name",
      "province": "Province / Region",
      "familyContact": "Alternative contact",
      "update": "Update",
      "dni": "ID / Document",
      "city": "City",
      "address": "Address",
      "optional": "(optional)",
      "birthDate": "Date of Birth",
      "phone2": "Phone 2",
      "notes": "Notes",
      "firstNamePlaceholder": "Enter the first name",
      "lastNamePlaceholder": "Enter last name",
      "dniPlaceholder": "ID, passport or other document",
      "phonePlaceholder": "Include the country code if it is a foreign number",
      "phone2Placeholder": "Alternative phone",
      "emailPlaceholder": "email@example.com",
      "familyContactPlaceholder": "Name and phone of another contact person",
      "addressPlaceholder": "Full address",
      "cpPlaceholder": "Postal code",
      "cityPlaceholder": "City or town",
      "provincePlaceholder": "Province, state or region",
      "notesPlaceholder": "Additional notes about the client...",
      "contactHint": "(phone or email: at least one)",
      "errors": {
        "firstNameRequired": "First name is required",
        "contactRequired": "Enter at least a phone number or an email",
        "phoneInvalid": "Invalid phone number: use 4 to 15 digits; +, spaces, brackets and hyphens are allowed",
        "emailInvalid": "The email address is not valid"
      }
    },
    "deletePatient": "Delete client",
    "newBtn": "New Client",
    "viewDetails": "View client details",
    "showing": "Showing {{from}} - {{to}} of {{total}} clients",
    "addFirst": "Add First Client",
    "cancelBtn": "Cancel",
    "empty": {
      "noResults": "No clients found",
      "noPatients": "No clients registered",
      "hint": "Start by adding your first client to manage their appointments",
      "hintSearch": "Try different search terms"
    },
    "searchPlaceholder": "Search by name, surname or phone...",
    "import": {
      "button": "Import",
      "title": "Import clients from CSV",
      "step1": "1. File",
      "step2": "2. Columns",
      "step3": "3. Import",
      "chooseFile": "Select a .csv file",
      "fileHint": "CSV with a header row; comma or semicolon separator; quoted fields are supported.",
      "parseError": "Could not read the file. Make sure it is a valid CSV.",
      "detected": "{{rows}} rows and {{cols}} columns detected.",
      "mapTitle": "Map each column to a field",
      "ignore": "— Ignore —",
      "preview": "Preview (first 5 rows)",
      "needFirstName": "You must map a column to the First name field.",
      "fields": {
        "firstName": "First name",
        "lastName": "Last name",
        "phone": "Phone",
        "email": "Email",
        "dni": "ID / Document",
        "birthdate": "Date of birth",
        "notes": "Notes"
      },
      "importBtn_one": "Import {{count}} client",
      "importBtn_few": "Import {{count}} clients",
      "importBtn_many": "Import {{count}} clients",
      "importBtn_other": "Import {{count}} clients",
      "importing": "Importing…",
      "progress": "{{done}} of {{total}} rows sent",
      "summaryTitle": "Import completed",
      "inserted": "Inserted: {{count}}",
      "skipped": "Skipped: {{count}}",
      "rowCol": "Row",
      "reasonCol": "Reason",
      "error": "The import failed. Please try again.",
      "reasons": {
        "invalid_row": "Invalid row",
        "missing_firstName": "First name is missing",
        "invalid_email": "Invalid email",
        "invalid_birthdate": "Invalid date of birth",
        "duplicate": "Duplicate (a client with that email or phone already exists)"
      },
      "datesDropped": "{{count}} dates of birth could not be read: those clients were imported without a date."
    },
    "eyebrow": "Directory",
    "toasts": {
      "createFirst": "Create the client first, then assign the appointment",
      "created": "Client created successfully",
      "createError": "Error creating the client",
      "updated": "Client updated successfully",
      "updateError": "Error updating the client",
      "deleted": "Client deleted: data anonymised and future appointments cancelled",
      "deleteError": "Error deleting the client",
      "loadEditError": "Error loading the client for editing",
      "loadOneError": "Error loading client data",
      "bonoCreateError": "Error creating the package"
    },
    "status": {
      "nuevo": "New",
      "activo": "Active",
      "fiel": "Loyal",
      "riesgo": "At risk"
    },
    "export": {
      "button": "Export",
      "createdAt": "Created on",
      "filename": "clients",
      "done": "{{count}} clients exported",
      "error": "The client list could not be exported. Please try again."
    }
  },
  "patientDetail": {
    "loading": "Loading...",
    "loadingDetails": "Loading client details...",
    "age": "{{years}} years",
    "back": "Back",
    "edit": "Edit",
    "tags": {
      "placeholder": "New tag",
      "empty": "No tags",
      "removeLabel": "Remove tag"
    },
    "stats": {
      "nextVisit": "Next visit",
      "noShows": "No-shows",
      "totalAppointments": "Total appointments",
      "completed": "Completed",
      "lastVisit": "Last visit",
      "totalSpent": "Total spent",
      "cancelledSub_one": "{{count}} cancelled",
      "cancelledSub_few": "{{count}} cancelled",
      "cancelledSub_many": "{{count}} cancelled",
      "cancelledSub_other": "{{count}} cancelled"
    },
    "info": {
      "phone2": "PHONE 2",
      "familyContact": "ALTERNATIVE CONTACT",
      "phone": "PHONE",
      "city": "CITY",
      "address": "ADDRESS",
      "province": "PROVINCE / REGION",
      "age": "AGE",
      "email": "EMAIL",
      "birthDate": "DATE OF BIRTH",
      "fullName": "FULL NAME",
      "title": "Personal Information",
      "dni": "ID DOCUMENT",
      "cp": "POSTAL CODE",
      "notes": "NOTES"
    },
    "sessions": {
      "used": "Used appointments",
      "addTitle": "Add package",
      "active": "Available appointments",
      "title": "Available appointments",
      "empty": "No active packages",
      "total": "Total appointments"
    },
    "system": {
      "updated": "Last updated:",
      "created": "Registered:"
    },
    "tabs": {
      "history": "Appointment History",
      "files": "Files",
      "credits": "Appointments"
    },
    "history": {
      "loading": "Loading...",
      "colNotes": "Notes",
      "loadingText": "Loading appointment history...",
      "colDate": "Date",
      "empty": "No appointments recorded for this client.",
      "colTime": "Time",
      "colDuration": "Duration",
      "colService": "Service",
      "colPrice": "Amount"
    },
    "files": {
      "loadingFiles": "Loading files...",
      "allowedTypes": "Allowed files: JPG, PNG, GIF, WEBP, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV (max. 4 MB)",
      "empty": "No attached files",
      "previewClickTitle": "Click to enlarge",
      "descriptionPlaceholder": "Describe the file contents...",
      "uploading": "Uploading...",
      "emptyHint": "Upload the first file using the form above",
      "selectLabel": "Select file",
      "uploadTitle": "Upload new file",
      "downloadTitle": "Download file",
      "descriptionLabel": "Description (optional)",
      "upload": "Upload file",
      "deleteTitle": "Delete file",
      "categoryLabel": "Category",
      "listTitle": "Client files",
      "categories": {
        "document": "Document",
        "photo": "Photo / image",
        "consent": "Consent form",
        "invoice": "Invoice / quote",
        "report": "Report",
        "other": "Other"
      }
    },
    "packs": {
      "empty": "This client has no packages",
      "title": "Packages",
      "addFirst": "Add the first package",
      "addBtn": "Add package"
    },
    "notFound": {
      "title": "Client not found",
      "message": "The client you are looking for does not exist or has been deleted",
      "back": "Back to Clients"
    },
    "deleteFileModal": {
      "confirm": "Delete",
      "title": "Delete File",
      "itemLabel": "File",
      "details": "This action cannot be undone.",
      "message": "Are you sure you want to delete this file?"
    },
    "preview": {
      "closeTitle": "Close",
      "download": "Download file",
      "downloadTitle": "Download",
      "noPreview": "Preview not available for this file type",
      "loading": "Loading preview…",
      "loadError": "The preview could not be loaded. You can download the file instead."
    },
    "markPaidModal": {
      "title": "Mark as paid",
      "message": "Do you confirm that this package has been paid?",
      "confirm": "Mark paid"
    },
    "eyebrow": "Client profile",
    "toasts": {
      "maxTags": "Maximum 20 tags per client.",
      "tagsSaveError": "Tags could not be saved.",
      "filesLoadError": "Error loading files",
      "fileTooLarge": "File is too large (4 MB max)",
      "fileTypeNotAllowed": "File type not allowed",
      "fileUploaded": "File uploaded successfully",
      "fileUploadError": "Error uploading the file",
      "fileDownloadError": "Error downloading the file",
      "fileDeleted": "File deleted successfully",
      "fileDeleteError": "Error deleting the file"
    },
    "loadError": {
      "title": "The client record could not be loaded",
      "message": "The connection or the server failed. The client has not been deleted: please try again.",
      "retry": "Retry"
    },
    "quick": {
      "label": "Quick actions",
      "call": "Call",
      "whatsapp": "WhatsApp",
      "email": "Email",
      "newAppointmentLabel": "New appointment for {{name}}",
      "callLabel": "Call {{name}}",
      "whatsappLabel": "Message {{name}} on WhatsApp",
      "emailLabel": "Email {{name}}"
    }
  },
  "bonos": {
    "eyebrow": "Prepaid sessions",
    "title": "Packages",
    "subtitle": "Manage your clients' packages of prepaid appointments.",
    "info": "A package is several sessions of the same length for one client, for a total price. You use it when creating their appointment in the calendar: pick it under “Use package” and one session is deducted. If the appointment is cancelled or deleted, the session goes back to the package. Online bookings do not use up the package.",
    "new": "New package",
    "formTitle": "New package",
    "patient": "Client",
    "minutes": "Minutes per appointment",
    "quantity": "Number of appointments",
    "totalPrice": "Total price",
    "pricePerSession": "Price per appointment",
    "perSessionShort": "/appointment",
    "paid": "Paid",
    "save": "Create package",
    "saving": "Saving…",
    "cancel": "Cancel",
    "loading": "Loading…",
    "empty": "No packages yet. Create the first one.",
    "minSessions_one": "{{min}} min · {{count}} appointment",
    "minSessions_few": "{{min}} min · {{count}} appointments",
    "minSessions_many": "{{min}} min · {{count}} appointments",
    "minSessions_other": "{{min}} min · {{count}} appointments",
    "paidChip": "Paid",
    "pendingChip": "Pending",
    "togglePaidTitle": "Change payment status",
    "delete": "Delete",
    "created": "Package created successfully",
    "deleted": "Package deleted",
    "markedPaid": "Package marked as paid",
    "markedPending": "Package marked as payment pending",
    "inUse": "Cannot delete: this package already has used appointments.",
    "loadError": "Error loading packages",
    "createError": "Error creating the package",
    "updateError": "Error updating the package",
    "deleteError": "Error deleting the package",
    "deleteModal": {
      "title": "Delete package",
      "message": "Are you sure you want to delete this package?",
      "details": "This action cannot be undone."
    },
    "itemLabel": "Package",
    "changePatient": "Change",
    "filters": {
      "label": "Filter packages",
      "all": "All",
      "unpaid": "Payment pending",
      "active": "With sessions left",
      "spent": "Used up",
      "noMatches": "No package matches the filter or the search."
    },
    "unpaidTotal": "Still to collect:",
    "createdOn": "Created on {{date}}"
  },
  "patientPortal": {
    "loading": "Loading…",
    "title": "Your appointment",
    "when": "Date and time",
    "statusLabel": "Status",
    "confirmReschedule": "Confirm change",
    "cancel": "Cancel appointment",
    "notFound": "Appointment not found or invalid link",
    "cancelConfirm": "Are you sure you want to cancel your appointment?",
    "cancelled": "Your appointment has been cancelled.",
    "rescheduled": "Your appointment has been rescheduled.",
    "actionError": "The action could not be completed. Please try again.",
    "cancelTitle": "Cancel appointment",
    "policyWindow": "You can cancel or reschedule up to {{hours}}h before your appointment.",
    "policyAnytime": "You can cancel or reschedule online up to the time of your appointment.",
    "policyPast": "Online cancellation or rescheduling is no longer possible: your appointment is in less than {{hours}}h. Please contact the business.",
    "policyNone": "This business does not allow online cancellation or rescheduling. Please contact them directly.",
    "openMap": "View on map",
    "pendingNote": "{{business}} still has to confirm this appointment. We'll let you know as soon as it is accepted.",
    "reschedule": "Change date or time",
    "rescheduleTitle": "Pick the new day and time",
    "pickDate": "Day",
    "newTime": "New appointment: {{when}}",
    "keepCurrent": "Keep the current appointment",
    "bookAgain": "Book another appointment",
    "loadError": "The appointment couldn't be loaded. Please try again in a few minutes.",
    "errors": {
      "terminalStatus": "This appointment can no longer be changed.",
      "cancelDisabled": "This business doesn't allow online cancellations. Please contact them directly.",
      "rescheduleDisabled": "This business doesn't allow online rescheduling. Please contact them directly.",
      "cancelTooLate": "Appointments can only be cancelled at least {{hours}} h in advance.",
      "rescheduleTooLate": "Appointments can only be rescheduled at least {{hours}} h in advance."
    }
  },
  "signup": {
    "title": "Create your company",
    "subtitle": "Free 14-day trial, no card required.",
    "clinicName": "Company name",
    "email": "Email",
    "password": "Password",
    "submit": "Create account",
    "creating": "Creating…",
    "successTitle": "Account created!",
    "successMsg": "Your company is ready. You can now log in.",
    "goToLogin": "Go to sign in",
    "haveAccount": "Already have an account?",
    "login": "Sign in",
    "disabled": "Sign-up is not available right now.",
    "genericError": "Could not create the account. Please try again.",
    "captchaHint": "Complete the anti-bot verification to continue.",
    "sector": "What does your business do?",
    "sectorPlaceholder": "Choose an industry",
    "sectors": {
      "peluquerias": "Hair salon or barbershop",
      "estetica": "Beauty salon",
      "fisioterapeutas": "Physiotherapy",
      "gimnasios": "Gym or personal trainer",
      "talleres": "Auto repair shop",
      "consultores": "Consulting or coaching",
      "dentales": "Dental clinic",
      "psicologos": "Psychology",
      "veterinarios": "Veterinary clinic",
      "autoescuelas": "Driving school",
      "nutricionistas": "Nutrition and dietetics",
      "tatuadores": "Tattoo or piercing studio",
      "peluqueria-canina": "Pet grooming",
      "yoga-pilates": "Yoga or pilates",
      "masajes-spa": "Massage or spa",
      "podologos": "Podiatry",
      "otro": "Another type of business"
    },
    "repeatPassword": "Repeat password",
    "passwordsMismatch": "The passwords do not match",
    "captchaRequired": "Complete the verification to continue",
    "showPassword": "Show password",
    "hidePassword": "Hide password",
    "acceptTerms": "I have read and accept the {{terms}} (including the data processing agreement for my clients' data) and the {{privacy}}.",
    "termsLink": "Terms and conditions",
    "privacyLink": "Privacy policy",
    "gdprNotice": "Data controller: {{controller}}. Purpose: to create and manage your account, provide the service, learn which channel brought you to us and, unless you object, send you tips and offers about BookingForNow. Legal basis: performance of the contract and legitimate interest. Recipients: the providers that host the service, acting as data processors; we do not share your data with third parties. Rights: access, rectification, erasure and the other GDPR rights, by writing to {{email}}. More information in the {{privacy}}.",
    "regionNote": "Your account will be created with: {{region}}. You can change it in Settings.",
    "errors": {
      "rateLimited": "Too many attempts in a row. Wait a few minutes and try again.",
      "captchaFailed": "We could not verify that you are a person. Repeat the verification and try again.",
      "termsRequired": "You must accept the Terms and the Privacy policy to create the account.",
      "missingFields": "Fill in the business name, email and password.",
      "emailRegistered": "An account with this email already exists."
    },
    "ownerName": "Your name",
    "ownerNameHint": "We will use it to greet you and as the first staff member in your calendar.",
    "marketingNotice": "During your trial and when it ends, we'll send you a few emails with tips and offers from BookingForNow. If you don't want them, tick this box; you can also unsubscribe free of charge, with one click, from any of them.",
    "marketingOptOut": "I don't want to receive tips or offers from BookingForNow by email",
    "bookingPageReady": "Your booking page is live and taking bookings from today. Before you share it, check your hours and the sample services:",
    "metaTitle": "Create your free account — BookingForNow",
    "metaDescription": "Create your free BookingForNow account: calendar, 24/7 online booking, session packs and automatic reminders. 14-day trial, no card."
  },
  "login": {
    "metaDescription": "Log in to your BookingForNow account to manage your calendar, online bookings, clients and session packs.",
    "fillAllFields": "Please fill in all fields",
    "loginError": "Login error. Please try again.",
    "enterEmail": "Please enter your email",
    "resetError": "Error requesting password reset"
  },
  "landing": {
    "nav": {
      "login": "Log in",
      "signup": "Sign up",
      "goToApp": "Go to my calendar"
    },
    "hero": {
      "subtitle": "Scheduling, online booking, session packs and reminders in a single platform. Spend your time on your clients, not on paperwork.",
      "ctaPrimary": "Start 14-day free trial",
      "note": "No credit card required · Cancel anytime",
      "demo": "View demo",
      "titlePre": "You do your work.",
      "titleAccentLead": "We handle the",
      "titleAccent": "management",
      "stats": {
        "supportValue": "24/7",
        "supportLabel": "online booking",
        "languagesValue": "10",
        "languagesLabel": "languages",
        "priceValue": "€0",
        "priceLabel": "to get started",
        "commissionValue": "0%",
        "commissionLabel": "booking commissions"
      },
      "badge": "No commissions · 14-day free trial · No card",
      "heading": "Online booking and appointment scheduling software for service businesses"
    },
    "features": {
      "title": "Online booking system and calendar: what's included",
      "agenda": {
        "title": "Multi-practitioner calendar",
        "text": "Organize your whole team's appointments with a clear calendar and no overlaps."
      },
      "booking": {
        "title": "Online booking 24/7",
        "text": "Your clients book on their own from your public page, anytime and from any device."
      },
      "packs": {
        "title": "Session packs per client",
        "text": "Sell each client their own session pack: pick it when you book their appointment in the calendar and one session is deducted; if the appointment is cancelled, it goes back. Their record shows how many they have left."
      },
      "reminders": {
        "title": "Automatic reminders",
        "text": "Cut no-shows with automatic email reminders. Included in the Starter and Pro plans."
      },
      "eyebrow": "Features",
      "subtitle": "From manual admin to autopilot. All in one platform."
    },
    "howItWorks": {
      "title": "Your online booking page, up and running in under 5 minutes",
      "eyebrow": "How it works",
      "step1": {
        "title": "Create your account",
        "text": "Sign up for free, no credit card. Your workspace is ready in a couple of minutes."
      },
      "step2": {
        "title": "Set up your services",
        "text": "Add services, prices, opening hours and staff. The assistant guides you step by step."
      },
      "step3": {
        "title": "Share and get started",
        "text": "Share your link on Instagram, WhatsApp or your website. Your clients book by themselves, 24/7."
      }
    },
    "pricing": {
      "title": "Booking software pricing",
      "subtitle": "Start free and change plans as your business grows.",
      "free": "Free",
      "yearlyNote": "With the yearly plan you pay for only 10 months: 2 months free.",
      "cta": "Get started",
      "eyebrow": "Pricing",
      "annualNote": "Billed yearly: {{total}} per year · 2 months free",
      "currencyNote": "Prices in euros (EUR).",
      "detailsLink": "See pricing and limits in detail"
    },
    "finalCta": {
      "title": "Ready to get started?",
      "text": "Create your account in under 2 minutes and set up your business today.",
      "eyebrow": "What are you waiting for?"
    },
    "footer": {
      "tagline": "BookingForNow — all-in-one appointment management for your business.",
      "sectorsLabel": "Solutions by sector",
      "sectors": {
        "hairdressers": "Appointment software for hair salons",
        "beauty": "Booking software for beauty salons",
        "physio": "Appointment software for physiotherapists",
        "gyms": "Booking software for gyms",
        "workshops": "Appointment software for auto repair shops",
        "consultants": "Appointment software for consultants",
        "allSectors": "All sectors"
      },
      "blog": "Blog: appointment and booking management",
      "tools": "Free tools",
      "pagesInEnglish": "(pages in English)",
      "freeScheduling": "Free appointment scheduling software",
      "navLabel": "Footer navigation",
      "support": "Support",
      "legalLabel": "Legal information",
      "legal": {
        "notice": "Legal notice",
        "privacy": "Privacy",
        "terms": "Terms",
        "cookies": "Cookies",
        "contact": "Contact"
      },
      "comparisons": {
        "booksy": "Booksy alternative",
        "treatwell": "Treatwell alternative",
        "fresha": "Fresha alternative"
      },
      "calculator": "Booking fee calculator",
      "referral": "Referral program",
      "inSpanish": "(in Spanish)"
    },
    "preview": {
      "title": "Daily board",
      "kpiAppointments": "Appointments",
      "kpiOccupancy": "Occupancy",
      "kpiRevenue": "Revenue",
      "chipPack": "pack",
      "notifTitle": "New online booking",
      "row1Name": "Lucía M.",
      "row1Service": "Haircut",
      "row2Name": "Carlos R.",
      "row2Service": "Sports massage",
      "row3Name": "Ana G.",
      "row3Service": "Manicure",
      "live": "Live",
      "chipConfirmed": "Confirmed",
      "chipPending": "Pending",
      "chipNew": "New",
      "row4Name": "Michael S.",
      "row4Service": "Personal training",
      "notifSub": "Martha L. · Today 4:00 PM",
      "badge": "Flat price · No commissions",
      "sampleData": "Sample data"
    },
    "social": {
      "sectors": {
        "hair": "Hair salons",
        "yoga": "Yoga and pilates studios",
        "gyms": "Gyms",
        "dental": "Dental clinics",
        "spa": "Spas and massage",
        "physio": "Physiotherapists",
        "garages": "Auto repair shops",
        "vets": "Veterinary clinics"
      },
      "label": "Built for appointment-based businesses"
    },
    "why": {
      "eyebrow": "Why BookingForNow",
      "title": "Appointment booking software with no small print",
      "flat": {
        "title": "Flat price, 0% commissions",
        "text": "You pay your plan and that's it. We never take a cut of your bookings or your new clients, unlike some marketplaces."
      },
      "link": {
        "title": "Your own booking link",
        "text": "A link that is yours, not a marketplace's: put it on Instagram, Google Maps or WhatsApp and your clients book by themselves, with nothing to install."
      },
      "languages": {
        "title": "10 languages and any time zone",
        "text": "Your calendar and booking page speak your clients' language: Spanish, English, French, Portuguese, Italian, German, Russian, Chinese, Korean and Japanese."
      },
      "privacy": {
        "title": "Your data is yours",
        "text": "We comply with the GDPR, we never sell or share your data, and we show no ads to your clients."
      }
    },
    "faq": {
      "eyebrow": "Before you start",
      "title": "Frequently asked questions about our appointment software",
      "items": {
        "price": {
          "q": "How much does BookingForNow cost?",
          "a": "There are three plans at a fixed fee, with {{commission}}% commission on bookings: Free at {{free}} ({{practitioners}} professional, up to {{clients}} clients, no automatic reminders), Starter at {{starter}}/month and Pro at {{pro}}/month. The yearly fee costs the same as {{paidMonths}} months, so you save {{freeMonths}}. Amounts are in euros and applicable taxes are added. Every new account starts with a {{trialDays}}-day trial, no card needed."
        },
        "free": {
          "q": "What does the free plan include, and what are its limits?",
          "a": "The Free plan costs {{free}}, has no time limit and asks for no card. It includes the calendar, session packs and your online booking page for {{practitioners}} professional, up to {{clients}} clients and {{locations}} location. Automatic reminders are not included: they come with Starter. What your clients see (booking page, appointment portal and emails) carries a discreet mention of BookingForNow; Starter and Pro remove it."
        },
        "commission": {
          "q": "Do you charge a commission per booking?",
          "a": "No, not on any plan: {{commission}}% on Free as well. You pay the fixed fee of your plan ({{free}} on Free) and that is it, with no cap on bookings. BookingForNow does not collect booking payments on your behalf: your clients pay you at your premises, as they do today, so there is no percentage and no payment processor in between."
        },
        "reminders": {
          "q": "Which plan includes automatic reminders?",
          "a": "Starter and up. Automatic appointment reminders go out by email, to clients who leave their email, on the Starter and Pro plans and during the trial; the Free plan does not include them. There are no SMS reminders and no automatic WhatsApp messages."
        },
        "app": {
          "q": "Do I need to install an app?",
          "a": "No. BookingForNow works as a web app on any phone or computer, with no installs and no updates to keep up with: you manage your calendar from the browser and your clients book from your business link, with nothing to download."
        },
        "trialEnd": {
          "q": "What happens when the {{trialDays}}-day trial ends?",
          "a": "If you have not picked a plan, your account moves to the Free plan on its own and nothing is charged: the trial never asked for a card. Nothing is deleted. If you were using more staff or locations than Free allows, the oldest ones stay active and the rest are paused until you choose a plan that covers them. Automatic email reminders, which belong to Starter and Pro, stop going out."
        }
      }
    }
  },
  "onboarding": {
    "title": "Getting started",
    "progress": "{{done}} of {{total}} completed",
    "toggle": "Show or hide the checklist",
    "dismiss": "Dismiss",
    "copyLink": "Copy link",
    "copied": "Link copied to clipboard",
    "steps": {
      "services": "Set up your services and prices",
      "booking": "Enable online booking",
      "bookingOn": "Your page is taking bookings",
      "share": "Share your booking page",
      "firstAppointment": "Create your first appointment"
    },
    "stepDone": "Completed:",
    "copyFailed": "Could not copy the link. Copy it manually: {{url}}"
  },
  "settings": {
    "booking": {
      "logoUrl": "Booking page logo (URL)",
      "useCustomColor": "Use custom color",
      "primaryColor": "Primary color",
      "brandingHint": "The logo and color are applied to your public booking page."
    },
    "logo": {
      "title": "Company logo",
      "upload": "Upload image",
      "change": "Change image",
      "uploading": "Uploading…",
      "format": "Formats: PNG, JPG or WEBP. Max 2MB.",
      "uploaded": "Logo updated",
      "error": "Could not upload the logo",
      "errorFormat": "Format not allowed. Use PNG, JPG or WEBP.",
      "errorSize": "The image exceeds the maximum size (2MB)."
    }
  },
  "adminPlatform": {
    "eyebrow": "Operator",
    "title": "Platform",
    "forbidden": "Access reserved to platform administrators.",
    "kpi": {
      "clinics": "Companies",
      "trials": "Active trials",
      "mrr": "Estimated MRR",
      "mrrHint": "paid subscriptions only",
      "mrrTitle": "Only active paid subscriptions count. A plan assigned by hand from this panel is not a subscription and does not count.",
      "signupsPeriod": "Signups in period",
      "webVisitors": "Visitors · public website",
      "webVisitorDaysHint": "visitor-days · last {{days}} days",
      "webVisitorsHint": "sum by page type and day · last {{days}} days",
      "onlineBookings": "Online bookings",
      "appointments": "Appointments created",
      "errors5xx": "5xx errors",
      "periodHint": "last {{days}} days"
    },
    "cols": {
      "clinic": "Company",
      "plan": "Plan",
      "status": "Status",
      "signup": "Signup",
      "origin": "Source"
    },
    "state": {
      "active": "Active",
      "suspended": "Suspended"
    },
    "action": {
      "extend": "+14 days",
      "extendTitle": "Extend the trial by 14 days",
      "suspend": "Suspend",
      "activate": "Activate",
      "changePlan": "Change plan"
    },
    "toasts": {
      "trialExtended": "Trial extended by 14 days",
      "suspended": "Company suspended",
      "activated": "Company activated",
      "planChanged": "Plan changed to {{plan}}"
    },
    "subtitle": "Application and web traffic monitoring",
    "refresh": "Refresh",
    "range": {
      "label": "Period",
      "d7": "7 days",
      "d30": "30 days",
      "d90": "90 days"
    },
    "tabs": {
      "overview": "Overview",
      "traffic": "Web traffic",
      "activity": "Activity",
      "health": "Health",
      "tenants": "Companies"
    },
    "funnel": {
      "title": "Acquisition funnel",
      "subtitle": "From visitor to first booking, over the last {{days}} days",
      "ofPrevious": "{{pct}} of previous step",
      "activatedHint": "Businesses created in the period with at least one appointment",
      "visitorsHint": "Each visitor counts once a day, however many public website pages they view. It is the same figure as the KPI and the “Public website” area.",
      "landingVisitorsHint": "Sum of the visitor-days of the home page and of the landing pages: someone who views both on the same day counts twice.",
      "cohortBookingsHint": "Online bookings of the businesses activated in the period. The total for all businesses is in the “Online bookings” KPI.",
      "stages": {
        "visitors": "Public website visitor-days",
        "landingVisitors": "Visitor-days on home and landing pages",
        "signupVisitors": "/signup visitors",
        "signups": "Signups",
        "activated": "Activated businesses (≥1 appointment)",
        "onlineBookings": "Online bookings",
        "cohortBookings": "Their online bookings"
      },
      "perActivated": "{{n}} per activated business"
    },
    "audience": {
      "title": "Visitors by area",
      "subtitle": "Last {{days}} days, by page type",
      "views_one": "{{n}} page view",
      "views_few": "{{n}} page views",
      "views_many": "{{n}} page views",
      "views_other": "{{n}} page views",
      "visitors_one": "{{n}} visitor",
      "visitors_few": "{{n}} visitors",
      "visitors_many": "{{n}} visitors",
      "visitors_other": "{{n}} visitors",
      "zones": {
        "web": {
          "label": "Public website",
          "hint": "The home page, industry, comparison and tool pages, the blog, signup and the legal pages. This is the one that measures search visibility."
        },
        "booking": {
          "label": "Businesses' booking pages",
          "hint": "Customers of the businesses on their booking page and on their appointment link. Not website traffic."
        },
        "app": {
          "label": "App",
          "hint": "Business teams on the login page and the private screens."
        }
      },
      "note": "These are visitor-days added up by page type, not distinct people: someone who views two page types (the home page and an industry page) counts twice, someone who goes from the website to a booking page counts in both areas, and someone who comes back another day counts again, because the anonymous fingerprint changes every day at 00:00 UTC. Page views are exact.",
      "noteWeb": "These are visitor-days, not distinct people: the anonymous fingerprint changes every day at 00:00 UTC, so someone who comes back another day counts again. On the public website each visitor counts once a day, however many pages they view; the other two areas add up their page types (someone who goes through the login page and then uses the app counts twice), and someone who goes from the website to a booking page counts in both areas. Page views are exact.",
      "webBreakdown": "Public website visitor-days: {{total}}. Of these, {{engaged}} with an external source (another site or a campaign) or more than one page viewed, and {{single}} with a single page and a direct entry, which is typical of a crawler posing as a regular browser. Among the former, with app use on the same day (team or new signup): {{withApp}}.",
      "webBreakdownSignal": "Public website visitor-days: {{total}}. Of these, {{engaged}} with an external source (another site or a campaign) or more than one page viewed, and {{single}} with a single page and a direct entry (no known source: a typed address, a bookmark or a link that sends no referrer). Among the former, with app use on the same day (team or new signup): {{withApp}}.",
      "other": "Unclassified: {{visitors}} and {{views}} on routes the server does not assign to any area: addresses that do not exist (404) and /cuenta-suspendida."
    },
    "charts": {
      "visitorsPerDay": "Visitors per day",
      "allZones": "All areas together: public website, booking pages and app.",
      "signupsPerDay": "Signups per day",
      "trafficPerDay": "Visitors and page views per day",
      "appointmentsPerDay": "Appointments and online bookings per day",
      "newPatientsPerDay": "New clients per day",
      "emailsPerDay": "Emails per day",
      "apiRequestsPerDay": "API requests per day",
      "api5xxPerDay": "5xx errors per day",
      "apiP95PerDay": "p95 latency per day (ms, including crons and this panel)"
    },
    "series": {
      "visitors": "Visitors",
      "views": "Page views",
      "signups": "Signups",
      "appointments": "Appointments",
      "onlineBookings": "Online bookings",
      "newPatients": "New clients",
      "emailsSent": "Sent",
      "emailsFailed": "Failed",
      "requests": "Requests",
      "errors5xx": "5xx errors",
      "p95": "p95 latency"
    },
    "chart": {
      "showTable": "Show table",
      "hideTable": "Hide table",
      "noData": "No data in the period",
      "allZero": "All zeros in the period",
      "day": "Day",
      "total": "Total"
    },
    "traffic": {
      "note": "First-party, cookie-less analytics. Only visits with a sign of a real person count (a tap, a key press, mouse movement or 15 seconds with the page in view), and bots are excluded ({{bots}} bot views in the period).",
      "visitorDays": "Visitors are visitor-days: the anonymous fingerprint changes every day at 00:00 UTC (02:00 in Spain in summer, 01:00 in winter), so someone who comes back another day, switches network or uses another browser counts again.",
      "scope": "The daily chart and the referrer, country, language, device and UTM lists add up all areas (public website, businesses' booking pages and app); the split is on the Overview tab.",
      "beforeHumanSignal": "This period includes days before {{date}}, when crawlers posing as regular browsers still counted as visitors: the figures for those days are inflated and cannot be compared with later ones.",
      "dataSince": "Data starts on {{date}}. The selected period begins earlier: its first days are empty because nothing was being measured yet, not because nobody visited.",
      "topPages": "Top pages",
      "topPagesByZone": {
        "web": "Public website pages",
        "booking": "Booking page routes",
        "app": "App screens",
        "other": "Unclassified routes"
      },
      "referrers": "Referrers",
      "countries": "Countries",
      "langs": "Languages",
      "devices": "Devices",
      "utmSources": "UTM · source",
      "utmCampaigns": "UTM · campaign",
      "pageTypes": "Page types",
      "bookingPages": "Most visited booking pages",
      "direct": "(direct)",
      "visitors": "visitors",
      "views": "views",
      "showAll": "Show all {{n}}",
      "showLess": "Show less",
      "empty": "Nothing to show in the period",
      "openBooking": "Open the booking page"
    },
    "tracking": {
      "excluded": "This browser does not count in the statistics.",
      "counted": "This browser counts in the statistics. To exclude it, sign in on it as the platform operator (it gets marked with the local key {{key}}) or turn on Do Not Track or Global Privacy Control.",
      "reasons": {
        "operator": "You are signed in as the platform operator.",
        "optout": "It has the local key {{key}}, saved automatically when you sign in as operator, so it does not count when signed out either.",
        "dnt": "Do Not Track is turned on.",
        "gpc": "It sends the Global Privacy Control signal."
      },
      "sessionOnly": "The local key {{key}} could not be saved: once signed out, this browser will count again.",
      "otherDevices": "Your other devices count until you sign in on them once as operator."
    },
    "pageTypes": {
      "landing": "Landing",
      "seo": "SEO landings",
      "blog": "Blog",
      "legal": "Legal & contact",
      "signup": "Signup",
      "login": "Login",
      "book": "Public booking",
      "portal": "Client portal",
      "app": "App",
      "other": "Other"
    },
    "devices": {
      "desktop": "Desktop",
      "mobile": "Mobile",
      "tablet": "Tablet"
    },
    "activity": {
      "businessTitle": "Business activity",
      "businessNote": "Internal businesses (test and demo) are not counted.",
      "apiTitle": "API",
      "topErrors": "Most frequent API errors",
      "noErrors": "No API errors in the period",
      "emailsNote": "Failed emails are highlighted; sent ones give context.",
      "cols": {
        "method": "Method",
        "route": "Route",
        "status": "Status",
        "hits": "Hits",
        "lastAt": "Last seen"
      }
    },
    "health": {
      "checkedAt": "Checked {{time}}",
      "version": "Commit",
      "env": "Environment",
      "region": "Region",
      "configTitle": "Configuration",
      "configNote": "This only checks that each variable has a value in Vercel; nothing is validated against Stripe, Resend, Cloudflare or Sentry.",
      "configSummary": "{{ok}} of {{total}} required",
      "dbTitle": "Database",
      "dbLatency": "Latency",
      "dbOk": "Connected",
      "dbSlow": "Connected, slow",
      "dbDown": "Unreachable",
      "cronsTitle": "Scheduled jobs",
      "cronState": {
        "ok": "OK",
        "stale": "Stale",
        "failed": "Failed",
        "never": "Never run"
      },
      "cronLast": "Last run",
      "cronSummary": "View summary (JSON)",
      "cronNoRuns": "No runs recorded",
      "cronRecent": "Recent runs",
      "cronHint": "Check CRON_SECRET in Vercel and the Vercel Cron log; for “reminders”, also check the reminders-hourly workflow in GitHub Actions",
      "cronFailedHint": "Check the last run error and the function log in Vercel",
      "cronsError": "Could not read the cron log: {{error}}",
      "errorsTitle": "Latest errors",
      "noErrors": "No errors recorded",
      "api24Title": "API · last 24 h",
      "api24Note": "p95 latency is the server response time, leaving out the crons and this panel's own requests; the other figures do include them.",
      "emails24Title": "Emails · last 24 h",
      "requests": "Requests",
      "errors5xx": "5xx errors",
      "errors4xx": "4xx errors",
      "p95": "p95 latency",
      "sent": "Sent",
      "failed": "Failed",
      "noData": "No data",
      "migrationTitle": "Migration 31 has not been applied",
      "migrationBody": "Platform analytics needs the tables and functions from {{file}}. Apply it in Supabase and reload.",
      "ok": "OK",
      "configured": "Configured",
      "missing": "Missing",
      "recommended": "Recommended",
      "optional": "Optional",
      "on": "Enabled",
      "off": "Disabled",
      "cols": {
        "time": "When",
        "logger": "Logger",
        "tenant": "Company",
        "message": "Message"
      },
      "items": {
        "supabase": {
          "label": "Supabase (URL + service key)",
          "hint": "Set SUPABASE_URL and SUPABASE_SERVICE_KEY in Vercel"
        },
        "rlsJwtSecret": {
          "label": "Supabase JWT secret (RLS)",
          "hint": "Copy the Supabase project JWT secret into SUPABASE_JWT_SECRET in Vercel"
        },
        "cronSecret": {
          "label": "Cron secret",
          "hint": "Add CRON_SECRET in Vercel; without it the crons answer 401"
        },
        "stripeSecretKey": {
          "label": "Stripe secret key",
          "hint": "Add STRIPE_SECRET_KEY in Vercel"
        },
        "stripeWebhookSecret": {
          "label": "Stripe webhook",
          "hint": "Create the webhook in Stripe and add STRIPE_WEBHOOK_SECRET in Vercel"
        },
        "stripePrices": {
          "label": "Stripe prices ({{n}}/{{total}})",
          "hint": "Missing price IDs: STRIPE_PRICE_STARTER_MONTHLY/YEARLY and STRIPE_PRICE_PRO_MONTHLY/YEARLY"
        },
        "resend": {
          "label": "Resend (email delivery)",
          "hint": "Add RESEND_API_KEY in Vercel"
        },
        "emailFrom": {
          "label": "Email sender",
          "hint": "Set EMAIL_FROM using a domain verified in Resend"
        },
        "turnstile": {
          "label": "Turnstile (anti-bot)",
          "hint": "Add TURNSTILE_SECRET_KEY; without it public signup is unprotected"
        },
        "superadmins": {
          "label": "Platform administrators ({{n}})",
          "hint": "Set SUPERADMIN_EMAILS (comma-separated emails)"
        },
        "publicAppBaseUrl": {
          "label": "Public app URL",
          "hint": "Set PUBLIC_APP_BASE_URL (e.g. https://www.bookingfornow.com)"
        },
        "sentry": {
          "label": "Sentry (backend errors)",
          "hint": "Errors are already stored below, under “Latest errors”. With SENTRY_DSN they are also sent to Sentry."
        },
        "twilio": {
          "label": "Twilio (SMS)",
          "hint": "Depends on TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN and TWILIO_FROM_NUMBER. With all three, businesses on the Pro plan send reminders and confirmations by SMS; if any is missing, none are sent. No plan advertises this today."
        },
        "tenantSubdomains": {
          "label": "Own subdomain per business",
          "hint": "With CLOUDFLARE_API_TOKEN, CLOUDFLARE_ZONE_ID, VERCEL_TOKEN and VERCEL_PROJECT_ID, each sign-up creates its own <business>.bookingfornow.com while the Vercel project has fewer than VERCEL_MAX_DOMAINS domains (45 by default; raise it when moving to Vercel Pro)"
        },
        "signupEnabled": {
          "label": "Public signup",
          "hint": "SIGNUP_ENABLED=true allows new signups"
        },
        "demoEnabled": {
          "label": "Demo mode",
          "hint": "Only opens the app's demo account (and resets it every day). The public demo on the website (/en/demo) always works and does not depend on this."
        },
        "cronSecretExternal": {
          "label": "Hourly trigger credential (GitHub Actions)",
          "hint": "Add CRON_SECRET_EXTERNAL in Vercel and the same value as a repository secret in GitHub; without it, reminders only go out once a day with the Vercel cron"
        }
      },
      "schema": {
        "title": "Database schema",
        "unknown": "Not checked",
        "migrationsLabel": "SQL migrations",
        "migrationsCount": "{{applied}} of {{total}} recorded in schema_migrations",
        "pendingState": "Pending: {{n}}",
        "pendingHint": "Apply these migrations before deploying code that depends on them:",
        "baselineHint": "No migrations are recorded. If the database was already up to date, do not apply them: check the status with --list and record them with --baseline --until=N.",
        "reasons": {
          "SQL_DIR_UNAVAILABLE": "The deployment does not include backend/sql, so it cannot be compared with the database.",
          "MIGRATIONS_TABLE_MISSING": "The schema_migrations table does not exist: the database was migrated by hand. Record what is already applied with --baseline --until=N.",
          "MIGRATIONS_TABLE_UNREADABLE": "The schema_migrations table could not be read."
        },
        "overlapLabel": "Appointment overlap protection (migration 32)",
        "overlapOff": "Inactive",
        "overlapOffHint": "The appointments_no_practitioner_overlap constraint does not exist: if two people book the same slot with the same practitioner at the same time, both bookings can go through. Look for the “32/1 SALTADO” notices from migration 32, fix the cause and run its block 1 again.",
        "overlapPendingHint": "Migration 32 has not been applied yet: the protection is created when you apply it (see the list of pending migrations).",
        "overlapReasons": {
          "RPC_MISSING": "Cannot check: the platform_schema_flags function from migration 31 is missing.",
          "RPC_ERROR": "The overlap constraint could not be checked.",
          "RPC_UNEXPECTED": "The overlap constraint check returned an unexpected response."
        },
        "notApplied": "Not applied",
        "flagPendingHint": "Comes with migration {{n}}, which is still pending (see the list of pending migrations).",
        "flagsLabel": "Other schema checks",
        "flagsReasons": {
          "RPC_OUTDATED": "The platform_schema_flags function is still the one from migration 31. Apply migration 33 to check the rest of the schema (if it is already recorded as applied, look for the “33/6 SALTADO” notice).",
          "RPC_MISSING": "Cannot check: the platform_schema_flags function (migrations 31 and 33) is missing.",
          "RPC_ERROR": "The schema status could not be queried.",
          "RPC_UNEXPECTED": "The schema check returned an unexpected response."
        },
        "flags": {
          "unassignedOverlap": {
            "label": "Overlap protection for appointments without a practitioner (migration 33)",
            "hint": "The appointments_no_unassigned_overlap constraint does not exist: two appointments with no practitioner assigned can take the same slot at the same time. Look for the “33/2 SALTADO” notice from migration 33, resolve the overlaps it reports and run it again."
          },
          "durationCheck": {
            "label": "Consistent appointment duration (migration 33)",
            "hint": "The appointments_duration_consistent constraint does not exist or is not validated: some appointments may have an end time that does not match their duration. Look for the “33/3” notices from migration 33, fix those appointments and run it again."
          },
          "localeColumn": {
            "label": "Client language on appointments (migration 33)",
            "hint": "The appointments.locale column is missing; it stores the client's language so that messages reach them in it. Look for the “33/1 SALTADO” notice from migration 33, fix the cause and run it again."
          },
          "rateLimit": {
            "label": "Shared request limit (migration 33)",
            "hint": "The rate_limit_hits table or the rate_limit_hit function is missing: sign-up and backups are only limited in each instance's memory, which is easy to get around. Look for the “33/4 SALTADO” notice from migration 33 and run it again."
          },
          "logsPrune": {
            "label": "Automatic log retention (migration 33)",
            "hint": "The logs_prune function is missing: the daily cron does not apply retention (emails older than a year keep their recipient and subject, and records older than 3 years are not deleted). Look for the “33/5 SALTADO” notice from migration 33 and run it again."
          },
          "patientsSoftDelete": {
            "label": "Client deletion with anonymisation (migration 21)",
            "hint": "The deletedAt or anonymizedAt columns of patients are missing: deleting clients with anonymisation and the queries that leave out deleted clients fail. Apply (or re-run) migration 21."
          },
          "planDeactivation": {
            "label": "Plan-based resource deactivation (migration 30)",
            "hint": "The deactivatedByPlan column is missing in practitioners or locations: when downgrading, the extra practitioners and locations cannot be deactivated, nor reactivated after upgrading again. Apply (or re-run) migration 30."
          },
          "legacyWhatsapp": {
            "label": "Cleanup of old WhatsApp columns (migration 34)",
            "hint": "The appointments table still has the whatsappReminderSent and whatsappReminderSentAt columns, which are no longer used. Migration 34 drops them and is destructive: apply it with --allow-destructive after taking a backup."
          }
        }
      },
      "top4xx": {
        "title": "Most frequent 4xx",
        "hint": "Any /api/* route that does not exist answers 401 when the request has no session, so a 401 on an unknown route is a crawler, a scanner or a manual test. Only check routes of your own that keep repeating."
      }
    },
    "tenants": {
      "search": "Search by name or slug…",
      "count_one": "{{count}} company",
      "count_few": "{{count}} companies",
      "count_many": "{{count}} companies",
      "count_other": "{{count}} companies",
      "basicMode": "Activity data unavailable; showing the basic list.",
      "never": "Never",
      "trialUntil": "Trial until {{date}}",
      "originDirect": "Direct",
      "noResults": "No company matches the filter",
      "openBooking": "Open its booking page",
      "referral": {
        "referredBy": "Referred by {{slug}}",
        "statusPending": "not activated",
        "statusActivated": "activated",
        "summary": "Referred {{referred}} · {{activated}} active · {{rewards}} rewards",
        "failed": "Failed rewards: {{n}} (review)"
      },
      "sort": {
        "label": "Sort by",
        "lastActivity": "Last activity",
        "created": "Signup date",
        "name": "Name",
        "appointments": "Appointments in period"
      },
      "cols": {
        "patients": "Clients",
        "appointments": "Appts ({{days}} d)",
        "online": "Online ({{days}} d)",
        "lastActivity": "Last activity",
        "bookingViews": "Booking views",
        "actions": "Actions"
      }
    },
    "confirmPlan": {
      "title": "Change plan",
      "message": "Change {{name}}'s plan from \"{{from}}\" to \"{{to}}\"? The backend will reconcile resources to the new plan limits.",
      "confirm": "Change plan"
    },
    "confirmSuspend": {
      "title": "Suspend business",
      "message": "Suspend {{name}}? Their team loses access immediately and their booking page stops accepting appointments. You can reactivate it at any time."
    },
    "unavailable": {
      "title": "Analytics unavailable",
      "migration": "Database migration 31, which creates the analytics tables and functions, has not been applied.",
      "error": "The backend returned an error while computing analytics.",
      "loadError": "Could not load analytics (HTTP {{status}}).",
      "howTo": "How to fix it",
      "migrationSteps": "Run \"{{cmd}}\" from backend/ (applies {{file}}) and reload this page.",
      "retry": "Retry"
    },
    "errors": {
      "TENANT_HAS_SUBSCRIPTION": "This business has a Stripe subscription, so Stripe governs its plan. Change or cancel it there first.",
      "TENANT_HAS_ACTIVE_PLAN": "This business has an active courtesy plan. Move it to Free first, then extend the trial.",
      "TENANT_NOT_FOUND": "That business no longer exists.",
      "INVALID_TENANT_ID": "Invalid business identifier.",
      "INVALID_PLAN": "That plan is not valid."
    }
  },
  "businessHours": {
    "eyebrow": "Company",
    "title": "Working hours",
    "open": "Open",
    "closed": "Closed",
    "addWindow": "+ Add slot",
    "quitarTramo": "Remove slot",
    "desde": "From",
    "hasta": "To",
    "errorFormato": "Invalid schedule format. Check the times (HH:MM) of each slot.",
    "days": {
      "mon": "Monday",
      "tue": "Tuesday",
      "wed": "Wednesday",
      "thu": "Thursday",
      "fri": "Friday",
      "sat": "Saturday",
      "sun": "Sunday"
    }
  },
  "subscriptionBanner": {
    "manage": "Manage",
    "trialEndsToday": "Your trial ends today. Choose a plan to keep all features.",
    "pastDue": "Your last payment did not go through. Update your payment method to avoid service suspension.",
    "unpaid": "There are unpaid invoices on your account. Settle the payment to keep the service active.",
    "canceled": "Your subscription has been canceled. Reactivate a plan to keep using the platform.",
    "incompleteExpired": "Your subscription could not be completed. Retry the payment to activate your plan.",
    "generic": "There is a problem with your subscription. Check your billing settings.",
    "freeHint": "You are on the Free plan. When your business grows, upgrade to raise your limits and unlock more features.",
    "viewPlans": "View plans",
    "trialEndsInDays_one": "Your trial ends in {{count}} day. Choose a plan to keep all features.",
    "trialEndsInDays_few": "Your trial ends in {{count}} days. Choose a plan to keep all features.",
    "trialEndsInDays_many": "Your trial ends in {{count}} days. Choose a plan to keep all features.",
    "trialEndsInDays_other": "Your trial ends in {{count}} days. Choose a plan to keep all features."
  },
  "titles": {
    "home": "Online booking and appointment software for your business",
    "suspended": "Account suspended",
    "login": "Log in to your booking software",
    "resetPassword": "Reset password",
    "agenda": "Calendar",
    "clients": "Clients",
    "clientDetail": "Client record",
    "settings": "Settings",
    "billing": "Billing",
    "catalogs": "Catalogs",
    "audit": "Audit log",
    "timeBlocks": "Calendar blocks",
    "bookingSettings": "Online booking settings",
    "pendingBookings": "Pending bookings",
    "platform": "Platform",
    "publicBooking": "Book online",
    "myAppointment": "My appointment",
    "signup": "Create your free account: 14-day trial, no card required",
    "notFound": "Page not found",
    "team": "Team",
    "bonos": "Packages"
  },
  "notFound": {
    "eyebrow": "Error 404",
    "title": "Page not found",
    "lead": "The page you are looking for does not exist or has moved.",
    "home": "Go to the home page"
  },
  "a11y": {
    "skipToContent": "Skip to content"
  },
  "confirmModal": {
    "title": "Confirm action",
    "message": "Are you sure you want to continue?",
    "itemLabel": "Item"
  },
  "whatsappCta": {
    "homeLabel": "Questions? Message us on WhatsApp",
    "homeMessage": "Hi, I saw BookingForNow and I have a question",
    "signupLead": "Questions about signing up?",
    "signupLabel": "Message us on WhatsApp",
    "signupMessage": "Hi, I'm signing up for BookingForNow and I have a question",
    "ariaLabel": "{{label}} (opens in a new tab)"
  },
  "tour": {
    "stepOf": "Step {{current}} of {{total}}",
    "close": "Close the tutorial",
    "skip": "Skip tutorial",
    "configure": "Go to setup",
    "finish": "Finish",
    "relaunch": "View tutorial",
    "relaunchAria": "View the setup tutorial",
    "steps": {
      "business": {
        "title": "Your business",
        "body": "Start with your business details: the phone, email and address your customers will see when booking, plus language, currency and time zone."
      },
      "team": {
        "title": "Your team",
        "body": "A team member is you or anyone on your team who takes appointments. Add at least one so you can receive bookings. You will find it in the “Practitioners” tab."
      },
      "services": {
        "title": "Your services",
        "body": "Services are what you offer (a session, a haircut, a check-up, a class…), each with its own duration and price. Create them in the “Services” tab."
      },
      "hours": {
        "title": "Your opening hours",
        "body": "Set your opening hours so customers can only book when you are available."
      },
      "link": {
        "title": "Share your booking link",
        "body": "Your page is already taking bookings: share your public link so customers can book on their own. You will find it under “Online booking settings”, where you can also turn it off.",
        "cta": "Go to my link"
      }
    }
  },
  "team": {
    "eyebrow": "Settings",
    "title": "Team",
    "subtitle": "Give your professionals and front desk access to your calendar, each with just the right permissions.",
    "loadError": "The team could not be loaded.",
    "retry": "Try again",
    "invite": {
      "title": "Invite someone",
      "email": "Email",
      "emailPlaceholder": "name@example.com",
      "role": "Role",
      "practitioner": "Their professional profile",
      "practitionerNone": "Not linked",
      "practitionerHelp": "Link them to their professional profile so they can manage their own time blocks.",
      "send": "Send invitation",
      "sending": "Sending…"
    },
    "members": {
      "linkOf": "Professional profile of {{email}}",
      "title": "People with access",
      "you": "You",
      "pending": "Invitation pending",
      "lastSeen": "Last sign-in: {{date}}",
      "roleOf": "Role of {{email}}",
      "resend": "Resend",
      "remove": "Remove access"
    },
    "toasts": {
      "linkChanged": "Professional profile updated",
      "invited": "Invitation sent to {{email}}",
      "resent": "Invitation resent to {{email}}",
      "roleChanged": "Role updated",
      "removed": "{{email}} no longer has access"
    },
    "errors": {
      "PRACTITIONER_ALREADY_LINKED": "That professional profile is already linked to another account.",
      "PRACTITIONER_NOT_FOUND": "That professional profile no longer exists.",
      "INVALID_EMAIL": "That email is not valid.",
      "INVALID_ROLE": "That role is not valid.",
      "ROLE_NOT_ALLOWED": "You are not allowed to grant or manage that role.",
      "ALREADY_MEMBER": "That person is already part of the team.",
      "PLAN_LIMIT_REACHED": "You have reached the number of users in your plan.",
      "CANNOT_MODIFY_SELF": "You cannot change your own access.",
      "OWNER_PROTECTED": "The owner cannot be changed from here.",
      "NOT_FOUND": "That person is no longer part of the team.",
      "INVITE_LINK_FAILED": "The invitation could not be generated. Try again in a few minutes.",
      "AUTH_UNAVAILABLE": "The sign-in service is not available right now.",
      "ACCOUNT_MISMATCH": "That person's account has changed. Remove their access and invite them again.",
      "copyFailed": "Could not copy. Select the link and copy it manually."
    },
    "seats": {
      "count": "{{used}} of {{limit}} users",
      "unlimited": "{{used}} users · no limit",
      "full": "You have reached the number of users in your plan.",
      "upgrade": "See plans"
    },
    "manual": {
      "title": "Share the access link yourself",
      "body": "We could not send the email to {{email}}. Copy this link and send it over WhatsApp or any channel you prefer.",
      "linkLabel": "Access link",
      "copy": "Copy link",
      "copied": "Copied",
      "expires": "The link is personal and expires in 24 hours. Do not post it publicly."
    },
    "confirmRemove": {
      "title": "Remove access",
      "message": "Remove access for {{email}}? They will no longer be able to open your calendar, effective immediately. Their appointments and data are not deleted."
    },
    "rolesGuide": {
      "title": "What each role can do"
    },
    "roles": {
      "owner": {
        "name": "Owner",
        "help": "Everything, including the subscription and team management."
      },
      "admin": {
        "name": "Administrator",
        "help": "Manages the calendar, clients, payments, services and settings. Can invite professionals and front desk. Cannot see the subscription."
      },
      "practitioner": {
        "name": "Professional",
        "help": "Works with the calendar, clients and their notes. Does not handle payments, reports or settings."
      },
      "receptionist": {
        "name": "Front desk",
        "help": "Manages the calendar, clients, payments and session packs. Cannot see professionals' private notes."
      },
      "readonly": {
        "name": "Read only",
        "help": "Can view the calendar and clients but cannot change anything."
      }
    },
    "managersOnly": "Only the owner or an administrator can manage the team."
  },
  "theme": {
    "label": "Theme",
    "light": "Light",
    "dark": "Dark",
    "system": "System"
  }
}
