{
  "en": {
    "legal": {
      "privacy": "Privacy policy",
      "terms": "Terms of service",
      "termsShort": "Terms",
      "dataRemoval": "Data removal",
      "footerCopyright": "Copyright © Naked Spend. All rights reserved.",
      "sidebarCopyright": "© Naked Spend"
    },
    "login": {
      "pageTitle": "Sign in — Naked Spend",
      "ledeSignIn": "Sign in to manage your clients, sessions, and payments.",
      "ledeSignUp": "Create an account to manage clients, sessions, and payments from WhatsApp and this app.",
      "labelEmail": "Email",
      "labelPassword": "Password",
      "labelPasswordConfirm": "Confirm password",
      "placeholderEmail": "you@example.com",
      "forgotLink": "Forgot password?",
      "submitSignIn": "Sign in",
      "submitSignUp": "Create account",
      "switchNew": "New here?",
      "switchHave": "Already have an account?",
      "toggleCreate": "Create an account",
      "toggleSignIn": "Sign in",
      "heroKicker": "For solo professionals",
      "heroQuote": "Built for professionals who’d rather focus on clients than admin work.",
      "heroSub": "Client onboarding, sessions, and payments — organized through WhatsApp.",
      "brandAlt": "Naked Spend",
      "footerNavAria": "Legal",
      "messages": {
        "configIncomplete": "App configuration is incomplete (missing Supabase URL or anon key). Add SUPABASE_URL and SUPABASE_ANON_KEY to your server environment.",
        "resetSuccess": "Your password was updated. Sign in with your new password.",
        "passwordMismatch": "Passwords do not match.",
        "signupCheckEmail": "Check your email to confirm your account if required by your project settings. You can sign in once confirmed.",
        "signInError": "Could not sign in.",
        "signUpError": "Could not create account."
      }
    },
    "forgot": {
      "pageTitle": "Reset password — Naked Spend",
      "lede": "Enter your email and we’ll send you a link to reset your password.",
      "labelEmail": "Email",
      "placeholderEmail": "you@example.com",
      "submit": "Send reset link",
      "backToSignIn": "← Back to sign in",
      "heroKicker": "For solo professionals",
      "heroQuote": "Reset your password in a few steps and get back to your practice.",
      "heroSub": "We’ll email you a secure link. It expires after a short time for your safety.",
      "messages": {
        "configIncomplete": "App configuration is incomplete (missing Supabase URL or anon key). Add SUPABASE_URL and SUPABASE_ANON_KEY to your server environment.",
        "sendError": "Could not send reset email.",
        "sentInfo": "If an account exists for that email, we sent a reset link. Check your inbox and spam folder."
      }
    },
    "reset": {
      "pageTitle": "New password — Naked Spend",
      "ledeWaiting": "Verifying your reset link…",
      "ledeForm": "Choose a new password for your account.",
      "labelNewPassword": "New password",
      "labelConfirmPassword": "Confirm new password",
      "submit": "Update password",
      "backToSignIn": "← Back to sign in",
      "heroKicker": "For solo professionals",
      "heroQuote": "Pick a strong password you haven’t used elsewhere.",
      "heroSub": "After updating, you’ll sign in again on the login page.",
      "messages": {
        "configIncomplete": "App configuration is incomplete (missing Supabase URL or anon key). Add SUPABASE_URL and SUPABASE_ANON_KEY to your server environment.",
        "invalidLink": "This reset link is invalid or has expired. Request a new one from the sign-in page.",
        "passwordMismatch": "Passwords do not match.",
        "updateError": "Could not update password."
      }
    },
    "settings": {
      "pageTitle": "Settings — Naked Spend",
      "skipToContent": "Skip to content",
      "sidebarHomeAria": "Home",
      "navCustomers": "Customers",
      "navSessions": "Sessions",
      "navRevenue": "Revenue",
      "navSettings": "Settings",
      "sidebarNavAria": "App sections",
      "sidebarLegalAria": "Legal",
      "title": "Settings",
      "signOut": "Sign out",
      "languageTitle": "Language",
      "languageLead": "Applies to sign-in, sign-up, forgot password, reset password, the Customers and Revenue pages (including numbers and dates), and the text on this screen.",
      "languageLabel": "Display language",
      "langOptionEn": "English",
      "langOptionEs": "Español (Spanish)",
      "languageSaved": "Language saved.",
      "regionalTitle": "Currency and dates",
      "regionalLead": "Used for money and dates on the Customers and Revenue pages.",
      "currencyLabel": "Currency",
      "currencyOptionUsd": "US dollar (USD)",
      "currencyOptionMxn": "Mexican peso (MXN)",
      "dateFormatLabel": "Date order",
      "dateFormatOptionDmy": "10 may 2026 — day first",
      "dateFormatOptionMdy": "may 10 2026 — month first",
      "regionalSaved": "Regional preferences saved.",
      "waTitle": "WhatsApp assistant",
      "waLeadHtml": "Link the <strong>same phone number</strong> you use in WhatsApp to message your Naked Spend number. Then commands like “New patient Timmy Turner” are saved under <strong>your</strong> account only—never mixed with anyone else’s.",
      "waHint": "Enter your number with country code (for example +1 555 123 4567). We store digits only so it matches what Meta sends.",
      "waLinkedLabel": "Linked number",
      "waPhoneLabel": "WhatsApp number",
      "waSave": "Save link",
      "waRemove": "Remove link",
      "waPlaceholder": "+1 555 123 4567",
      "waUpdatePlaceholder": "Update to a different number…",
      "waRemoveConfirm": "Remove your WhatsApp link? Inbound messages from that number will no longer update your account.",
      "waTableMissing": "WhatsApp link table is missing. Run the migration `20260510280000_whatsapp_user_links.sql` in Supabase, then refresh this page.",
      "waLoadError": "Could not load your WhatsApp link.",
      "waDigitsError": "Please enter a full phone number with country code (at least 10 digits).",
      "waSaved": "WhatsApp number saved.",
      "waRemoved": "WhatsApp link removed.",
      "waSaveError": "Could not save your WhatsApp link.",
      "waRemoveError": "Could not remove the link.",
      "waDuplicate": "That WhatsApp number is already linked to a different account. Each number can only belong to one Naked Spend user.",
      "waSavedDetail": "WhatsApp number saved. You can send commands from that phone.",
      "waLinkRemovedSuccess": "Link removed.",
      "waCouldNotRemoveGeneric": "Could not remove link."
    },
    "customers": {
      "pageTitle": "Customers — Naked Spend",
      "title": "Customers",
      "searchLabel": "Search customers",
      "searchPlaceholder": "Search customers",
      "addCustomer": "Add customer",
      "emptyTitle": "No customers yet",
      "emptyLead": "Add your first customer to start tracking sessions and balances.",
      "colSelect": "Select",
      "colCustomer": "Customer",
      "colEmail": "Email",
      "colPhone": "Phone",
      "colLastContacted": "Last contacted",
      "colStatus": "Status",
      "colOutstanding": "Outstanding",
      "colActions": "Actions",
      "modalAddTitle": "Add customer",
      "modalEditTitle": "Edit customer",
      "modalCloseAria": "Close",
      "labelFirstName": "First name",
      "labelLastName": "Last name",
      "labelEmail": "Email",
      "labelPhone": "Phone",
      "labelProfilePhoto": "Profile photo",
      "avatarDropHintHtml": "Drop an image here, <strong>paste</strong> (Ctrl+V), or <span class=\"dash-avatar-upload-browse\">choose a file</span>",
      "avatarRemovePhoto": "Remove photo",
      "avatarFieldHintHtml": "Optional. JPEG, PNG, GIF, or WebP — up to 5MB. Stored in your Supabase bucket <code>avatars</code>.",
      "labelLastContacted": "Last contacted",
      "labelDriveFolder": "Google Drive folder",
      "profileSectionSummary": "Profile details (optional)",
      "labelDob": "Date of birth",
      "labelEmergencyName": "Emergency contact name",
      "labelEmergencyPhone": "Emergency contact phone",
      "labelConsultationReason": "Consultation focus",
      "labelSessionModality": "Session format",
      "modalityUnset": "Not set",
      "labelPreferredPayment": "Preferred payment",
      "labelDefaultSessionFee": "Default session fee",
      "defaultFeeHint": "Uses your app currency. Suggested default when scheduling from WhatsApp.",
      "labelProfileNotes": "Notes",
      "profileNotesHint": "Operational notes only — not a clinical record.",
      "labelOnboardingComplete": "Mark profile as complete",
      "validDefaultFee": "Please enter a valid default session fee, or leave the field empty.",
      "driveFolderPlaceholder": "https://drive.google.com/drive/folders/…",
      "driveFolderFieldHint": "Optional. Opens from the customer panel’s Google Drive button.",
      "cancel": "Cancel",
      "save": "Save",
      "drawerCloseAria": "Close panel",
      "joinedPrefix": "Joined",
      "statusActive": "Active",
      "statusInactive": "Inactive",
      "whatsappReminder": "WhatsApp Reminder",
      "whatsappSoonTitle": "Coming soon",
      "googleDrive": "Google Drive",
      "googleDriveOpenTitle": "Open this customer’s folder in Google Drive",
      "sessionsHeading": "Sessions",
      "addSession": "Add session",
      "sessionSearchLabel": "Search sessions",
      "sessionSearchPlaceholder": "Search sessions",
      "sessionFilterAria": "Filter",
      "sessionSortAria": "Sort",
      "filterAll": "All",
      "filterUnpaid": "Unpaid",
      "filterPaid": "Paid",
      "sortDueAsc": "Due (soonest)",
      "sortDueDesc": "Due (latest)",
      "sortAmountDesc": "Amount (high)",
      "sortAmountAsc": "Amount (low)",
      "sortTitleAsc": "Title (A–Z)",
      "sessionEditorTitle": "Title",
      "sessionEditorDue": "Due",
      "sessionEditorAmount": "Amount ({{code}})",
      "sessionEditorNotes": "Session notes",
      "sessionNotesPlaceholder": "Optional — scheduling, payment, or admin details",
      "sessionNotesHint": "Operational notes only — not a clinical record.",
      "sessionPaid": "Paid",
      "sessionCancel": "Cancel",
      "sessionSave": "Save session",
      "sessionTitlePlaceholder": "e.g. Session 4",
      "sessionEmptyAll": "No sessions yet. Use Add session to create one.",
      "sessionEmptyFiltered": "No sessions match your search or filters.",
      "nameFallback": "Customer",
      "duePrefix": "Due",
      "dueUnknown": "Due —",
      "sessionStatusPaid": "Paid",
      "sessionStatusOpen": "Open",
      "sessionStatusOverdue": "Overdue",
      "markAsPaid": "Mark as paid",
      "markAsUnpaid": "Mark as unpaid",
      "sessionActionsAria": "Session actions",
      "edit": "Edit",
      "delete": "Delete",
      "deactivate": "Deactivate",
      "activate": "Activate",
      "selectCustomerAria": "Select {{name}}",
      "bulkSoonTitle": "Bulk actions coming soon",
      "actionsForAria": "Actions for {{name}}",
      "outstandingLabel": "Outstanding",
      "joinedLine": "Joined {{date}}",
      "drawerProfileSummary": "Profile details",
      "profileFieldDob": "Date of birth",
      "profileFieldEmergency": "Emergency contact",
      "profileFieldReason": "Consultation focus",
      "profileFieldModality": "Session format",
      "profileFieldPayment": "Preferred payment",
      "profileFieldDefaultFee": "Default session fee",
      "profileFieldNotes": "Notes",
      "profileIncompleteHint": "Onboarding isn’t marked complete yet — you can finish details from WhatsApp when that flow is enabled.",
      "statusIntakeIncomplete": "Intake incomplete",
      "profileModalityOnline": "Online",
      "profileModalityInPerson": "In person",
      "profileModalityHybrid": "Hybrid",
      "drawerSubOutstanding": "Outstanding •",
      "drawerSubAllClear": "All clear •",
      "unpaidSessionOne": "1 unpaid session",
      "unpaidSessionOther": "{{n}} unpaid sessions",
      "sessionsTotalOne": "1 session",
      "sessionsTotalOther": "{{n}} sessions",
      "confirmDeleteSession": "Delete this session?",
      "confirmDeactivate": "Deactivate {{name}}? They’ll stay in your list as inactive.",
      "alertDeleteSessionError": "Could not delete session.",
      "alertUpdateSessionError": "Could not update session.",
      "authExpired": "Your session expired. Sign in again.",
      "enterTitle": "Please enter a title.",
      "chooseDue": "Please choose a due date.",
      "validAmount": "Please enter a valid amount.",
      "saveSessionError": "Could not save session.",
      "driveFolderMissing": "Add this customer’s Google Drive folder URL in Edit customer → Google Drive folder. Then this button opens it in a new tab.",
      "sessionsTableMissing": "Sessions table missing. Run supabase/migrations/20260510260000_sessions.sql in the Supabase SQL Editor, then refresh.",
      "sessionsLoadError": "Could not load sessions.",
      "customersTableMissing": "Database table missing. Run the Supabase migration (customers) from supabase/migrations, then refresh.",
      "customersLoadError": "Could not load customers.",
      "avatarTypeError": "Please use a JPEG, PNG, GIF, or WebP image.",
      "avatarSizeError": "Image must be 5MB or smaller.",
      "bucketMissingError": "The storage bucket avatars does not exist yet. In Supabase Dashboard open Storage → New bucket: name it exactly avatars, turn on Public bucket, create it. Then run supabase/migrations SQL for storage policies in the SQL Editor.",
      "uploadFailed": "Upload failed",
      "errSaveCustomerBlocked": "Saving customer was blocked",
      "errPhotoBlocked": "Photo save was blocked",
      "errCouldNotSave": "Could not save"
    },
    "sessions": {
      "pageTitle": "Sessions — Naked Spend",
      "title": "Sessions",
      "subtitle": "Track upcoming sessions, payments, and patient status.",
      "searchLabel": "Search sessions",
      "searchPlaceholder": "Search sessions",
      "weekPrevAria": "Previous week",
      "weekNextAria": "Next week",
      "weekToday": "This week",
      "statWeekCount": "Sessions this week",
      "statUnpaid": "Unpaid",
      "statIncomplete": "Missing session notes",
      "statCollected": "Collected",
      "emptyTitle": "No sessions yet",
      "emptyLead": "Sessions you log for customers will appear here in a calm weekly view.",
      "emptyCta": "Go to customers",
      "searchNoMatch": "No sessions match your search this week.",
      "dayEmpty": "No sessions scheduled for {{day}}.",
      "todayBadge": "Today",
      "weekAllPaid": "All sessions are fully paid this week.",
      "modalAddTitle": "Add session",
      "modalEditTitle": "Edit session",
      "modalRescheduleTitle": "Reschedule session",
      "pickCustomer": "Customer",
      "pickCustomerPlaceholder": "Select a customer",
      "actionDelete": "Delete session",
      "actionReschedule": "Reschedule",
      "actionViewProfile": "View profile",
      "actionDocuments": "Open documents",
      "statusPending": "Payment pending",
      "statusRequiresAttention": "Requires attention",
      "statusNotesIncomplete": "Session notes missing",
      "patientFallback": "Patient"
    },
    "revenue": {
      "pageTitle": "Revenue — Naked Spend",
      "title": "Revenue",
      "searchLabel": "Search by month",
      "searchPlaceholder": "Search months",
      "statLast12Label": "Last 12 months",
      "statLast12HintOne": "{{n}} invoice paid",
      "statLast12HintMany": "{{n}} invoices paid",
      "statAvgLabel": "Monthly average",
      "statAvgHint": "Across the last year",
      "statThisMonthLabel": "This month",
      "statThisMonthHintOne": "{{n}} invoice paid",
      "statThisMonthHintMany": "{{n}} invoices paid",
      "emptyTitle": "No paid sessions yet",
      "emptyLead": "When you mark sessions as paid on the Customers page, they’ll show up here by month.",
      "colMonth": "Month",
      "colInvoices": "Invoices",
      "colRevenue": "Revenue",
      "colActions": "Actions",
      "noMatchSearch": "No months match your search.",
      "actionsForAria": "Actions for {{month}}",
      "editMonth": "Edit month",
      "removeFromReport": "Remove from report",
      "comingSoonTitle": "Coming soon",
      "sessionsTableMissing": "Sessions table missing. Run supabase/migrations (sessions), then refresh.",
      "revenueLoadError": "Could not load revenue data."
    }
  },
  "es": {
    "legal": {
      "privacy": "Política de privacidad",
      "terms": "Términos del servicio",
      "termsShort": "Términos",
      "dataRemoval": "Eliminación de datos",
      "footerCopyright": "Copyright © Naked Spend. Todos los derechos reservados.",
      "sidebarCopyright": "© Naked Spend"
    },
    "login": {
      "pageTitle": "Iniciar sesión — Naked Spend",
      "ledeSignIn": "Inicia sesión para administrar tus pacientes, sesiones y pagos.",
      "ledeSignUp": "Crea una cuenta para administrar pacientes, sesiones y pagos desde WhatsApp y esta aplicación.",
      "labelEmail": "Correo electrónico",
      "labelPassword": "Contraseña",
      "labelPasswordConfirm": "Confirmar contraseña",
      "placeholderEmail": "tu@ejemplo.com",
      "forgotLink": "¿Olvidaste tu contraseña?",
      "submitSignIn": "Iniciar sesión",
      "submitSignUp": "Crear cuenta",
      "switchNew": "¿Nuevo aquí?",
      "switchHave": "¿Ya tienes cuenta?",
      "toggleCreate": "Crear una cuenta",
      "toggleSignIn": "Iniciar sesión",
      "heroKicker": "Para profesionales independientes",
      "heroQuote": "Pensado para quienes prefieren atender a sus clientes que hacer papeleo.",
      "heroSub": "Alta de pacientes, sesiones y pagos — organizados por WhatsApp.",
      "brandAlt": "Naked Spend",
      "footerNavAria": "Legal",
      "messages": {
        "configIncomplete": "La aplicación no está configurada (falta la URL de Supabase o la clave anónima). Añade SUPABASE_URL y SUPABASE_ANON_KEY en el entorno del servidor.",
        "resetSuccess": "Tu contraseña se actualizó. Inicia sesión con la nueva contraseña.",
        "passwordMismatch": "Las contraseñas no coinciden.",
        "signupCheckEmail": "Revisa tu correo para confirmar tu cuenta si tu proyecto lo requiere. Podrás iniciar sesión cuando esté confirmada.",
        "signInError": "No se pudo iniciar sesión.",
        "signUpError": "No se pudo crear la cuenta."
      }
    },
    "forgot": {
      "pageTitle": "Restablecer contraseña — Naked Spend",
      "lede": "Escribe tu correo y te enviaremos un enlace para restablecer tu contraseña.",
      "labelEmail": "Correo electrónico",
      "placeholderEmail": "tu@ejemplo.com",
      "submit": "Enviar enlace",
      "backToSignIn": "← Volver al inicio de sesión",
      "heroKicker": "Para profesionales independientes",
      "heroQuote": "Recupera el acceso en pocos pasos y vuelve a tu consulta.",
      "heroSub": "Te enviaremos un enlace seguro por correo. Caduca en poco tiempo por tu seguridad.",
      "messages": {
        "configIncomplete": "La aplicación no está configurada (falta la URL de Supabase o la clave anónima). Añade SUPABASE_URL y SUPABASE_ANON_KEY en el entorno del servidor.",
        "sendError": "No se pudo enviar el correo de restablecimiento.",
        "sentInfo": "Si existe una cuenta con ese correo, enviamos un enlace de restablecimiento. Revisa tu bandeja de entrada y spam."
      }
    },
    "reset": {
      "pageTitle": "Nueva contraseña — Naked Spend",
      "ledeWaiting": "Verificando tu enlace de restablecimiento…",
      "ledeForm": "Elige una nueva contraseña para tu cuenta.",
      "labelNewPassword": "Nueva contraseña",
      "labelConfirmPassword": "Confirmar nueva contraseña",
      "submit": "Actualizar contraseña",
      "backToSignIn": "← Volver al inicio de sesión",
      "heroKicker": "Para profesionales independientes",
      "heroQuote": "Usa una contraseña fuerte que no uses en otros sitios.",
      "heroSub": "Después de actualizar, volverás a iniciar sesión en la página de acceso.",
      "messages": {
        "configIncomplete": "La aplicación no está configurada (falta la URL de Supabase o la clave anónima). Añade SUPABASE_URL y SUPABASE_ANON_KEY en el entorno del servidor.",
        "invalidLink": "Este enlace no es válido o ha caducado. Solicita uno nuevo desde la página de inicio de sesión.",
        "passwordMismatch": "Las contraseñas no coinciden.",
        "updateError": "No se pudo actualizar la contraseña."
      }
    },
    "settings": {
      "pageTitle": "Ajustes — Naked Spend",
      "skipToContent": "Saltar al contenido",
      "sidebarHomeAria": "Inicio",
      "navCustomers": "Pacientes",
      "navSessions": "Sesiones",
      "navRevenue": "Ingresos",
      "navSettings": "Ajustes",
      "sidebarNavAria": "Secciones de la app",
      "sidebarLegalAria": "Legal",
      "title": "Ajustes",
      "signOut": "Cerrar sesión",
      "languageTitle": "Idioma",
      "languageLead": "Se aplica al inicio de sesión, registro, recuperación y nueva contraseña, a las páginas de Pacientes e Ingresos (números y fechas incluidos) y al texto de esta pantalla.",
      "languageLabel": "Idioma de la interfaz",
      "langOptionEn": "English (inglés)",
      "langOptionEs": "Español",
      "languageSaved": "Idioma guardado.",
      "regionalTitle": "Moneda y fechas",
      "regionalLead": "Se usa para importes y fechas en las páginas de Pacientes e Ingresos.",
      "currencyLabel": "Moneda",
      "currencyOptionUsd": "Dólar estadounidense (USD)",
      "currencyOptionMxn": "Peso mexicano (MXN)",
      "dateFormatLabel": "Orden de la fecha",
      "dateFormatOptionDmy": "10 mayo 2026 — día primero",
      "dateFormatOptionMdy": "mayo 10 2026 — mes primero",
      "regionalSaved": "Preferencias regionales guardadas.",
      "waTitle": "Asistente de WhatsApp",
      "waLeadHtml": "Vincula el <strong>mismo número de teléfono</strong> que usas en WhatsApp para escribir a tu número de Naked Spend. Así, comandos como «Nuevo paciente Timmy Turner» se guardan solo en <strong>tu</strong> cuenta y no se mezclan con los de nadie más.",
      "waHint": "Escribe el número con código de país (por ejemplo +52 55 1234 5678). Guardamos solo dígitos para que coincida con lo que envía Meta.",
      "waLinkedLabel": "Número vinculado",
      "waPhoneLabel": "Número de WhatsApp",
      "waSave": "Guardar vínculo",
      "waRemove": "Quitar vínculo",
      "waPlaceholder": "+52 55 1234 5678",
      "waUpdatePlaceholder": "Cambiar a otro número…",
      "waRemoveConfirm": "¿Quitar el vínculo de WhatsApp? Los mensajes entrantes de ese número ya no actualizarán tu cuenta.",
      "waTableMissing": "Falta la tabla de vínculos de WhatsApp. Ejecuta la migración `20260510280000_whatsapp_user_links.sql` en Supabase y vuelve a cargar la página.",
      "waLoadError": "No se pudo cargar tu vínculo de WhatsApp.",
      "waDigitsError": "Escribe un número completo con código de país (al menos 10 dígitos).",
      "waSaved": "Número de WhatsApp guardado.",
      "waRemoved": "Vínculo de WhatsApp eliminado.",
      "waSaveError": "No se pudo guardar el vínculo de WhatsApp.",
      "waRemoveError": "No se pudo eliminar el vínculo.",
      "waDuplicate": "Ese número de WhatsApp ya está vinculado a otra cuenta. Cada número solo puede pertenecer a un usuario de Naked Spend.",
      "waSavedDetail": "Número de WhatsApp guardado. Puedes enviar comandos desde ese teléfono.",
      "waLinkRemovedSuccess": "Vínculo eliminado.",
      "waCouldNotRemoveGeneric": "No se pudo eliminar el vínculo."
    },
    "customers": {
      "pageTitle": "Pacientes — Naked Spend",
      "title": "Pacientes",
      "searchLabel": "Buscar pacientes",
      "searchPlaceholder": "Buscar pacientes",
      "addCustomer": "Añadir paciente",
      "emptyTitle": "Aún no hay pacientes",
      "emptyLead": "Añade tu primer paciente para llevar el control de sesiones y saldos.",
      "colSelect": "Seleccionar",
      "colCustomer": "Paciente",
      "colEmail": "Correo",
      "colPhone": "Teléfono",
      "colLastContacted": "Último contacto",
      "colStatus": "Estado",
      "colOutstanding": "Pendiente",
      "colActions": "Acciones",
      "modalAddTitle": "Añadir paciente",
      "modalEditTitle": "Editar paciente",
      "modalCloseAria": "Cerrar",
      "labelFirstName": "Nombre",
      "labelLastName": "Apellidos",
      "labelEmail": "Correo electrónico",
      "labelPhone": "Teléfono",
      "labelProfilePhoto": "Foto de perfil",
      "avatarDropHintHtml": "Arrastra una imagen aquí, <strong>pega</strong> (Ctrl+V) o <span class=\"dash-avatar-upload-browse\">elige un archivo</span>",
      "avatarRemovePhoto": "Quitar foto",
      "avatarFieldHintHtml": "Opcional. JPEG, PNG, GIF o WebP — hasta 5 MB. Se guarda en el bucket <code>avatars</code> de Supabase.",
      "labelLastContacted": "Último contacto",
      "labelDriveFolder": "Carpeta de Google Drive",
      "profileSectionSummary": "Detalles del perfil (opcional)",
      "labelDob": "Fecha de nacimiento",
      "labelEmergencyName": "Nombre del contacto de emergencia",
      "labelEmergencyPhone": "Teléfono del contacto de emergencia",
      "labelConsultationReason": "Motivo o enfoque de consulta",
      "labelSessionModality": "Formato de sesión",
      "modalityUnset": "Sin definir",
      "labelPreferredPayment": "Forma de pago preferida",
      "labelDefaultSessionFee": "Honorario habitual por sesión",
      "defaultFeeHint": "Usa la moneda de la app. Valor sugerido al agendar por WhatsApp.",
      "labelProfileNotes": "Notas",
      "profileNotesHint": "Solo notas operativas — no constituyen historia clínica.",
      "labelOnboardingComplete": "Marcar perfil como completo",
      "validDefaultFee": "Escribe un honorario habitual válido o deja el campo vacío.",
      "driveFolderPlaceholder": "https://drive.google.com/drive/folders/…",
      "driveFolderFieldHint": "Opcional. Se abre desde el botón de Google Drive en el panel del paciente.",
      "cancel": "Cancelar",
      "save": "Guardar",
      "drawerCloseAria": "Cerrar panel",
      "joinedPrefix": "Alta",
      "statusActive": "Activo",
      "statusInactive": "Inactivo",
      "whatsappReminder": "Recordatorio WhatsApp",
      "whatsappSoonTitle": "Próximamente",
      "googleDrive": "Google Drive",
      "googleDriveOpenTitle": "Abrir la carpeta de este paciente en Google Drive",
      "sessionsHeading": "Sesiones",
      "addSession": "Añadir sesión",
      "sessionSearchLabel": "Buscar sesiones",
      "sessionSearchPlaceholder": "Buscar sesiones",
      "sessionFilterAria": "Filtrar",
      "sessionSortAria": "Ordenar",
      "filterAll": "Todas",
      "filterUnpaid": "Sin pagar",
      "filterPaid": "Pagadas",
      "sortDueAsc": "Vencimiento (más próximo)",
      "sortDueDesc": "Vencimiento (más lejano)",
      "sortAmountDesc": "Importe (mayor)",
      "sortAmountAsc": "Importe (menor)",
      "sortTitleAsc": "Título (A–Z)",
      "sessionEditorTitle": "Título",
      "sessionEditorDue": "Vencimiento",
      "sessionEditorAmount": "Importe ({{code}})",
      "sessionEditorNotes": "Notas de la sesión",
      "sessionNotesPlaceholder": "Opcional — agenda, pago o detalles administrativos",
      "sessionNotesHint": "Solo notas operativas — no es registro clínico.",
      "sessionPaid": "Pagada",
      "sessionCancel": "Cancelar",
      "sessionSave": "Guardar sesión",
      "sessionTitlePlaceholder": "p. ej. Sesión 4",
      "sessionEmptyAll": "Aún no hay sesiones. Usa Añadir sesión para crear una.",
      "sessionEmptyFiltered": "Ninguna sesión coincide con la búsqueda o los filtros.",
      "nameFallback": "Paciente",
      "duePrefix": "Vence",
      "dueUnknown": "Vence —",
      "sessionStatusPaid": "Pagada",
      "sessionStatusOpen": "Abierta",
      "sessionStatusOverdue": "Vencida",
      "markAsPaid": "Marcar como pagada",
      "markAsUnpaid": "Marcar como no pagada",
      "sessionActionsAria": "Acciones de la sesión",
      "edit": "Editar",
      "delete": "Eliminar",
      "deactivate": "Desactivar",
      "activate": "Reactivar",
      "selectCustomerAria": "Seleccionar {{name}}",
      "bulkSoonTitle": "Acciones en lote próximamente",
      "actionsForAria": "Acciones para {{name}}",
      "outstandingLabel": "Pendiente",
      "joinedLine": "Alta: {{date}}",
      "drawerProfileSummary": "Detalles del perfil",
      "profileFieldDob": "Fecha de nacimiento",
      "profileFieldEmergency": "Contacto de emergencia",
      "profileFieldReason": "Motivo de consulta",
      "profileFieldModality": "Formato de sesión",
      "profileFieldPayment": "Forma de pago preferida",
      "profileFieldDefaultFee": "Honorario habitual",
      "profileFieldNotes": "Notas",
      "profileIncompleteHint": "El perfil aún no está marcado como completo — podrás completar datos por WhatsApp cuando ese flujo esté activo.",
      "statusIntakeIncomplete": "Alta incompleta",
      "profileModalityOnline": "En línea",
      "profileModalityInPerson": "Presencial",
      "profileModalityHybrid": "Híbrido",
      "drawerSubOutstanding": "Pendiente •",
      "drawerSubAllClear": "Al día •",
      "unpaidSessionOne": "1 sesión sin pagar",
      "unpaidSessionOther": "{{n}} sesiones sin pagar",
      "sessionsTotalOne": "1 sesión",
      "sessionsTotalOther": "{{n}} sesiones",
      "confirmDeleteSession": "¿Eliminar esta sesión?",
      "confirmDeactivate": "¿Desactivar a {{name}}? Seguirá en tu lista como inactivo.",
      "alertDeleteSessionError": "No se pudo eliminar la sesión.",
      "alertUpdateSessionError": "No se pudo actualizar la sesión.",
      "authExpired": "Tu sesión expiró. Vuelve a iniciar sesión.",
      "enterTitle": "Escribe un título.",
      "chooseDue": "Elige una fecha de vencimiento.",
      "validAmount": "Escribe un importe válido.",
      "saveSessionError": "No se pudo guardar la sesión.",
      "driveFolderMissing": "Añade la URL de la carpeta de Google Drive en Editar paciente → Carpeta de Google Drive. Entonces este botón la abrirá en una pestaña nueva.",
      "sessionsTableMissing": "Falta la tabla de sesiones. Ejecuta supabase/migrations/20260510260000_sessions.sql en el editor SQL de Supabase y vuelve a cargar.",
      "sessionsLoadError": "No se pudieron cargar las sesiones.",
      "customersTableMissing": "Falta la tabla en la base de datos. Ejecuta la migración de pacientes (customers) en supabase/migrations y vuelve a cargar.",
      "customersLoadError": "No se pudieron cargar los pacientes.",
      "avatarTypeError": "Usa una imagen JPEG, PNG, GIF o WebP.",
      "avatarSizeError": "La imagen debe pesar 5 MB o menos.",
      "bucketMissingError": "El bucket de almacenamiento avatars aún no existe. En el panel de Supabase ve a Storage → New bucket: nómbralo exactamente avatars, activa Public bucket y créalo. Luego ejecuta el SQL de políticas de almacenamiento de supabase/migrations en el editor SQL.",
      "uploadFailed": "Error al subir",
      "errSaveCustomerBlocked": "No se pudo guardar el paciente",
      "errPhotoBlocked": "No se pudo guardar la foto",
      "errCouldNotSave": "No se pudo guardar"
    },
    "sessions": {
      "pageTitle": "Sesiones — Naked Spend",
      "title": "Sesiones",
      "subtitle": "Consulta sesiones próximas, pagos y estado de tus pacientes.",
      "searchLabel": "Buscar sesiones",
      "searchPlaceholder": "Buscar sesiones",
      "weekPrevAria": "Semana anterior",
      "weekNextAria": "Semana siguiente",
      "weekToday": "Esta semana",
      "statWeekCount": "Sesiones esta semana",
      "statUnpaid": "Sin pagar",
      "statIncomplete": "Sesiones sin notas",
      "statCollected": "Cobrado",
      "emptyTitle": "Aún no hay sesiones",
      "emptyLead": "Las sesiones que registres para tus pacientes aparecerán aquí en una vista semanal clara.",
      "emptyCta": "Ir a pacientes",
      "searchNoMatch": "Ninguna sesión coincide con tu búsqueda esta semana.",
      "dayEmpty": "No hay sesiones programadas para {{day}}.",
      "todayBadge": "Hoy",
      "weekAllPaid": "Todas las sesiones de esta semana están pagadas.",
      "modalAddTitle": "Añadir sesión",
      "modalEditTitle": "Editar sesión",
      "modalRescheduleTitle": "Reagendar sesión",
      "pickCustomer": "Paciente",
      "pickCustomerPlaceholder": "Selecciona un paciente",
      "actionDelete": "Eliminar sesión",
      "actionReschedule": "Reagendar",
      "actionViewProfile": "Ver perfil",
      "actionDocuments": "Abrir documentos",
      "statusPending": "Pago pendiente",
      "statusRequiresAttention": "Requiere atención",
      "statusNotesIncomplete": "Faltan notas de sesión",
      "patientFallback": "Paciente"
    },
    "revenue": {
      "pageTitle": "Ingresos — Naked Spend",
      "title": "Ingresos",
      "searchLabel": "Buscar por mes",
      "searchPlaceholder": "Buscar meses",
      "statLast12Label": "Últimos 12 meses",
      "statLast12HintOne": "{{n}} factura pagada",
      "statLast12HintMany": "{{n}} facturas pagadas",
      "statAvgLabel": "Promedio mensual",
      "statAvgHint": "En el último año",
      "statThisMonthLabel": "Este mes",
      "statThisMonthHintOne": "{{n}} factura pagada",
      "statThisMonthHintMany": "{{n}} facturas pagadas",
      "emptyTitle": "Aún no hay sesiones pagadas",
      "emptyLead": "Cuando marques sesiones como pagadas en la página de Pacientes, aparecerán aquí agrupadas por mes.",
      "colMonth": "Mes",
      "colInvoices": "Facturas",
      "colRevenue": "Ingresos",
      "colActions": "Acciones",
      "noMatchSearch": "Ningún mes coincide con tu búsqueda.",
      "actionsForAria": "Acciones de {{month}}",
      "editMonth": "Editar mes",
      "removeFromReport": "Quitar del informe",
      "comingSoonTitle": "Próximamente",
      "sessionsTableMissing": "Falta la tabla de sesiones. Ejecuta las migraciones de supabase (sessions) y vuelve a cargar.",
      "revenueLoadError": "No se pudieron cargar los datos de ingresos."
    }
  }
}
