<?php
return [
    // General
    'app_name'          => 'Plenvo',
    'save'              => 'Guardar',
    'cancel'            => 'Cancelar',
    'delete'            => 'Eliminar',
    'edit'              => 'Editar',
    'create'            => 'Crear',
    'created_at_label'  => 'Creado',
    'updated_at_label'  => 'Actualizado',
    'back'              => 'Volver',
    'search'            => 'Buscar',
    'filter'            => 'Filtrar',
    'actions'           => 'Acciones',
    'yes'               => 'Sí',
    'no'                => 'No',
    'confirm_delete'    => '¿Eliminar realmente?',
    'loading'           => 'Cargando...',
    'error'             => 'Error',
    'success'           => 'Éxito',
    'warning'           => 'Advertencia',
    'required_field'    => 'Obligatorio',
    'optional'          => 'Opcional',
    'none'              => 'Ninguno',
    'all'               => 'Todos',
    'close'             => 'Cerrar',
    'add'               => 'Añadir',
    'remove'            => 'Eliminar',
    'settings'          => 'Ajustes',
    'hello'             => 'Hola',
    'just_now'          => 'Ahora mismo',
    'minutes_ago'       => 'minutos',
    'hours_ago'         => 'horas',
    'days_ago'          => 'días',
    'view_task'         => 'Ver tarea',
    'access_denied'     => 'Acceso denegado',
    'not_found'         => 'No encontrado',

    // Auth
    'login'             => 'Iniciar sesión',
    'register'          => 'Registrarse',
    'logout'            => 'Cerrar sesión',
    'email'             => 'E-mail',
    'password'          => 'Contraseña',
    'password_confirm'  => 'Confirmar contraseña',
    'login_title'       => 'Bienvenido de nuevo',
    'login_subtitle'    => 'Inicie sesión en su cuenta',
    'login_error'       => 'E-mail o contraseña inválidos',
    'login_rate_limited'=> 'Demasiados intentos de inicio de sesión. Por favor espere 15 minutos.',
    'login_account_locked' => 'Esta cuenta está temporalmente bloqueada después de múltiples intentos fallidos. Por favor intente más tarde o restablezca su contraseña.',
    'session_expired'   => 'Su sesión ha expirado. Por favor inicie sesión de nuevo.',
    'password_pwned'    => 'Esta contraseña aparece en filtraciones de datos conocidas. Por favor elija otra.',

    // Security settings (BSI APP.3.1)
    'security_settings'         => 'Políticas de seguridad',
    'sec_lockout_title'         => 'Bloqueo de cuenta tras intentos fallidos',
    'sec_lockout_desc'          => 'Bloquea la cuenta después de varias contraseñas incorrectas. Las cuentas con autenticación de dos factores activa están exentas.',
    'sec_lockout_enable'        => 'Habilitar bloqueo de cuenta',
    'sec_lockout_threshold'     => 'Intentos fallidos antes del bloqueo',
    'sec_lockout_threshold_hint'=> 'Recomendado: 5 (BSI ORP.4.A8).',
    'sec_lockout_duration'      => 'Duración del bloqueo (minutos)',
    'sec_lockout_duration_hint' => 'Cuánto tiempo permanece bloqueada la cuenta tras alcanzar el límite.',
    'sec_session_title'         => 'Tiempos de sesión',
    'sec_session_desc'          => 'Termina sesiones automáticamente para proteger contra navegadores comprometidos (BSI APP.3.1.A15). 0 = deshabilitado.',
    'sec_session_idle'          => 'Tiempo de inactividad (minutos)',
    'sec_session_idle_hint'     => 'Por defecto: 30. La sesión termina tras este tiempo sin actividad.',
    'sec_session_absolute'      => 'Duración máxima de sesión (horas)',
    'sec_session_absolute_hint' => 'Por defecto: 8. Fuerza reautenticación tras este tiempo total.',
    'sec_pwned_title'           => 'Bloquear contraseñas ya filtradas al establecerlas',
    'sec_pwned_enable'          => 'Comprobar las contraseñas contra la base de datos de filtraciones HIBP al establecerlas o cambiarlas',
    'sec_pwned_hint'            => 'Solo impide que se asigne de nuevo una contraseña que aparece en una filtración pública conocida (registro, cambio de contraseña, restablecimiento, creación por admin). Las contraseñas existentes NO se vuelven a comprobar retroactivamente — HIBP funciona con texto plano, la BD solo guarda un hash bcrypt. Solo se transmite un prefijo SHA-1 de 5 caracteres, nunca la contraseña en sí (k-anonymity).',
    'login_btn'         => 'Iniciar sesión',
    'remember_me'       => 'Recordarme',

    // Install
    'install_title'     => 'Instalación',
    'install_subtitle'  => 'Cree su cuenta de administrador',
    'install_btn'       => 'Completar instalación',
    'install_success'   => 'Instalación exitosa',

    // System requirements check
    'sys_requirements'          => 'Requisitos del sistema',
    'sys_req_all_ok'            => 'Todos los requisitos cumplidos',
    'sys_req_optional_missing'  => 'Funciones opcionales faltantes',
    'sys_req_critical_missing'  => 'Requisitos críticos faltantes',
    'sys_req_optional'          => 'opcional',
    'sys_req_write_permission'  => 'Permiso de escritura en directorio del proyecto',
    'sys_req_curl_detail'       => 'Asistente IA y comprobación de actualizaciones',
    'sys_req_ldap_detail'       => 'Plugin de autenticación LDAP / AD',
    'sys_req_zip_detail'        => 'Actualizaciones con un clic',

    // Health check (admin settings)
    'health_check'           => 'Comprobación de estado',
    'hc_refresh'             => 'Actualizar',
    'hc_loading'             => 'Comprobando…',
    'hc_cron'                => 'Cron Job',
    'hc_cron_never'          => 'Nunca ejecutado – ¿está configurado el cron job?',
    'hc_cron_ok'             => 'Ejecutado hace :min min',
    'hc_cron_late'           => 'Hace :min min – puede que no se ejecute cada minuto',
    'hc_cron_stale'          => 'Hace :h horas – el cron job parece detenido',
    'hc_probe_db'            => 'Archivo de base de datos no accesible públicamente',
    'hc_probe_uploads'       => 'Directorio de subidas no accesible públicamente',
    'hc_probe_exposed'       => '¡ACCESIBLE PÚBLICAMENTE – verifique .htaccess inmediatamente!',
    'hc_probe_blocked'       => 'Bloqueado (HTTP :code)',
    'hc_probe_no_conn'       => 'Sin conexión – ¿está configurada la URL de la App?',
    'hc_probe_unexpected'    => 'Estado HTTP inesperado: :code',
    'hc_no_app_url'          => 'URL de la App no configurada',
    'hc_htaccess_data'       => '.htaccess presente en data/',
    'hc_htaccess_uploads'    => '.htaccess presente en uploads/',
    'hc_file_present'        => 'Archivo presente',
    'hc_file_missing'        => 'Archivo faltante – cree .htaccess o vuelva a ejecutar el asistente de instalación',
    'admin_username'    => 'Nombre y apellidos',
    'admin_email'       => 'E-mail del administrador',
    'admin_password'    => 'Contraseña del administrador',

    // Navigation
    'dashboard'         => 'Panel',
    'projects'          => 'Proyectos',
    'my_tasks'          => 'Mis tareas',
    'notifications'     => 'Notificaciones',
    'admin'             => 'Administración',
    'profile'           => 'Perfil',
    'preferences'       => 'Preferencias',
    'plugins'           => 'Plugins',
    'help'              => 'Ayuda',

    // Dashboard
    'welcome_back'      => 'Bienvenido de nuevo',
    'active_projects'   => 'Proyectos activos',
    'open_tasks'        => 'Tareas abiertas',
    'done_tasks'        => 'Tareas completadas',
    'all_tasks'         => 'Todas las tareas',
    'my_tasks_empty'    => 'No tiene tareas asignadas.',
    'reset'             => 'Restablecer',
    'today'             => 'Hoy',
    'due_today'         => 'Vence hoy',
    'overdue'           => 'Vencidas',
    'recent_activity'   => 'Actividad reciente',
    'my_open_tasks'     => 'Mis tareas abiertas',
    'no_tasks'          => 'Sin tareas',
    'no_activity'       => 'Sin actividad',

    // Projects
    'project'           => 'Proyecto',
    'new_project'       => 'Nuevo proyecto',
    'project_name'      => 'Nombre del proyecto',
    'project_desc'      => 'Descripción',
    'project_color'     => 'Color',
    'project_status'    => 'Estado',
    'project_owner'     => 'Propietario',
    'project_members'   => 'Miembros',
    'project_settings'  => 'Ajustes del proyecto',
    'default_view'      => 'Vista por defecto',
    'required_fields'   => 'Campos obligatorios para tareas',
    'no_projects'       => 'Sin proyectos aún',
    'create_first'      => 'Cree su primer proyecto',
    'archived'          => 'Archivado',
    'active'            => 'Activo',
    'archive_project'   => 'Archivar proyecto',
    'archive_project_desc' => 'El proyecto se ocultará para todos los miembros.',
    'delete_project_desc'  => 'Esta acción es irreversible. Todas las tareas serán eliminadas.',
    'delete_project_confirm' => '¿Eliminar realmente el proyecto? ¡Esta acción no se puede deshacer!',
    'restore_project'   => 'Restaurar',
    'delete_project'    => 'Eliminar proyecto',
    'project_created'   => 'Proyecto creado',
    'project_updated'   => 'Proyecto actualizado',
    'project_deleted'   => 'Proyecto eliminado',

    // Views
    'kanban'            => 'Kanban',
    'list'              => 'Lista',
    'gantt'             => 'Gantt',
    'add_status'        => 'Añadir estado',
    'status_name'       => 'Nombre del estado',
    'mark_as_done'      => 'Marcar como completado',

    // Tasks
    'task'              => 'Tarea',
    'tasks'             => 'Tareas',
    'new_task'          => 'Nueva tarea',
    'task_title'        => 'Título',
    'task_desc'         => 'Descripción',
    'description'       => 'Descripción',
    'task_status'       => 'Estado',
    'task_priority'     => 'Prioridad',
    'assigned_to'       => 'Asignado a',
    'external_short'           => 'Ext.',
    'external_name_placeholder'=> 'Introducir nombre...',
    'created_by'        => 'Creado por',
    'due_date'          => 'Fecha de vencimiento',
    'start_date'        => 'Fecha de inicio',
    'labels'            => 'Etiquetas',
    'attachments'       => 'Adjuntos',
    'upload_file'       => 'Subir archivo',
    'predecessors'      => 'Predecesoras',
    'successors'        => 'Sucesoras',
    'no_predecessors'   => 'Sin predecesora',
    'no_successors'     => 'Sin sucesora',
    'predecessors_hint' => 'Selección múltiple con Ctrl/Cmd + clic',
    'task_created'      => 'Tarea creada',
    'task_updated'      => 'Tarea actualizada',
    'task_deleted'      => 'Tarea eliminada',
    'file_uploaded'     => 'Archivo subido',
    'no_tasks_here'     => 'Sin tareas en este estado',
    'drag_here'         => 'Arrastrar aquí',

    // Priority
    'priority'          => 'Prioridad',
    'priority_low'      => 'Baja',
    'priority_medium'   => 'Media',
    'priority_high'     => 'Alta',
    'priority_urgent'   => 'Urgente',

    // Comments
    'comments'          => 'Comentarios',
    'add_comment'       => 'Añadir comentario',
    'comment_placeholder' => 'Escriba un comentario...',
    'no_comments'       => 'Sin comentarios aún',
    'comment_posted'    => 'Comentario publicado',
    'edited'            => 'editado',

    // Members
    'members'           => 'Miembros',
    'add_member'        => 'Añadir miembro',
    'member_role'       => 'Rol',
    'role_owner'        => 'Propietario',
    'role_manager'      => 'Jefe de proyecto',
    'role_member'       => 'Miembro',
    'role_guest'        => 'Invitado',
    'all_users_are_members' => 'Todos los usuarios ya son miembros de este proyecto.',
    'member_added'      => 'Miembro añadido',
    'member_removed'    => 'Miembro eliminado',
    'member_updated'    => 'Miembro actualizado',
    'last_owner_error'  => 'El proyecto debe tener al menos un propietario.',
    'select_user'       => 'Seleccionar usuario',

    // Admin
    'users'             => 'Usuarios',
    'new_user'          => 'Nuevo usuario',
    'username'          => 'Nombre y apellidos',
    'user_role'         => 'Rol del sistema',
    'role_admin'        => 'Administrador',
    'role_user'         => 'Usuario',
    'user_active'       => 'Activo',
    'user_inactive'     => 'Inactivo',
    'user_created'      => 'Usuario creado',
    'user_updated'      => 'Usuario actualizado',
    'user_deleted'      => 'Usuario eliminado',
    'remove_from_group'         => 'Eliminar del grupo',
    'user_removed_from_group'   => 'Usuario eliminado del grupo',
    'confirm_remove_from_group' => '¿Eliminar realmente a este usuario del grupo?',
    'last_login'        => 'Último acceso',
    'never'             => 'Nunca',
    'system_settings'   => 'Ajustes del sistema',
    'nav_support'       => 'Soporte',

    // Groups / Multi-tenancy
    'groups'                => 'Grupos',
    'group'                 => 'Grupo',
    'new_group'             => 'Nuevo grupo',
    'group_name'            => 'Nombre del grupo',
    'group_description'     => 'Descripción',
    'group_admin'           => 'Admin del grupo',
    'group_member'          => 'Miembro',
    'no_group'              => 'Sin grupo',
    'group_created'         => 'Grupo creado',
    'group_updated'         => 'Grupo actualizado',
    'group_deleted'         => 'Grupo eliminado',
    'group_management'      => 'Gestión del grupo',
    'group_members'         => 'Miembros del grupo',
    'group_role'            => 'Rol en el grupo',
    'assign_group'          => 'Asignar grupo',
    'unassigned'            => 'Sin asignar',
    'no_groups'             => 'Sin grupos aún',
    'no_group_members'      => 'Sin miembros en este grupo',
    'language'          => 'Idioma',
    'theme'             => 'Tema',
    'theme_light'       => 'Predeterminado',
    'theme_dark'        => 'Oscuro',
    'theme_sepia'       => 'Sepia',
    'theme_midnight'    => 'Medianoche',
    'theme_ocean'       => 'Océano',
    'theme_matrix'      => 'Matrix',
    'theme_bluescreen'  => 'Pantalla azul',
    'theme_forest'      => 'Bosque',
    'theme_crimson'     => 'Carmesí',
    'theme_slate'       => 'Pizarra',

    // SMTP
    'smtp_settings'     => 'Ajustes SMTP',
    'smtp_host'         => 'Servidor SMTP',
    'smtp_port'         => 'Puerto',
    'smtp_username'     => 'Usuario',
    'smtp_password'     => 'Contraseña',
    'smtp_encryption'   => 'Cifrado',
    'smtp_from_email'   => 'E-mail remitente',
    'smtp_from_name'    => 'Nombre remitente',
    'smtp_test'         => 'Probar conexión',
    'smtp_test_ok'      => 'Conexión SMTP exitosa',
    'smtp_test_fail'    => 'Conexión SMTP fallida',
    'smtp_none'         => 'Ninguno',
    'smtp_ssl'          => 'SSL (Puerto 465)',
    'smtp_tls'          => 'TLS/STARTTLS (Puerto 587)',
    'notifications_enabled' => 'Notificaciones activas (e-mail + en app)',
    'notifications_enabled_hint' => 'Activo: se crean notificaciones en la app. Si hay un proveedor de correo configurado abajo, las mismas notificaciones se envían también por e-mail. Inactivo: no se producen notificaciones en la app ni e-mails, independientemente de la configuración de correo.',
    'app_settings'      => 'Ajustes de la app',
    'app_name_label'    => 'Nombre de la app',
    'app_url'           => 'URL del servidor',
    'app_url_hint'      => 'URL base de esta instalación, ej. https://ejemplo.com – usado en enlaces de e-mail.',
    'privacy_url'       => 'Política de privacidad (URL)',
    'imprint_url'       => 'Aviso legal (URL)',
    'privacy_policy'    => 'Política de privacidad',
    'imprint'           => 'Aviso legal',
    'allow_registration'              => 'Permitir registro',
    'registration_domains'            => 'Dominios de e-mail permitidos',
    'registration_domains_placeholder'=> 'ejemplo.com, miempresa.com',
    'registration_domains_hint'       => 'Un dominio por línea o separados por comas. Dejar vacío para permitir todos.',

    // Register
    'register_title'          => 'Crear cuenta',
    'register_subtitle'       => 'Regístrese para una nueva cuenta',
    'register_btn'            => 'Crear cuenta',
    'register_link'           => 'Crear una nueva cuenta',
    'register_success'        => 'Cuenta creada. Por favor inicie sesión.',
    'register_username_short' => 'El nombre debe tener al menos 3 caracteres',
    'register_email_invalid'  => 'Dirección e-mail inválida',
    'register_password_short' => 'La contraseña debe tener al menos 8 caracteres',
    'register_duplicate'      => 'La dirección e-mail ya está en uso',
    'register_domain_not_allowed' => 'El registro no está permitido para este dominio de e-mail',

    // Email verification
    'verify_email_subject'  => 'Verifique su dirección e-mail',
    'verify_email_body'     => 'Verifique su dirección e-mail haciendo clic en el siguiente enlace:',
    'verify_email_expires'  => 'Este enlace es válido por 24 horas.',
    'verify_email_sent'     => 'Cuenta creada. Revise su bandeja de entrada y verifique su dirección e-mail.',
    'verify_email_required' => 'Verifique primero su dirección e-mail. Revise su bandeja de entrada.',
    'verify_token_invalid'  => 'Enlace de verificación inválido o caducado.',
    'verify_email_success'  => 'Dirección e-mail verificada. Ya puede iniciar sesión.',

    // Profile
    'my_profile'        => 'Mi perfil',
    'change_password'   => 'Cambiar contraseña',
    'current_password'  => 'Contraseña actual',
    'new_password'      => 'Nueva contraseña',
    'profile_updated'   => 'Perfil actualizado',
    'delete_account'         => 'Eliminar cuenta',
    'delete_account_hint'    => 'Esta acción es irreversible. Su cuenta y todos sus datos personales serán eliminados permanentemente.',
    'delete_account_confirm' => '¿Eliminar permanentemente su cuenta?',
    'account_deleted'        => 'La cuenta ha sido eliminada.',
    'password_changed'  => 'Contraseña cambiada',
    'password_wrong'    => 'La contraseña actual es incorrecta',
    'password_mismatch' => 'Las contraseñas no coinciden',

    // Notifications
    'mark_all_read'     => 'Marcar todo como leído',
    'no_notifications'  => 'Sin notificaciones',

    // TOTP / 2FA
    'totp_settings'       => 'Autenticación de dos factores',
    'totp_setup'          => 'Configurar 2FA',
    'totp_setup_desc'     => 'Proteja su cuenta con una contraseña de un solo uso (TOTP). Necesita una app de autenticación (ej. Google Authenticator, Aegis o Bitwarden).',
    'totp_active'         => 'Activo',
    'totp_inactive'       => 'Inactivo',
    'totp_active_desc'    => 'Su app de autenticación está activa como segundo factor. Introduzca un código actual para desactivarla. También puede habilitar la verificación por e-mail como segundo factor adicional.',
    'totp_scan_desc'      => 'Escanee el código QR con su app de autenticación y luego introduzca el código mostrado para confirmar.',
    'totp_manual_key'     => 'Clave manual',
    'totp_copy'           => 'Copiar',
    'totp_confirm_code'   => 'Código de confirmación',
    'totp_confirm_hint'   => 'Introduzca el código de 6 dígitos de su app de autenticación.',
    'totp_enable'         => 'Habilitar 2FA',
    'totp_enabled_ok'     => 'Autenticación de dos factores habilitada',
    'totp_disable'        => 'Deshabilitar 2FA',
    'totp_disable_hint'   => 'Introduzca un código actual de su app de autenticación.',
    'totp_disabled_ok'    => 'Autenticación de dos factores deshabilitada',
    'totp_invalid'        => 'Código inválido. Inténtelo de nuevo.',
    'totp_verify_title'   => 'Autenticación de dos factores',
    'totp_verify_subtitle'=> 'Introduzca el código de su app de autenticación.',
    'totp_verify_btn'     => 'Verificar',
    'totp_code'           => 'Código de autenticador',
    'totp_enforce'        => 'Forzar TOTP globalmente',
    'totp_enforce_hint'   => 'Todos los usuarios sin TOTP activo deberán configurarlo en su próximo inicio de sesión.',
    'mfa_enforce'         => 'Forzar MFA',
    'mfa_enforce_hint'    => 'Todos los usuarios deben autenticarse con app TOTP o código e-mail además de su contraseña.',
    'email_mfa_title'        => 'Verificación por e-mail',
    'email_mfa_desc'         => 'Se ha enviado un código de 6 dígitos a su dirección e-mail. Introdúzcalo abajo.',
    'email_mfa_code_label'   => 'Código de verificación',
    'email_mfa_submit'       => 'Verificar',
    'email_mfa_invalid'      => 'Código inválido o caducado.',
    'email_mfa_resend'       => 'Reenviar código',
    'email_mfa_resent'       => 'Se ha enviado un nuevo código a su dirección e-mail.',
    'mfa_resend_too_fast'    => 'Espere un momento antes de solicitar un nuevo código.',
    'mfa_attempts_exceeded'  => 'Demasiados intentos fallidos. Inicie sesión de nuevo.',
    'email_mfa_settings'     => 'Autenticación de dos factores por e-mail',
    'email_mfa_active'       => 'Activo',
    'email_mfa_inactive'     => 'Inactivo',
    'email_mfa_enable_btn'   => 'Habilitar 2FA por e-mail',
    'email_mfa_disable_btn'  => 'Deshabilitar 2FA por e-mail',
    'email_mfa_enable_desc'  => 'Cuando está habilitado, recibirá un código de 6 dígitos por e-mail en cada inicio de sesión.',
    'email_mfa_disable_desc' => 'La autenticación de dos factores por e-mail está activa. Puede desactivarla aquí.',
    'email_mfa_enabled_ok'   => '2FA por e-mail habilitada.',
    'email_mfa_disabled_ok'  => '2FA por e-mail deshabilitada.',
    'email_mfa_mail_subject' => 'Su código de inicio de sesión',
    'email_mfa_mail_greeting'=> 'Hola,',
    'email_mfa_mail_body'    => 'Su código de verificación para el inicio de sesión es:',
    'email_mfa_mail_expiry'  => 'Este código es válido por 20 minutos.',
    'email_mfa_mail_warning' => 'Si no solicitó este código, ignore este e-mail.',
    'mfa_setup_title'        => 'Asegure su cuenta',
    'mfa_setup_desc'         => 'Su administrador requiere autenticación de dos factores. Elija un método.',
    'mfa_setup_email_title'  => 'Código por e-mail',
    'mfa_setup_email_desc'   => 'Reciba un código de un solo uso por e-mail en cada inicio de sesión.',
    'mfa_setup_totp_title'   => 'App de autenticación',
    'mfa_setup_totp_desc'    => 'Use una app como Google Authenticator o Authy.',
    'mfa_setup_back_choice'  => 'Cambiar método',
    'mfa_choice_title'       => 'Confirmar inicio de sesión',
    'mfa_choice_desc'        => 'Tiene dos métodos habilitados. ¿Cómo desea verificar?',
    'mfa_choice_totp_title'  => 'App de autenticación',
    'mfa_choice_totp_desc'   => 'Introduzca el código de su app TOTP.',
    'mfa_choice_email_title' => 'Código por e-mail',
    'mfa_choice_email_desc'  => 'Reciba un código por e-mail.',
    'ext_mfa_title'          => 'Verifique su identidad',
    'ext_mfa_desc'           => 'Como ha estado inactivo un tiempo, hemos enviado un código de 6 dígitos a su dirección e-mail. Introdúzcalo abajo.',
    'ext_mfa_mail_greeting'  => 'Hola',
    'ext_mfa_mail_body'      => 'Su código de acceso para la vista de tareas externa es:',
    'ext_mfa_mail_subject'   => 'Su código de acceso',
    'ext_mfa_resent'         => 'Se ha enviado un nuevo código a su dirección e-mail.',
    'password_reset_enabled'      => 'Permitir restablecimiento de contraseña',
    'password_reset_enabled_hint' => 'Muestra un enlace "¿Olvidó su contraseña?" en la página de inicio de sesión. Requiere envío de correo configurado.',
    'password_reset_requires_mail' => '(Sin transporte de correo configurado — opción deshabilitada.)',
    'forgot_password'             => '¿Olvidó su contraseña?',
    'forgot_password_title'       => 'Restablecer contraseña',
    'forgot_password_subtitle'    => 'Introduzca su dirección e-mail y le enviaremos un enlace de restablecimiento.',
    'forgot_password_btn'         => 'Enviar enlace',
    'forgot_password_sent'        => 'Si existe una cuenta con ese e-mail, se ha enviado un enlace de restablecimiento.',
    'reset_password_title'        => 'Nueva contraseña',
    'reset_password_subtitle'     => 'Introduzca su nueva contraseña.',
    'reset_password_btn'          => 'Guardar contraseña',
    'reset_password_success'      => 'Contraseña cambiada exitosamente. Inicie sesión.',
    'reset_token_invalid'         => 'El enlace es inválido o ha caducado.',
    'back_to_login'               => 'Volver al inicio de sesión',
    'totp_enforce_wizard_title'    => 'Configuración de seguridad requerida',
    'totp_enforce_wizard_subtitle' => 'Su administrador requiere autenticación de dos factores. Configure TOTP ahora para continuar.',
    'totp_enforce_note'   => 'Esta configuración es obligatoria. Solo puede iniciar sesión tras la activación.',

    // Project notifications
    'project_notifications'        => 'Notificaciones por e-mail',
    'project_notifications_hint'   => 'Configure quién recibe notificaciones por e-mail para qué eventos. Requiere SMTP configurado.',
    'notif_assignee_section'       => 'Notificaciones a usuarios asignados',
    'notif_assignee_on_assign'     => 'Cuando se asigna una tarea',
    'notif_assignee_on_comment'    => 'Cuando se publica un comentario',
    'notif_assignee_on_change'     => 'Cuando se cambia fecha límite, prioridad o descripción',
    'notif_assignee_reminder'      => 'Recordatorio 3 días antes del vencimiento',
    'notif_assignee_on_due_day'    => 'Recordatorio en la fecha de vencimiento',
    'notif_assignee_on_unassign'   => 'Cuando se elimina de una tarea',
    'notif_assignee_on_attachment' => 'Cuando se sube un nuevo adjunto',
    'notif_assignee_predecessors'  => 'Cuando todas las tareas predecesoras están completadas',
    'notif_manager_section'        => 'Notificaciones a jefes de proyecto',
    'notif_manager_any_activity'   => 'En cualquier actividad del proyecto',
    'notif_manager_assignees_changed' => 'Cuando cambian los asignados de una tarea',
    'activity_assignees_changed'   => 'cambió los asignados',
    'notif_manager_task_done'      => 'Cuando se completa una tarea',
    'notif_manager_task_overdue'   => 'Cuando una tarea está vencida (+1 día)',
    'notif_manager_task_created'   => 'Cuando se crea una nueva tarea',

    // External participants
    'dummy_assignees'            => 'Marcadores de posición (sin notificación)',
    'external_participants'      => 'Participantes externos',
    'external_participants_hint' => 'Las personas externas reciben notificaciones por e-mail y pueden ver y actualizar sus tareas a través de un enlace personal.',
    'ext_name_placeholder'       => 'Nombre',
    'ext_email_placeholder'      => 'Dirección e-mail',
    'ext_portal_link'            => 'Enlace del portal',

    // AI
    'ai_settings'           => 'Integración IA',
    'ai_enabled'            => 'Habilitar IA globalmente',
    'ai_enabled_hint'       => 'Habilita el asistente IA para todos los proyectos.',
    'ai_provider'           => 'Proveedor',
    'ai_ollama_url'         => 'URL de Ollama',
    'ai_ollama_model'       => 'Modelo',
    'ai_claude_key'         => 'Clave API',
    'ai_claude_key_hint'    => 'Dejar vacío para mantener la clave existente.',
    'ai_claude_model'       => 'Modelo',
    'ai_assistant'          => 'Asistente IA',
    'ai_clear_history'      => 'Borrar historial',
    'ai_empty_hint'         => 'Hágame una pregunta o déjeme generar tareas para este proyecto.',
    'ai_examples'           => 'Ejemplos:',
    'ai_example_1'          => 'Genera todas las tareas necesarias para implementar un sistema de tickets',
    'ai_example_2'          => '¿Qué tareas faltan aún en el proyecto?',
    'ai_example_3'          => 'Crea un plan de proyecto estructurado con hitos',
    'ai_example_4'          => 'Hazme preguntas una por una sobre este proyecto para entregarme las tareas adecuadas',
    'ai_input_placeholder'  => 'Escriba un mensaje … (Enter para enviar, Shift+Enter para nueva línea)',
    'ai_generated_tasks'    => 'Tareas generadas',
    'ai_create_tasks'       => 'Crear tareas',

    // Activity
    'activity_task_created'  => 'creó tarea',
    'activity_task_updated'  => 'actualizó tarea',
    'activity_task_deleted'  => 'eliminó tarea',
    'activity_comment'       => 'comentó en',
    'activity_status_changed'=> 'cambió estado de',
    'activity_member_added'  => 'añadió miembro a',

    // Invitations
    'invite'                  => 'Invitar',
    'invite_title'            => 'Aceptar invitación',
    'invite_subtitle_pre'     => 'Ha sido invitado a unirse al grupo:',
    'invite_accept_btn'       => 'Aceptar invitación',
    'invite_sent'             => 'La invitación ha sido enviada por e-mail.',
    'invite_link_fallback'    => 'SMTP no configurado – enlace de invitación (por favor envíe manualmente):',
    'invite_email_subject'    => 'Ha sido invitado',
    'invite_email_body_intro' => 'le ha invitado a unirse al grupo:',
    'invite_email_expiry'     => 'Este enlace de invitación es válido por 7 días.',
    'invite_email_footer'     => 'Si el botón no funciona, copie este enlace:',
    'invite_email_exists'     => 'Esta dirección e-mail ya está registrada.',
    'invite_already_member'   => 'Ya es miembro de este grupo.',
    'invite_joined'           => 'Se ha unido al grupo exitosamente.',
    'invite_registered'       => 'Cuenta creada. Inicie sesión.',
    'invite_invalid_title'    => 'Invitación inválida',
    'invite_invalid_body'     => 'Este enlace de invitación ha caducado o ya ha sido usado.',
    'invite_pending'          => 'Invitaciones pendientes',
    'invite_revoke'           => 'Revocar',
    'invite_expires'          => 'Caduca',
    'username_min'            => 'El nombre debe tener al menos 3 caracteres',
    'password_min'            => 'La contraseña debe tener al menos 8 caracteres',
    'email_taken'             => 'Dirección e-mail ya en uso',
    'invalid_email'           => 'Dirección e-mail inválida',
    'admin_cannot_self_delete' => 'Las cuentas de administrador no se pueden eliminar desde el perfil. Pide a otro administrador que la elimine.',
    'current_password_label'   => 'Contraseña actual',

    // Email change with verification
    'email_change_pending'              => 'Cambio de correo solicitado. Enviamos un enlace de confirmación a la nueva dirección. El cambio solo se aplicará después de hacer clic en el enlace.',
    'email_change_pending_hint'         => 'Cambio a :email pendiente de confirmación.',
    'email_change_token_invalid'        => 'Enlace de confirmación no válido o expirado.',
    'email_change_success'              => 'Dirección de correo cambiada correctamente.',
    'mail_email_change_verify_subject'  => 'Confirmar dirección de correo',
    'mail_email_change_verify_greeting' => 'Hola :name,',
    'mail_email_change_verify_body'     => 'alguien solicitó cambiar la dirección de correo de tu cuenta de Plenvo a esta dirección. Haz clic en el botón para confirmar:',
    'mail_email_change_verify_button'   => 'Confirmar dirección',
    'mail_email_change_verify_expires'  => 'El enlace es válido durante 24 horas. Si no solicitaste el cambio, ignora este mensaje. El cambio no se aplicará sin confirmación.',
    'mail_email_change_notice_subject'  => 'Cambio de correo solicitado',
    'mail_email_change_notice_greeting' => 'Hola :name,',
    'mail_email_change_notice_body'     => 'se acaba de solicitar un cambio de la dirección de correo de tu cuenta a :email.',
    'mail_email_change_notice_warning'  => 'Si no fuiste tú, cambia tu contraseña inmediatamente y contacta con el administrador. El cambio no se aplicará hasta que se confirme desde la nueva dirección.',

    // Password change session invalidation + notify
    'session_invalidated_password_changed' => 'Sesión finalizada porque se cambió la contraseña. Vuelve a iniciar sesión.',
    'mail_pw_changed_subject'   => 'Contraseña cambiada',
    'mail_pw_changed_greeting'  => 'Hola :name,',
    'mail_pw_changed_body'      => 'se acaba de cambiar la contraseña de tu cuenta. Por seguridad, se han cerrado todas las demás sesiones activas.',
    'mail_pw_changed_warning'   => 'Si no fuiste tú, establece una nueva contraseña de inmediato y contacta con el administrador.',

    // Trust X-Forwarded-For toggle
    'sec_trustproxy_title'  => 'Cabeceras de proxy inverso',
    'sec_trustproxy_desc'   => 'Activa esto solo si Plenvo se ejecuta detrás de un proxy inverso confiable (nginx, Traefik, …) que establece "X-Forwarded-For" de forma fiable. De lo contrario, los clientes pueden falsificar su IP, eludir los límites de velocidad y manipular el registro de seguridad.',
    'sec_trustproxy_enable' => 'Confiar en X-Forwarded-For del proxy inverso',

    // Landing page
    'landing_meta_title'         => 'Gestión de proyectos con Kanban, Gantt e IA',
    'landing_meta_desc'          => 'Plenvo es un software ligero de gestión de proyectos con tablero Kanban, diagrama Gantt, gestión de tareas y asistente IA. En la nube o self-hosted, compatible con GDPR.',
    'landing_meta_keywords'      => 'gestión de proyectos, software de gestión de proyectos, tablero kanban, diagrama gantt, gestión de tareas, colaboración en equipo, planificación de proyectos IA, self-hosted, GDPR, open source',
    'landing_meta_og_title'      => 'Plenvo – Gestión de proyectos para equipos',
    'landing_meta_og_alt'        => 'Panel de Plenvo con tablero Kanban y diagrama Gantt',
    'landing_software_desc'      => 'Software web de gestión de proyectos con Kanban, Gantt, listas de tareas, asistente IA, uso compartido externo y opción de self-hosting.',
    'landing_breadcrumb_home'    => 'Inicio',
    'landing_breadcrumb_downloads' => 'Descargas',
    'landing_preview_eyebrow'    => 'Vista previa del producto',
    'landing_preview_title'      => 'Su proyecto – cada perspectiva',
    'landing_preview_sub'        => '',
    'landing_preview_tab_gantt'  => 'Diagrama Gantt',
    'landing_preview_tab_dashboard' => 'Panel',
    'landing_preview_tab_kanban' => 'Tablero Kanban',
    'landing_preview_tab_ai'      => 'Asistente IA',
    'landing_preview_tab_mytasks'  => 'Mis tareas',
    'landing_preview_tab_external' => 'Vista externa',
    'landing_badge'              => 'Gestión de proyectos moderna',
    'landing_hero_title_1'       => 'Planifique proyectos,',
    'landing_hero_title_2'       => 'lidere equipos.',
    'landing_hero_sub'           => 'Plenvo da a los jefes de proyecto la visión general que necesitan. Desde la primera tarea hasta el proyecto completado. Claro, estructurado, sin caos.',
    'landing_discover'           => 'Descubra más',
    'landing_pill_made_in_germany' => 'Made in Germany',
    'landing_pill_gdpr'            => 'Diseñado para el RGPD',
    'landing_pill_opensource'      => 'Código abierto',
    'landing_pill_selfhost_saas'   => 'Autoalojamiento o SaaS',
    'landing_diff_2_title'         => 'Todas las funciones para todos',
    'landing_diff_2_desc'          => 'Sin niveles Pro o Enterprise. Sin importar el tamaño del equipo.',
    'landing_diff_3_title'         => 'Asistente de IA incluido',
    'landing_diff_3_desc'          => 'Planifique tareas por chat. Localmente con Ollama o vía cloud.',
    'landing_stat_views'         => 'Vistas',
    'landing_stat_projects'      => 'Proyectos',
    'landing_stat_security'      => 'Seguridad',
    'landing_stat_ai'            => 'Asistente IA',
    'landing_pain_eyebrow'        => '¿Le suena?',
    'landing_pain_title'          => 'La gestión de proyectos sin la herramienta adecuada cuesta tiempo',
    'landing_pain_sub'            => 'Muchos equipos luchan con los mismos problemas cada día. Plenvo los resuelve.',
    'landing_combined_eyebrow'    => '¿Le suena?',
    'landing_combined_title'      => 'La solución adecuada para cada desafío',
    'landing_combined_sub'        => 'Así es como Plenvo convierte sus desafíos diarios en ventajas medibles.',
    'landing_combined_badge'      => 'Desafío',
    'landing_combined_extras'     => 'También incluido:',

    // ── Pro features section ─────────────────────────────────────────
    'landing_pro_eyebrow'             => 'Funciones pro',
    'landing_pro_title'               => 'Funciones que después de una semana le resultarán imprescindibles',
    'landing_pro_sub'                 => 'Las pequeñas funciones que no protagonizan ninguna demo, y que usará a diario.',
    'landing_pro_cat_speed'           => 'Velocidad',
    'landing_pro_cat_speed_sub'       => 'Menos clics. Más hecho.',
    'landing_pro_cat_clarity'         => 'Claridad',
    'landing_pro_cat_clarity_sub'     => 'Mantenga la visión sin tener que preguntar.',
    'landing_pro_cat_tools'           => 'Herramientas',
    'landing_pro_cat_tools_sub'       => 'Funciones pro que piensan con usted.',
    'landing_pro_cmdk_title'          => 'Paleta de comandos',
    'landing_pro_cmdk_desc'           => 'Acceda a cualquier tarea, proyecto o persona en menos de un segundo. Sin clics por menús.',
    'landing_pro_bulk_title'          => 'Edición masiva',
    'landing_pro_bulk_desc'           => 'Veinte tareas a la vez: estado, prioridad, asignaciones, fecha, etiquetas. Un clic en lugar de veinte.',
    'landing_pro_inline_title'        => 'Edición en línea',
    'landing_pro_inline_desc'         => 'Cambie estado, asignaciones y fecha directamente en la tabla. Sin modal, sin rodeos.',
    'landing_pro_managermail_title'   => 'Notificaciones de manager',
    'landing_pro_managermail_desc'    => 'Reciba solo lo importante: nuevas tareas, cambios de asignación, predecesoras completadas. Usted elige los disparadores.',
    'landing_pro_activity_title'      => 'Historial completo',
    'landing_pro_activity_desc'       => 'El registro de actividad documenta cada cambio. Quién hizo qué, cuándo. Nunca más vuelva a preguntar.',
    'landing_pro_multiowner_title'    => 'Varios responsables',
    'landing_pro_multiowner_desc'     => 'Varios propietarios y managers por proyecto. La suplencia está integrada en la herramienta, no en el calendario.',
    'landing_pro_autodeps_title'      => 'Enlace automático en Gantt',
    'landing_pro_autodeps_desc'       => 'Plenvo detecta dependencias automáticamente desde la planificación, incluidas pistas paralelas y fan-in / fan-out.',
    'landing_pro_dragdrop_title'      => 'Arrastrar y soltar en todas partes',
    'landing_pro_dragdrop_desc'       => 'Mueva barras en el Gantt, arrastre tarjetas en el Kanban. Fechas y estado se actualizan al instante.',
    'landing_pro_aichoice_title'      => 'IA a su elección',
    'landing_pro_aichoice_desc'       => 'Anthropic Claude, OpenAI, Azure u Ollama local. Sin atadura al proveedor en la inteligencia.',
    'landing_pro_extras_title'        => 'También a bordo',
    'landing_pro_extra_mentions'      => 'Menciones @ en comentarios',
    'landing_pro_extra_attach'        => 'Archivos adjuntos',
    'landing_pro_extra_custom_status' => 'Estados propios por proyecto',
    'landing_pro_extra_labels'        => 'Etiquetas',
    'landing_pro_extra_required'      => 'Campos obligatorios por proyecto',
    'landing_pro_extra_polls'         => 'Programación de reuniones',
    'landing_pro_extra_languages'     => '11 idiomas de la UI',
    'landing_pro_extra_themes'        => '10 temas',
    'landing_pro_extra_fido'          => 'WebAuthn / FIDO2',
    'landing_pro_extra_mfa'           => 'TOTP + MFA por correo',
    'landing_pro_extra_archive'       => 'Archivar y restaurar',
    'landing_pro_extra_deps'          => 'Dependencias entre tareas',

    // ── Scheduling polls highlight ───────────────────────────────────
    'landing_poll_bonus'         => 'Bonificación',
    'landing_poll_title'         => '¿Buscar fecha? Plenvo también lo organiza.',
    'landing_poll_sub'           => 'Una programación de reuniones completa viene incluida. Mismo idioma, mismo RGPD, misma interfaz: sin segunda herramienta.',
    'landing_poll_feat_link'     => 'Enlace público: participar sin cuenta.',
    'landing_poll_feat_live'     => 'Resultados en vivo con la fecha ganadora destacada automáticamente.',
    'landing_poll_feat_invite'   => 'Invitar por correo, internos y externos.',
    'landing_poll_feat_finalize' => 'Un clic para finalizar y correo a todos los participantes.',
    'landing_poll_mock_title'    => 'Kickoff Q1 2026',
    'landing_poll_mock_meta'     => '4 participantes · hasta el 12/04',
    'landing_poll_mock_count'    => '3 de 4 respondieron',
    'landing_poll_mock_cta'      => 'Fijar fecha',
    'landing_pain1_title'         => 'Sin visión general del estado del proyecto',
    'landing_pain1_desc'          => '¿Quién trabaja en qué? ¿Qué está abierto? ¿Qué está vencido?',
    'landing_pain1_solution'      => 'El panel de Plenvo muestra tareas abiertas, elementos vencidos y actividad del equipo. Todo de un vistazo, en tiempo real.',
    'landing_pain2_title'         => 'Los plazos se pierden',
    'landing_pain2_desc'          => 'Las dependencias entre tareas se pasan por alto, los plazos se pierden.',
    'landing_pain2_solution'      => 'La línea de tiempo Gantt hace visibles las dependencias. Detecte cuellos de botella antes de que se conviertan en problemas.',
    'landing_pain3_title'         => 'La comunicación del equipo va por e-mail',
    'landing_pain3_desc'          => 'Las actualizaciones de estado se pierden, las responsabilidades no están claras.',
    'landing_pain3_solution'      => 'Cada tarea tiene propietarios claros, comentarios y estado. Todo en un lugar, sin cadenas de e-mails.',
    'landing_pain4_title'         => 'Partners externos difíciles de involucrar',
    'landing_pain4_desc'          => 'Contratistas y clientes necesitan sus propias herramientas o acceso.',
    'landing_pain4_solution'      => 'Los externos obtienen un enlace personal a sus tareas. Sin cuenta, sin configuración.',
    'landing_pain5_title'         => 'Carga de trabajo del poco clara',
    'landing_pain5_desc'          => 'Las tareas se asignan dos veces o los miembros del equipo están sobrecargados sin darse cuenta.',
    'landing_pain5_solution'      => 'Asigne tareas deliberadamente y siempre tenga el control de quién ha asumido qué.',
    'landing_pain6_title'         => 'Las reuniones de estado desperdician tiempo valioso',
    'landing_pain6_desc'          => 'Las mismas preguntas cada semana: cuál es el estado, qué falta todavía?',
    'landing_pain6_solution'      => 'Con Plenvo todos tienen el estado actual a mano. Menos reuniones, más resultados.',
    'landing_features_eyebrow'   => 'Funciones',
    'landing_features_title'     => 'Todo lo que su equipo necesita',
    'landing_features_sub'       => 'Desde tareas individuales hasta planes de proyecto completos. Plenvo cubre cada paso de su flujo de trabajo.',
    'landing_feat_overview'      => 'Visión general completa',
    'landing_feat_overview_desc' => 'El panel muestra de un vistazo: tareas abiertas, vencimientos de hoy, elementos vencidos y la actividad de su equipo. Sin búsqueda.',
    'landing_feat_timeline'      => 'Línea temporal con Gantt',
    'landing_feat_timeline_desc' => 'Arrastre tareas directamente en la línea temporal. Vea al instante cuando una fecha límite está en riesgo y reaccione antes de que sea demasiado tarde.',
    'landing_feat_team'          => 'Responsabilidades claras',
    'landing_feat_team_desc'     => 'Cada tarea tiene uno o más propietarios. Los roles del proyecto (propietario, jefe, miembro) aseguran que todos sepan exactamente qué se espera.',
    'landing_feat_priority'      => 'Prioridades y plazos',
    'landing_feat_priority_desc' => 'Cuatro niveles de prioridad, fechas de vencimiento y recordatorios por e-mail aseguran que lo más importante se haga primero.',
    'landing_feat_kanban'        => 'Tablero Kanban',
    'landing_feat_kanban_desc'   => 'Visualice su flujo de trabajo con columnas flexibles, drag-and-drop y transiciones de estado configurables.',
    'landing_feat_gantt'         => 'Diagrama Gantt',
    'landing_feat_gantt_desc'    => 'Vea su línea temporal de un vistazo: arrastre y redimensione tareas directamente en el diagrama, con resaltado de fines de semana.',
    'landing_feat_tasks'         => 'Gestión de tareas',
    'landing_feat_tasks_desc'    => 'Prioridades, fechas de vencimiento, etiquetas, comentarios y adjuntos. Todo en un lugar.',
    'landing_feat_deps'          => 'Dependencias',
    'landing_feat_deps_desc'     => 'Defina predecesoras y sucesoras. Notificación automática cuando todas las predecesoras están completadas.',
    'landing_feat_groups'        => 'Multi-tenancy',
    'landing_feat_groups_desc'   => 'Organice usuarios en grupos y delegue administradores de grupo. Cada grupo trabaja en su propio entorno aislado.',
    'landing_feat_external'      => 'Acceso externo',
    'landing_feat_external_desc' => 'Comparta tareas con partners externos a través de enlace personal. Sin cuenta requerida, con permisos de acceso dirigidos.',
    'landing_feat_ai'            => 'Asistente IA',
    'landing_feat_ai_desc'       => 'Deje que las tareas se generen automáticamente. Soporta Ollama (local) y Claude API para configuración amigable con la privacidad.',
    'landing_feat_notif'         => 'Notificaciones por e-mail',
    'landing_feat_notif_desc'    => 'Asignación, fecha de vencimiento, predecesoras listas. Todos los eventos relevantes llegan automáticamente a la bandeja de entrada.',
    'landing_feat_files'         => 'Adjuntos de archivos',
    'landing_feat_files_desc'    => 'Adjunte documentos, imágenes y más directamente a las tareas. Almacenados de forma segura y siempre accesibles.',
    'landing_how_eyebrow'        => 'En 4 pasos',
    'landing_how_title'          => 'Comience inmediatamente',
    'landing_how_sub'            => 'Sin configuración larga. Plenvo está listo para usar en minutos.',
    'landing_step1_title'        => 'Iniciar sesión',
    'landing_step1_desc'         => 'Inicie sesión con su cuenta o acepte una invitación.',
    'landing_step2_title'        => 'Crear proyecto',
    'landing_step2_desc'         => 'Cree un proyecto, elija un color, establezca la vista por defecto.',
    'landing_step3_title'        => 'Invitar equipo',
    'landing_step3_desc'         => 'Invite miembros por e-mail o asigne usuarios existentes.',
    'landing_step4_title'        => 'Gestionar tareas',
    'landing_step4_desc'         => 'Cree, priorice y asigne tareas en vista Kanban, lista o Gantt.',
    'landing_views_eyebrow'      => 'Vistas',
    'landing_views_title'        => 'Cada perspectiva de su proyecto',
    'landing_views_sub'          => 'Cambie entre vistas en cualquier momento. Los datos siempre permanecen sincronizados.',
    'landing_view_kanban'         => 'Tablero Kanban',
    'landing_view_kanban_desc'    => 'Arrastre tareas a través de su flujo de trabajo',
    'landing_view_list'           => 'Vista de lista',
    'landing_view_list_desc'      => 'Filtre, ordene y vea todas las tareas de un vistazo',
    'landing_view_gantt'          => 'Diagrama Gantt',
    'landing_view_gantt_desc'     => 'Visualice su cronograma y detecte dependencias',
    'landing_view_dashboard'      => 'Panel',
    'landing_view_dashboard_desc' => 'Estado del proyecto, tareas abiertas y actividad del equipo',
    'landing_tag_dashboard'       => 'Panel',
    'landing_tag_gantt'           => 'Diagrama Gantt',
    'landing_tag_team'            => 'Gestión de equipo',
    'landing_tag_tasks'           => 'Tareas',
    'landing_tag_planning'        => 'Planificación',
    'landing_tag_collab'          => 'Colaboración',
    'landing_tag_notif'           => 'Notificaciones',
    'landing_tag_ai'              => 'Asistente IA',
    'landing_security_title'     => 'Seguridad por diseño',
    'landing_security_sub'       => 'Plenvo fue construido desde cero con la seguridad como prioridad.',
    'landing_sec_totp'           => 'Autenticación de dos factores',
    'landing_sec_totp_desc'      => 'TOTP vía app de autenticación, opcionalmente forzado globalmente',
    'landing_sec_csrf'           => 'Protección CSRF',
    'landing_sec_csrf_desc'      => 'Todos los formularios y endpoints API protegidos por tokens',
    'landing_sec_groups'         => 'Aislamiento de datos',
    'landing_sec_groups_desc'    => 'Los grupos están completamente aislados entre sí',
    'landing_sec_brute'          => 'Protección contra fuerza bruta',
    'landing_sec_brute_desc'     => 'Rate limiting en todos los intentos de inicio de sesión',
    'landing_sec_bcrypt'         => 'Contraseñas seguras',
    'landing_sec_bcrypt_desc'    => 'Hashing BCrypt, sin texto plano en la base de datos',
    'landing_sec_audit'          => 'Registro de actividad',
    'landing_sec_audit_desc'     => 'Todos los cambios son rastreables y registrados',
    'landing_no_account'         => '¿Aún sin cuenta?',

    // Landing mock UI
    'landing_mock_status_open'        => 'Abierto',
    'landing_mock_status_inprogress'  => 'En progreso',
    'landing_mock_status_review'      => 'Revisión',
    'landing_mock_status_done'        => 'Completado',
    'landing_mock_welcome'            => 'Bienvenido de nuevo, Max',
    'landing_mock_date'               => '23 de abril de 2026',
    'landing_mock_filter_open'        => 'Tareas abiertas',
    'landing_mock_task_req'           => 'Análisis de requisitos',
    'landing_mock_task_design'        => 'Concepto de diseño',
    'landing_mock_task_frontend'      => 'Desarrollo frontend',
    'landing_mock_task_backend'       => 'Backend API',
    'landing_mock_task_testing'       => 'Pruebas y QA',
    'landing_mock_task_content'       => 'Migración de contenido',
    'landing_mock_task_golive'        => 'Puesta en producción',
    'landing_mock_task_pushnotif'     => 'Notificaciones push',
    'landing_mock_task_appstore'      => 'Lanzamiento en App Store',
    'landing_mock_card_server'        => 'Planificar infraestructura de servidor',
    'landing_mock_card_seo'           => 'Realizar análisis SEO',
    'landing_mock_card_privacy'       => 'Revisar política de privacidad',
    'landing_mock_card_backenddev'    => 'Desarrollar Backend API',
    'landing_mock_card_designfinal'   => 'Finalizar concepto de diseño',
    'landing_mock_card_kickoff'       => 'Reunión de inicio',
    'landing_mock_ai_user_msg'        => '¿Puedes crear todas las tareas necesarias para el proyecto Relanzamiento Web 2026 – con fechas de inicio y fin realistas y enlaces predecesor/sucesor?',
    'landing_mock_ai_intro'           => '¡Por supuesto! Aquí están',
    'landing_mock_ai_for'             => 'para',
    'landing_mock_ai_timeline'        => 'con línea temporal y todas las dependencias:',
    'landing_mock_ai_dep_after'       => '→ después de',
    'landing_mock_ai_confirm'         => 'Todas las dependencias están enlazadas. ¿Creo las tareas directamente?',
    'landing_mock_ai_cta_text'        => '7 tareas generadas &amp; enlazadas',
    'landing_mock_ai_create'          => 'Crear tareas',
    'landing_mock_ext_open'           => 'Abrir tarea',
    'landing_mock_ext_task1_title'    => 'Migración de contenido',
    'landing_mock_ext_task1_desc'     => 'Transferir todo el contenido del sistema antiguo, estructurarlo y prepararlo para el nuevo sitio web.',
    'landing_mock_ext_task2_title'    => 'Preparación para puesta en producción',
    'landing_mock_ext_task2_desc'     => 'Aprobación final de todas las páginas, verificar redirecciones de URL y dar luz verde para el lanzamiento.',
    'landing_mock_ext_task3_title'    => 'Aprobación y feedback',
    'landing_mock_ext_task3_desc'     => 'Dé aprobación final para todo el relanzamiento y deje comentarios escritos sobre la implementación.',

    // Landing FAQs
    'landing_faq_title'  => 'Preguntas frecuentes',
    'landing_faq_sub'    => 'Respuestas a las preguntas más importantes sobre Plenvo.',
    'landing_faq_help'   => 'Encuentre más detalles en el <a href="/help" style="color:#4f46e5;font-weight:600">manual de usuario</a>.',
    'landing_faq_1_q'    => '¿Necesito una cuenta para ver las tareas?',
    'landing_faq_1_a'    => 'No necesariamente. Como participante externo recibe un enlace de acceso personal por e-mail. Usando este enlace puede ver sus tareas asignadas, actualizar su estado y dejar comentarios – sin cuenta.',
    'landing_faq_2_q'    => '¿Cómo invito a alguien a un proyecto?',
    'landing_faq_2_a'    => 'Los jefes de proyecto pueden añadir usuarios internos o invitar participantes externos por e-mail en <em>Miembros</em>. Los externos reciben un enlace de acceso único. Los administradores de grupo pueden añadir usuarios al grupo vía enlace de invitación.',
    'landing_faq_3_q'    => '¿Cuál es la diferencia entre Kanban, Lista y Gantt?',
    'landing_faq_3_a'    => 'El <strong>tablero Kanban</strong> muestra tareas como tarjetas que mueve entre columnas de estado vía drag &amp; drop. La <strong>vista de lista</strong> es ideal para filtrar y ordenar. El <strong>diagrama Gantt</strong> visualiza tareas en una línea temporal, muestra dependencias como líneas conectoras y puede editarse vía drag &amp; drop. Con el botón <em>Auto-enlazar</em>, Plenvo detecta automáticamente qué tareas se siguen en el tiempo y crea las dependencias apropiadas.',
    'landing_faq_4_q'    => '¿Qué pasa cuando marco una tarea como "completada"?',
    'landing_faq_4_a'    => 'La tarea pasa al estado completado. Dependiendo de la configuración del proyecto, el jefe de proyecto y/o los asignados de tareas sucesoras dependientes reciben una notificación por e-mail.',
    'landing_faq_5_q'    => '¿Qué son las tareas predecesoras?',
    'landing_faq_5_a'    => 'Las predecesoras son tareas que deben completarse primero antes de que otra tarea pueda trabajarse significativamente. En el diagrama Gantt estas dependencias se muestran como líneas conectoras. Con la función <em>Auto-enlazar</em> en el diagrama Gantt, todas las dependencias pueden derivarse automáticamente del cronograma — incluso con múltiples tareas ejecutándose en paralelo. Cuando se completa una predecesora, opcionalmente se puede enviar una notificación al asignado de la tarea siguiente.',
    'landing_faq_6_q'    => '¿Cómo aseguro mi cuenta con 2FA?',
    'landing_faq_6_a'    => 'En <em>Ajustes → Seguridad</em> puede activar una app de autenticación (TOTP) o verificación por e-mail. Ambos métodos pueden usarse simultáneamente. Si su administrador impone MFA, se le pedirá automáticamente que lo configure en su próximo inicio de sesión.',
    'landing_faq_7_q'    => '¿Quién puede crear un proyecto?',
    'landing_faq_7_a'    => 'Cualquier usuario conectado puede crear un nuevo proyecto. Quien crea un proyecto se convierte automáticamente en su propietario y tiene control total sobre miembros, tareas y ajustes.',
    'landing_faq_8_q'    => '¿Puedo pertenecer a múltiples proyectos?',
    'landing_faq_8_a'    => 'Sí. Puede ser miembro de cualquier número de proyectos, cada uno con su propio rol (propietario, jefe, miembro o invitado). Puede ver sus tareas de todos los proyectos recopiladas en "Mis tareas".',
    'landing_faq_9_q'    => '¿Se puede desactivar la función de IA?',
    'landing_faq_9_a'    => 'Sí. Los administradores de grupo pueden habilitar o deshabilitar individualmente el acceso a IA para su grupo. Esto permite usar la IA solo donde se desea.',
    'landing_faq_10_q'   => '¿A qué datos puede acceder la IA?',
    'landing_faq_10_a'   => 'La IA recibe automáticamente el nombre del proyecto y – si está disponible – la descripción del proyecto, así como los mensajes que introduce en el chat. Tareas, miembros del equipo u otros datos del proyecto no se transmiten automáticamente. Usted decide qué información adicional compartir con la IA.',

    // Hosting options section
    'landing_hosting_eyebrow'        => 'Dos caminos, un producto',
    'landing_hosting_title'          => 'Alojado o auto-gestionado — su elección',
    'landing_hosting_subtitle'       => 'Plenvo se adapta a su infraestructura. Comience inmediatamente en la nube o instale el software en su propio servidor.',
    'landing_hosting_saas_badge'     => 'Software as a Service',
    'landing_hosting_saas_title'     => 'Completamente alojado',
    'landing_hosting_saas_desc'      => 'Sin servidor, sin mantenimiento. Operaciones, actualizaciones y disponibilidad incluidas. Simplemente regístrese y comience.',
    'landing_hosting_saas_1'         => 'Listo para usar inmediatamente, sin configuración',
    'landing_hosting_saas_2'         => 'Actualizaciones automáticas a nuevas versiones',
    'landing_hosting_saas_3'         => 'Operaciones y mantenimiento incluidos',
    'landing_hosting_saas_cta'       => 'Registrarse ahora',
    'landing_hosting_self_badge'     => 'Self-Hosted',
    'landing_hosting_self_title'     => 'En su propio servidor',
    'landing_hosting_self_desc'      => 'Control total sobre sus datos. Instale Plenvo en su propia infraestructura — gratis y sin dependencias.',
    'landing_hosting_self_1'         => 'Sus datos permanecen en su servidor',
    'landing_hosting_self_2'         => 'Gratis para descargar e instalar',

    // Downloads page
    'dl_hero_sub'      => 'Versión estable &ndash; self-hosted, sin dependencias, sin lock-in de nube.',
    'dl_download_btn'  => 'Descargar plenvo-latest.zip',
    'dl_req_title'              => 'Requisitos del sistema',
    'dl_req_php'                => 'PHP 8.1 o más reciente',
    'dl_req_sqlite'             => 'SQLite (incluido en PHP)',
    'dl_req_webserver'          => 'Apache, nginx o servidor web similar',
    'dl_quickstart_title'       => 'Listo en 3 pasos',
    'dl_quickstart_step1_title' => 'Descomprimir el ZIP',
    'dl_quickstart_step1_desc'  => 'Descargue el archivo y descomprímalo localmente.',
    'dl_quickstart_step2_title' => 'Copiar al servidor',
    'dl_quickstart_step2_desc'  => 'Suba la carpeta extraída por FTP/SSH al directorio web de su host PHP.',
    'dl_quickstart_step3_title' => 'Abrir index.php',
    'dl_quickstart_step3_desc'  => 'Abra la URL instalada en el navegador. La instalación lo guiará por la configuración inicial.',
    'dl_sha_copy'               => 'Copiar',
    'dl_sha_copied'             => '¡Copiado!',
    'dl_sha_verify_hint'        => 'Puede verificar la integridad con `sha256sum plenvo-latest.zip`.',
    'dl_changelog_jump'         => 'Saltar a:',
    'dl_readme_hint'   => 'Contiene requisitos, instrucciones de instalación, privacidad e información de licencia:',
    'dl_readme_open'   => 'Abrir README',
    'dl_changelog_eyebrow' => 'Notas de versión',
    'dl_meta_title'    => 'Descarga de Plenvo – Software de gestión de proyectos self-hosted',
    'dl_meta_desc'     => 'Descargue Plenvo gratis. Software de gestión de proyectos self-hosted con Kanban, Gantt, asistente IA y auto-actualizador integrado. Funciona con PHP y SQLite, sin dependencias externas.',
    'dl_meta_keywords' => 'descarga Plenvo, descarga software gestión proyectos, self-hosted, software kanban, software gantt, gestión proyectos open source',
    'landing_hosting_self_3'         => 'Auto-actualizador integrado para actualizaciones fáciles',
    'landing_hosting_self_cta'       => 'Descargar',
    // Contact form (landing page)
    // WebAuthn / Security Keys
    'webauthn_settings'         => 'Claves de seguridad (YubiKey / FIDO2)',
    'webauthn_desc'             => 'Inicie sesión con una clave de seguridad física (ej. YubiKey) — sin contraseña. La clave debe registrarse primero aquí.',
    'webauthn_add_key'          => 'Registrar clave',
    'webauthn_key_name'         => 'Nombre',
    'webauthn_key_name_ph'      => 'ej. YubiKey 5',
    'webauthn_default_key_name' => 'Clave de seguridad',
    'webauthn_registered_count' => 'registrada',
    'webauthn_registered_on'    => 'Registrada',
    'webauthn_last_used'        => 'Último uso',
    'webauthn_touch_key'        => 'Toque su clave o introduzca PIN …',
    'webauthn_register_success' => 'Clave de seguridad registrada exitosamente.',
    'webauthn_register_error'   => 'Registro fallido. Inténtelo de nuevo.',
    'webauthn_login_btn'        => 'Iniciar sesión con clave de seguridad',
    'webauthn_login_success'    => 'Autenticación exitosa.',
    'webauthn_cancelled'        => 'Cancelado.',

    'contact_nav'               => 'Contacto',
    'contact_eyebrow'           => 'Contacto',
    'contact_title'             => 'Ponerse en contacto',
    'contact_subtitle'          => '¿Encontró un error, tiene una idea de función o simplemente quiere compartir feedback? Todo mensaje es bienvenido.',
    'contact_name'              => 'Nombre',
    'contact_category'          => 'Categoría',
    'contact_category_ph'       => 'Seleccione ...',
    'contact_cat_bug'           => 'Reportar error',
    'contact_cat_feature'       => 'Solicitar función',
    'contact_cat_praise'        => 'Elogio',
    'contact_cat_critique'      => 'Crítica',
    'contact_cat_question'      => 'Pregunta general',
    'contact_cat_other'         => 'Otro',
    'contact_message'           => 'Mensaje',
    'contact_max_chars'         => 'máx. 5.000 caracteres',
    'contact_submit'            => 'Enviar mensaje',
    'contact_success'           => '¡Mensaje enviado! Una respuesta seguirá tan pronto como sea posible.',
    'contact_error_generic'     => 'Ocurrió un error.',
    'contact_error_network'     => 'Error de conexión. Inténtelo más tarde.',
    'contact_err_not_configured'=> 'El formulario de contacto no está configurado en este servidor.',
    'contact_err_invalid'       => 'Solicitud inválida.',
    'contact_err_too_fast'      => 'Espere un momento e inténtelo de nuevo.',
    'contact_err_rate_limit'    => 'Espere antes de enviar otro mensaje.',
    'contact_err_name'          => 'Introduzca un nombre válido (máx. 100 caracteres).',
    'contact_err_email'         => 'Introduzca una dirección e-mail válida.',
    'contact_err_category'      => 'Seleccione una categoría.',
    'contact_err_message'       => 'El mensaje debe tener entre 10 y 5.000 caracteres.',
    'contact_err_send'          => 'No se pudo enviar el e-mail. Inténtelo más tarde.',

    'landing_license_title'          => 'Open Source – AGPL v3',
    'landing_license_body'           => 'Plenvo se publica bajo la <strong>GNU Affero General Public License v3</strong>. El software puede usarse, operarse e inspeccionarse gratis. La redistribución o modificación del código fuente solo está permitida bajo los mismos términos de licencia. Las instalaciones deben mantener visiblemente el aviso "Powered by Plenvo" con enlace a <a href="https://plenvo.gp-server.com" target="_blank" rel="noopener" style="color:#4f46e5;text-decoration:none;font-weight:600">plenvo.gp-server.com</a>.',

    // Layout / Navigation
    'delete_all'                  => 'Eliminar todo',
    'pending_count'               => 'pendiente',

    // Preferences page
    'preferred_project_view'      => 'Vista de proyecto preferida',
    'preferred_view_hint'         => 'Esta vista se selecciona automáticamente cuando crea un nuevo proyecto.',
    'request_group_creation_hint' => 'Puede solicitar permiso al administrador para crear sus propios grupos.',
    'group_creation'              => 'Crear grupo',
    'permission_active'           => 'Permiso activo',
    'permission_active_desc'      => 'Puede crear sus propios grupos.',
    'request_pending_status'      => 'Solicitud pendiente',
    'request_pending_desc'        => 'Su solicitud está siendo revisada por el administrador.',
    'request_denied_status'       => 'Denegado',
    'request_denied_desc'         => 'Su última solicitud fue denegada.',
    'request_again'               => 'Solicitar de nuevo',
    'permission_revoked_status'   => 'Permiso revocado',
    'permission_revoked_desc'     => 'Su permiso fue revocado por el administrador.',
    'request_access'              => 'Solicitar acceso',

    // Group requests (admin)
    'group_requests_title'        => 'Solicitudes de grupo',
    'group_creation_requests'     => 'Solicitudes de creación de grupo',
    'no_requests'                 => 'Sin solicitudes aún.',
    'status_label'                => 'Estado',
    'date_label'                  => 'Fecha',
    'pending_status'              => 'Pendiente',
    'approved_status'             => 'Aprobado',
    'revoked_status'              => 'Revocado',
    'denied_status'               => 'Denegado',
    'approve'                     => 'Aprobar',
    'deny'                        => 'Denegar',
    'confirm_deny'                => '¿Denegar solicitud?',
    'revoke_permission'           => 'Revocar permiso',
    'confirm_revoke_permission'   => '¿Revocar permiso?',
    'approve_again'               => 'Aprobar de nuevo',
    'grant_permission_direct'     => 'Otorgar permiso directamente',
    'grant_permission'            => 'Otorgar permiso',

    // Plugins (admin)
    'installed_plugins'           => 'Plugins instalados',
    'no_plugins'                  => 'Sin plugins instalados.',
    'plugin_version'              => 'Versión',
    'plugin_active'               => 'Activo',
    'plugin_disabled'             => 'Deshabilitado',
    'plugin_deactivate'           => 'Desactivar',
    'plugin_activate'             => 'Activar',
    'plugin_delete_confirm'       => '¿Eliminar realmente el plugin?',
    'plugin_upload_title'         => 'Subir plugin',
    'plugin_upload_label'         => 'Archivo ZIP (máx. 5 MB)',
    'plugin_upload_btn'           => 'Subir e instalar',
    'plugin_structure_title'      => 'Estructura del plugin',
    'plugin_upload_hint'          => 'Suba un plugin como archivo <strong>.zip</strong>. El ZIP debe contener <code>plugin.json</code> con los campos <code>id</code>, <code>name</code> y <code>class</code>.',
    'plugin_structure_hint'       => '<code>plugin.json</code> mínimo:',
    'plugin_class_hint'           => 'La clase debe tener un método <code>register()</code> y ubicarse como <code>ClassName.php</code> en el mismo directorio.',

    // Users (admin)
    'pw_reset_short'              => 'Restablecer PW',
    'reset_btn'                   => 'Restablecer',

    // Group admin
    'new_group'                   => 'Nuevo grupo',
    'new_group_title'             => 'Crear nuevo grupo',
    'no_group_yet'                => 'Aún no tiene grupo. Cree su primer grupo ahora.',
    'group_name_label'            => 'Nombre del grupo',
    'group_name_placeholder'      => 'ej. Marketing, Desarrollo…',
    'group_desc_placeholder'      => 'Breve descripción del grupo…',
    'group_admin_auto'            => 'Será añadido automáticamente como administrador del grupo.',
    'create_btn'                  => 'Crear',
    'ai_blocked_label'            => 'IA bloqueada',
    'ai_active_label'             => 'IA activa',
    'ai_block_confirm'            => '¿Bloquear IA para todos los miembros de este grupo?',
    'ai_blocked_title'            => 'La IA está bloqueada – clic para habilitar',
    'ai_active_title'             => 'La IA está activa – clic para bloquear',
    'delete_group'                => 'Eliminar grupo',
    'delete_group_confirm'        => '¿Eliminar realmente el grupo? Esta acción no se puede deshacer.',
    'me_badge'                    => 'Yo',
    'reset_password_btn'          => 'Restablecer',
    'no_permission_hint'          => 'Sin permiso – solicite en ajustes',

    // Notifications
    'open_btn'                    => 'Abrir',

    // Invite accept
    'invite_wrong_user'           => 'Esta invitación fue enviada a otra dirección e-mail y no puede aceptarse con su cuenta.',
    'invite_to_dashboard'         => 'Ir al panel',
    'invite_login_required'       => 'Inicie sesión con esta cuenta para unirse al grupo.',
    'invite_login_btn'            => 'Iniciar sesión y aceptar invitación',
    'invite_join_text'            => 'Ha sido invitado a unirse al grupo.',
    'invite_join_btn'             => 'Aceptar invitación',

    // Gantt
    'manual'                      => 'Manual',

    // Admin settings
    'smtp_external_badge'         => 'SMTP externo – sin servidor de correo local',
    'smtp_info_text'              => 'El sistema usa <strong>exclusivamente</strong> el servidor SMTP configurado. El envío de correo local (sendmail/mail) está deshabilitado.',
    'keep_password_hint'          => 'Dejar vacío para mantener la contraseña actual',
    'mail_settings'               => 'Ajustes de correo',
    'mail_provider'               => 'Proveedor de correo',
    'mail_provider_smtp'          => 'SMTP',
    'mail_provider_microsoft'     => 'Microsoft 365 (OAuth)',
    'mail_provider_local'         => 'Correo local (sendmail)',
    'local_mail_info_text'        => 'Los e-mails se envían vía la configuración de correo local del servidor (PHP mail() / sendmail). No se requiere servidor de correo externo. La dirección y nombre del remitente pueden configurarse opcionalmente.',
    'ms_tenant_id'                => 'Tenant ID',
    'ms_client_id'                => 'Client ID',
    'ms_client_secret'            => 'Client Secret',
    'ms_from_email'               => 'E-mail remitente',
    'ms_info_text'                => 'Envío de e-mail vía Microsoft Graph API (OAuth 2.0 client credentials). Cree un registro de app en Azure, otorgue el permiso de aplicación Mail.Send e introduzca Tenant ID, Client ID y Client Secret.',
    'ms_test_ok'                  => 'Conexión Microsoft exitosa – autenticación OK',
    'ms_test_fail'                => 'Conexión Microsoft fallida – verifique credenciales',
    'ms_missing_fields'           => 'Tenant ID, Client ID y Client Secret son requeridos',
    'ollama_url_hint'             => 'Local o remoto, ej. https://mi-servidor.com',
    'ai_rate_limited'             => 'Demasiados mensajes. Espere una hora antes de enviar más.',
    'ai_authentication'           => 'Autenticación',
    'auth_none_label'             => 'Ninguna (instalación local)',
    'bearer_token_hint'           => 'Para ollama.com: clave API desde ajustes de cuenta',
    'openai_key_hint'             => 'Clave API de OpenAI desde platform.openai.com',
    'model_label'                 => 'Modelo',
    'azure_endpoint_label'        => 'Azure Endpoint',
    'azure_endpoint_hint'         => 'La URL base de su recurso Azure OpenAI',
    'deployment_label'            => 'Deployment',
    'api_version_label'           => 'Versión API',
    'api_key_label'               => 'Clave API',
    'azure_key_hint'              => 'Encontrado en Azure Portal → su recurso OpenAI → Keys and Endpoint',
    'load_models'                 => 'Cargar modelos',
    'stored_placeholder'          => '(guardado)',
    'password_min'                => 'Contraseña min. 8 caracteres',
    'new_password_min'            => 'Nueva contraseña min. 8 caracteres',
    'password_reset_success'      => 'Contraseña restablecida',
    'request_approved'            => 'Solicitud aprobada.',
    'request_denied'              => 'Solicitud denegada.',
    'notif_group_approved_title'  => 'Solicitud de grupo aprobada',
    'notif_group_approved_msg'    => 'Su solicitud para crear grupos ha sido aprobada.',
    'notif_group_denied_title'    => 'Solicitud de grupo denegada',
    'notif_group_denied_msg'      => 'Su solicitud para crear grupos fue lamentablemente denegada.',
    'status_updated'              => 'Estado actualizado',
    'comment_saved'               => 'Comentario guardado.',
    'invalid_request'             => 'Solicitud inválida.',
    'plugin_deleted'              => 'Plugin eliminado.',
    'plugin_uploaded'             => 'Plugin subido e instalado.',
    'plugin_delete_error'         => 'El plugin no pudo eliminarse.',
    'plugin_lock_active_hint'     => 'Este plugin está permanentemente activo. Desactivarlo eliminaría el aislamiento de datos que garantiza y causaría un incidente de privacidad.',
    'plugin_lock_active_error'    => 'Este plugin no puede desactivarse ni eliminarse porque garantiza aislamiento de datos permanente.',
    'zip_only'                    => 'Solo archivos ZIP permitidos.',
    'zip_not_supported'           => 'Soporte ZIP no disponible.',
    'zip_not_openable'            => 'El ZIP no pudo abrirse.',
    'upload_failed'               => 'Subida fallida.',
    'file_too_large'              => 'Archivo demasiado grande (máx. 5 MB).',
    'zip_path_traversal'          => 'ZIP inválido (path traversal detectado).',
    'zip_no_manifest'             => 'No se encontró plugin.json en el ZIP.',
    'invalid_plugin_json'         => 'plugin.json inválido (id y class son obligatorios).',
    'invalid_plugin_id'           => 'ID de plugin inválido (solo letras, números, - y _).',
    'name_required'               => 'El nombre es obligatorio',
    'group_name_required'         => 'El nombre del grupo es obligatorio.',
    'group_created_success'       => 'El grupo fue creado exitosamente.',
    'group_invite_notif_title'    => 'Invitación a grupo',
    'title_required'              => 'El título es obligatorio',
    'description_required'        => 'La descripción es obligatoria',
    'due_date_required'           => 'La fecha de vencimiento es obligatoria',
    'image_only'                  => 'Solo imágenes permitidas (jpg, png, gif, webp)',
    'image_too_large'             => 'Imagen máx. 2MB',
    'avatar_updated'              => 'Avatar actualizado',
    'new_group_request_title'     => 'Nueva solicitud de grupo',
    'new_group_request_msg'       => '%s solicita permiso para crear grupos.',
    'group_request_sent'          => 'Su solicitud ha sido enviada y será revisada por el administrador.',
    'invite_not_found'            => 'Invitación no encontrada o caducada',
    'invite_wrong_account'        => 'Esta invitación no aplica a su cuenta',
    'invite_join_error'           => 'Error al unirse al grupo',
    'group_invite_notif_msg'      => '%s le ha invitado al grupo "%s".',
    'model_load_unknown_provider' => 'Proveedor desconocido.',
    'model_load_failed'           => 'Conexión fallida – verifique credenciales.',
    'project_create_error'        => 'Error al crear proyecto',
    'status_open'                 => 'Abierto',
    'status_in_progress'          => 'En progreso',
    'status_review'               => 'Revisión',
    'status_done'                 => 'Completado',
    'project_label'               => 'Proyecto',
    'gantt_weeks'                 => 'Semanas',
    'gantt_months'                => 'Meses',
    'gantt_auto_deps'             => 'Auto-enlazar',
    'gantt_auto_deps_title'       => 'Crear dependencias automáticamente desde el cronograma',
    'gantt_clear_deps'            => 'Borrar enlaces',
    'gantt_clear_deps_title'      => 'Eliminar todas las dependencias en este proyecto',
    'gantt_confirm_clear_deps'    => '¿Eliminar todos los enlaces en este proyecto?',
    'gantt_clear_dates'           => 'Borrar fechas',
    'gantt_clear_dates_title'     => 'Eliminar todas las fechas de inicio y fin de las tareas',
    'gantt_confirm_clear_dates'   => '¿Eliminar todas las fechas de inicio y fin de todas las tareas?',

    'powered_by_plenvo'   => 'Powered by Plenvo',

    // Auto-updater
    'update_nav'               => 'Actualizaciones',
    'update_title'             => 'Actualización del sistema',
    'update_status'            => 'Estado de actualización',
    'update_installed_version' => 'Versión instalada',
    'update_available_version' => 'Versión disponible',
    'update_new'               => 'Nueva versión disponible',
    'update_latest'            => 'Actualizado',
    'update_preview'           => 'Versión preliminar',
    'update_check_failed'      => 'Comprobación fallida – servidor no disponible',
    'update_changelog'         => 'Cambios',
    'update_force_check'       => 'Comprobar de nuevo',
    'update_now'               => 'Actualizar a :version',
    'update_confirm'           => '¿Actualizar ahora a la nueva versión? Haga backup de la carpeta data/ primero.',
    'update_already_latest'    => 'Ya está actualizado.',
    'update_success'           => '¡Actualización exitosa! Las migraciones de base de datos se ejecutarán en la próxima carga de página.',
    'update_progress_title'    => 'Realizando actualización',
    'update_progress_starting' => 'Iniciando actualización…',
    'update_redirect_in'       => 'Redirigiendo en',
    'update_unknown_error'     => 'Error desconocido',
    'update_hints_title'       => 'Notas',
    'update_hint_backup'       => '⚠ Siempre haga backup de su carpeta data/ antes de actualizar (base de datos, subidas, avatares).',
    'update_hint_data'         => '✓ Sus datos en data/ nunca se sobrescriben durante una actualización.',
    'update_hint_migrations'   => '✓ Las migraciones de base de datos se ejecutan automáticamente en la próxima carga de página.',
    'updates_enabled'          => 'Comprobación automática de actualizaciones habilitada',
    'updates_enabled_hint'     => 'Deshabilitar esto previene todas las conexiones salientes a plenvo.gp-server.com.',
    'updates_disabled_label'   => 'Comprobación de actualizaciones deshabilitada',

    // System info
    'system_info'         => 'Actualización de software',
    'changelog_since'     => 'Cambios en esta versión',
    'view_changelog'      => 'Ver changelog',
    'app_version_label'   => 'Versión instalada',

    // External views
    'overview'                    => 'Resumen',
    'send'                        => 'Enviar',
    'change_status'               => 'Cambiar estado',
    'no_tasks_assigned'           => 'Sin tareas asignadas.',
    'ext_badge'                   => 'Ext.',
    'ext_comment_placeholder'     => 'Escriba un comentario… – @ para mencionar',
    'due_label'                   => 'Vence',
    'comment_empty_error'         => 'El comentario no puede estar vacío.',
    'comment_too_long'            => 'Comentario demasiado largo (máx. 5000 caracteres).',
    'ext_assign_greeting' => 'Hola :name,',
    'ext_assign_intro' => 'Se le ha asignado la tarea :task en el proyecto :project.',
    'ext_assign_link' => 'Ver tareas →',
    'ext_assign_footer' => 'Este enlace es personal y le da acceso a sus tareas en este proyecto.',
    'ext_assign_subject' => 'Tarea asignada – :task',
    'app_default_language_label' => 'Idioma predeterminado del sistema',
    'app_default_language_hint' => 'Se utiliza cuando ni el idioma del navegador ni la configuración personal del usuario coinciden con un idioma compatible.',
    'domain_lang_title' => 'Asignación de idioma por dominio',
    'domain_lang_desc' => 'Los destinatarios externos reciben correos en el idioma asignado al dominio de su correo electrónico.',
    'domain_lang_col_domain' => 'Dominio',
    'domain_lang_col_language' => 'Idioma',
    'domain_lang_add_btn' => 'Guardar asignación',
    'domain_lang_empty' => 'Aún no hay asignaciones de dominio.',
    'domain_lang_invalid_domain' => 'Dominio no válido.',
    'domain_lang_invalid_language' => 'Idioma no válido.',
    'domain_lang_saved' => 'Asignación de dominio guardada.',
    'domain_lang_save_failed' => 'No se pudo guardar la asignación de dominio.',
    'domain_lang_deleted' => 'Asignación de dominio eliminada.',
    'contact_attachment_label' => 'Archivo (opcional)',
    'contact_attachment_hint' => 'Imágenes o PDF, máx. 10 MB.',
    'contact_err_attachment_type' => 'Solo se permiten imágenes (jpg, png, gif, webp) y PDF.',
    'contact_err_attachment_size' => 'Archivo demasiado grande (máx. 10 MB).',
    'contact_err_attachment_upload' => 'Error al subir el archivo.',
    'auto_update_title' => 'Actualizaciones automáticas programadas',
    'auto_update_desc' => 'Si está activado, el cron instala automáticamente las actualizaciones disponibles dentro del intervalo configurado. Requiere que cron.php se ejecute regularmente (por ejemplo, cada 5-15 minutos) y que las actualizaciones estén permitidas.',
    'auto_update_enabled' => 'Activar actualizaciones automáticas',
    'auto_update_time_label' => 'Hora programada (HH:MM, hora del servidor)',
    'auto_update_time_hint' => 'Las actualizaciones se ejecutan en el ciclo de cron después de esta hora, como máximo una vez al día.',
    'hc_migrations' => 'Migraciones de base de datos',
    'hc_migrations_ok' => 'Todas las migraciones aplicadas',
    'hc_migrations_pending' => ':n pendientes',
    'hc_migrations_failed' => 'Falló: :id (:error)',
    'hc_migrations_failed_generic' => 'Falló, consulte el registro del servidor',
    'hc_app_version' => 'Versión de la app (código vs. BD)',
    'hc_app_version_ok' => 'Código y base de datos sincronizados (:code)',
    'hc_app_version_mismatch' => 'Versión código :code, versión BD :db',
    'plugin_settings' => 'Ajustes',
    'hc_ldap_transport' => 'Transporte LDAP',
    'hc_ldap_inactive' => 'Plugin LDAP no habilitado',
    'hc_ldap_transport_ok' => ':mode activo',
    'hc_ldap_transport_cleartext' => 'LDAP en texto plano transmite las credenciales y contraseñas sin cifrar',
    'hc_ldap_ca' => 'Certificado CA de LDAP',
    'hc_ldap_ca_none' => 'No se ha cargado ningún certificado CA',
    'hc_ldap_ca_unknown' => 'CA almacenado, validez desconocida',
    'hc_ldap_ca_expired' => 'El certificado CA caducó hace :days días',
    'hc_ldap_ca_soon' => 'El certificado CA caduca en :days días',
    'hc_ldap_ca_ok' => 'Certificado CA válido (:days días restantes)',
    'hc_ldap_sync' => 'Sincronización LDAP',
    'hc_ldap_sync_never' => 'La sincronización aún no se ha ejecutado',
    'hc_ldap_sync_ok' => 'Última ejecución hace :h h',
    'hc_ldap_sync_warn' => 'Última ejecución hace :h h (más de 4 h)',
    'hc_ldap_sync_stale' => 'Última ejecución hace :h h (más de 24 h)',
    'bulk_selected' => 'seleccionadas',
    'bulk_set_status' => 'Establecer estado',
    'bulk_set_priority' => 'Establecer prioridad',
    'bulk_set_assignees' => 'Asignar',
    'bulk_set_due_date' => 'Establecer fecha de vencimiento',
    'bulk_add_label' => 'Añadir etiqueta',
    'bulk_remove_label' => 'Quitar etiqueta',
    'bulk_apply' => 'Aplicar',
    'bulk_clear' => 'Borrar selección',
    'bulk_delete' => 'Eliminar',
    'bulk_confirm_delete' => '¿Eliminar realmente :n tareas?',
    'external' => 'Externo',
    'clear' => 'Borrar',
    'cmdk_placeholder' => 'Buscar proyectos, tareas o personas…',
    'cmdk_empty' => 'Sin resultados',
    'cmdk_type_more' => 'Escribe al menos 2 caracteres…',
    'cmdk_navigate' => 'navegar',
    'cmdk_open' => 'abrir',
    'shortcuts_title' => 'Atajos de teclado',
    'shortcuts_open_palette' => 'Abrir búsqueda rápida',
    'shortcuts_navigate_results' => 'Navegar por los resultados',
    'shortcuts_open_result' => 'Abrir resultado',
    'shortcuts_close' => 'Cerrar diálogo',
    'shortcuts_hint' => 'La búsqueda rápida encuentra proyectos y tareas a los que tienes acceso. Los atajos funcionan desde cualquier parte de Plenvo.',
    'cmdk_people' => 'Personas',
    'cmdk_open_tasks' => 'abiertas',
    'managed_tasks_title' => 'Tareas en tus proyectos',
    'managed_tasks_subtitle' => 'Tareas abiertas de :name en proyectos donde eres propietario o manager.',
    'managed_tasks_empty' => 'No hay tareas abiertas en tus proyectos.',
    'plugin_impersonate_desc' => 'Permite a los administradores usar la app como otro usuario.',
    'plugin_provider_edition_desc' => 'Aislamiento de usuarios por grupos, solicitudes de creación de grupos e invitaciones por correo.',
    'plugin_ldap_desc' => 'Autentica a los usuarios de Plenvo de forma transparente contra un servidor LDAP/AD. Admite LDAPS, StartTLS y (con advertencia) texto plano. Aprovisionamiento JIT, sincronización por cron para usuarios desactivados del directorio y grupo de administradores opcional.',
    'plugin_oidc_desc' => 'Inicio de sesión único mediante OpenID Connect. Compatible con Keycloak, Google Workspace, Microsoft Entra ID y cualquier otro proveedor OIDC en paralelo.',
    'plugin_gdpr_desc' => 'Cumple el derecho de acceso del Art. 15 RGPD. Los administradores pueden exportar copias de los datos de cada usuario; opcionalmente, los usuarios pueden descargar sus propios datos.',
    'gdpr_export_admin_btn' => 'Exportación RGPD',
    'gdpr_export_admin_btn_title' => 'Descargar un archivo ZIP con los datos personales de este usuario (Art. 15 RGPD).',
    'gdpr_self_export_card_title' => 'Descarga tus datos (RGPD)',
    'gdpr_self_export_card_desc' => 'Recibe un archivo ZIP con una copia de los datos personales que esta instancia tiene sobre ti. La descarga se genera al momento y no se almacena en el servidor.',
    'gdpr_self_export_btn' => 'Descargar mis datos',
    'gdpr_self_export_cooldown' => 'Disponible de nuevo en %d hora(s).',
    'gdpr_self_export_disabled' => 'La exportación autoservicio está actualmente deshabilitada por el operador.',
    'gdpr_readme_heading' => 'Exportación de datos RGPD — %s',
    'gdpr_readme_for' => 'Para: %s <%s>',
    'gdpr_readme_generated' => 'Generado: %s',
    'gdpr_readme_trigger' => 'Activado: %s',
    'gdpr_readme_triggered_admin' => 'por un administrador en su nombre',
    'gdpr_readme_triggered_self' => 'por usted mismo desde la página de autoservicio',
    'gdpr_readme_contents_heading' => 'Contenido de este archivo',
    'gdpr_readme_contents' => "Cada archivo JSON dentro de este ZIP corresponde a una categoría de datos personales:\n\n  profile.json           Cuenta y preferencias (sin hash de contraseña, secreto MFA ni tokens de restablecimiento).\n  projects.json          Proyectos de los que es propietario o miembro.\n  tasks.json             Tareas creadas por usted o asignadas a usted.\n  comments.json          Comentarios escritos por usted.\n  ai_messages.json       Mensajes enviados al asistente de IA (si está en uso).\n  notifications.json     Notificaciones dirigidas a usted.\n  activity_log.json      Acciones que ha realizado (creación, actualización, cambios de estado, etc.).\n  security_events.json   Eventos de seguridad de su cuenta (inicios de sesión, MFA, exportaciones).\n  webauthn.json          Metadatos de claves de acceso registradas (sin bytes de clave pública).\n  invitations.json       Invitaciones enviadas a su dirección de correo.\n  attachments.json       Metadatos de archivos cargados por usted.\n  group_memberships.json Membresías de grupo (solo en instalaciones Provider Edition).\n  attachments/           Los archivos cargados, solo cuando el operador habilitó esta opción.\n\nDeliberadamente NO incluido: hash de contraseña, secreto TOTP, códigos de recuperación MFA, bytes de clave pública WebAuthn, contenidos cifrados de correo, cola de correo transitoria. Incluirlos no le beneficiaría y debilitaría la seguridad de su cuenta.",
    'gdpr_readme_rights_heading' => 'Sus derechos según el RGPD',
    'gdpr_readme_rights' => "Además del derecho de acceso (Art. 15) que cumple esta exportación, también tiene:\n\n  - Derecho de rectificación (Art. 16): corregir datos inexactos en los ajustes de su cuenta.\n  - Derecho de supresión (Art. 17): eliminar su cuenta desde la página de configuración.\n  - Derecho a la limitación del tratamiento (Art. 18).\n  - Derecho a la portabilidad de los datos (Art. 20): los archivos JSON de este archivo son legibles por máquina.\n  - Derecho de oposición (Art. 21).\n  - Derecho a presentar una reclamación ante una autoridad de control (Art. 77).\n\nPara consultas sobre el tratamiento de sus datos, contacte al responsable mencionado en la introducción anterior.",
    'oidc_or_continue_with' => 'O iniciar sesión con',
    'oidc_sign_in_with' => 'Iniciar sesión con',
    'inactive_cleanup_title' => 'Eliminar cuentas inactivas automáticamente',
    'nav_inactive_cleanup' => 'Cuentas inactivas',
    'inactive_cleanup_excluded_label' => 'Nunca afectados',
    'inactive_cleanup_excluded_hint' => 'Cuentas de administrador y cuentas gestionadas mediante LDAP / Active Directory. Su ciclo de vida lo controla el directorio.',
    'scope_mine' => 'Mis tareas',
    'scope_all_my_projects' => 'Todas en mis proyectos',
    'assigned_filter_me' => 'Asignadas a mí',
    'assigned_filter_others' => 'Otras personas',
    'assigned_filter_externals' => 'Participantes externos',
    'assigned_filter_none' => 'Sin asignar',
    'assigned_filter_anyone' => 'Cualquiera',
    'clear_filters' => 'Quitar filtros',
    'clear_filters_hint' => 'Eliminar todos los filtros y mostrar todo lo que tienes permitido ver.',
    'inactive_cleanup_desc' => 'Los usuarios que no inician sesión durante el periodo configurado reciben primero un correo de aviso. Si no inician sesión durante el plazo, la cuenta se elimina definitivamente. Las cuentas de administrador están exentas. Los proyectos en los que el usuario es el único propietario se eliminan junto con la cuenta.',
    'inactive_cleanup_enable_label' => 'Activar',
    'inactive_cleanup_threshold_label' => 'Inactividad (meses)',
    'inactive_cleanup_threshold_hint' => 'Predeterminado 12. Entre 1 y 120.',
    'inactive_cleanup_warning_label' => 'Plazo de gracia (días)',
    'inactive_cleanup_warning_hint' => 'Predeterminado 14. Entre 1 y 90.',
    'inactive_cleanup_last_run' => 'Última ejecución :when: :warned advertidos, :deleted eliminados.',
    'mail_inactive_warning_subject' => 'Tu cuenta se eliminará en :days días',
    'mail_inactive_warning_body' => 'Tu cuenta lleva mucho tiempo inactiva. Si no inicias sesión en los próximos :days días, la cuenta y los proyectos en los que seas único propietario se eliminarán definitivamente.',
    'mail_inactive_warning_cta' => 'Iniciar sesión ahora',
    'mail_inactive_warning_footer' => 'Este es un mensaje automático de Plenvo. Basta con un inicio de sesión correcto para cancelar la eliminación.',
    'mail_greeting' => 'Hola :name,',
    'mail_open_task' => 'Abrir tarea →',
    'mail_show_tasks' => 'Ver tareas →',
    'mail_view_task' => 'Ver tarea',
    'mail_view_comment' => 'Ver comentario →',
    'mail_personal_link' => 'Este enlace es personal y le da acceso a sus tareas en este proyecto.',
    'mail_project_label' => 'Proyecto: :name',
    'mail_assigned_subject' => 'Tarea asignada – :task',
    'mail_assigned_body' => 'Se le ha asignado la tarea :task en el proyecto :project.',
    'mail_mgr_activity_subject' => 'Actividad – :project',
    'mail_mgr_activity_body' => 'Actividad en el proyecto :project: :actor – :action. Tarea: :task',
    'mail_activity_inapp' => 'Actividad: :task',
    'mail_task_done_subject' => 'Tarea completada – :task',
    'mail_task_done_intro' => 'La siguiente tarea ha sido completada:',
    'mail_task_done_by' => 'Completada por: :actor',
    'mail_task_done_inapp' => 'Por: :actor | Proyecto: :project',
    'mail_predec_subject' => 'La tarea puede iniciarse – :task',
    'mail_predec_intro' => 'Todas las tareas predecesoras de :task en el proyecto :project están completadas.',
    'mail_predec_cta' => 'Ya puede comenzar con su tarea.',
    'mail_predec_inapp' => 'Todas las predecesoras completadas | Proyecto: :project',
    'mail_reminder_subject' => 'Recordatorio – :task',
    'mail_reminder_3days_body' => 'Recordatorio: La tarea :task en el proyecto :project vence en 3 días.',
    'mail_reminder_3days_inapp' => 'Vence en 3 días: :task',
    'mail_comment_subject' => 'Nuevo comentario – :task',
    'mail_comment_body_internal' => ':actor comentó la tarea :task en el proyecto :project.',
    'mail_comment_body_external' => 'La tarea :task en el proyecto :project ha sido comentada.',
    'mail_comment_inapp' => 'Por: :actor | Proyecto: :project',
    'mail_change_subject' => 'Tarea modificada – :task',
    'mail_change_body' => 'La tarea :task en el proyecto :project ha sido modificada.',
    'mail_unassign_subject' => 'Eliminado de la tarea – :task',
    'mail_unassign_body' => 'Ha sido eliminado de la tarea :task en el proyecto :project.',
    'mail_attachment_subject' => 'Nuevo adjunto – :task',
    'mail_attachment_body' => 'Se ha subido un nuevo adjunto a la tarea :task en el proyecto :project.',
    'mail_task_created_subject' => 'Nueva tarea – :task',
    'mail_task_created_intro' => 'Se ha creado una nueva tarea en el proyecto :project:',
    'mail_created_by' => 'Creada por: :actor',
    'mail_task_created_inapp' => 'Creada por: :actor | Proyecto: :project',
    'mail_mention_subject' => 'Has sido mencionado – :task',
    'mail_mention_body_internal' => ':actor le mencionó en un comentario sobre la tarea :task en el proyecto :project.',
    'mail_mention_body_external' => 'Le han mencionado en un comentario sobre la tarea :task en el proyecto :project.',
    'mail_mention_inapp' => 'Por: :actor | Proyecto: :project',
    'mail_dueday_subject' => 'Vence hoy – :task',
    'mail_dueday_body' => 'Recordatorio: La tarea :task en el proyecto :project vence hoy.',
    'mail_overdue_subject' => 'Tarea vencida – :task',
    'mail_overdue_intro' => 'La siguiente tarea está vencida:',
    'mail_overdue_due_was' => 'Vencía: :date',
    'mail_overdue_inapp' => 'Vencía: :date | Proyecto: :project',
    'mail_startdate_subject' => 'La tarea puede iniciarse – :task',
    'mail_startdate_body' => 'La tarea :task en el proyecto :project comienza hoy. Ya puede empezar.',
    'mail_startdate_due_info' => 'Vence: :date.',
    'mail_task_event_body' => ':actor :action:',
    'mail_admin_group_request_subject' => 'Solicitud de grupo de :user',
    'mail_admin_group_request_intro' => 'Un usuario solicita permiso para crear sus propios grupos:',
    'mail_admin_label_username' => 'Usuario',
    'mail_admin_label_email' => 'Correo',
    'mail_admin_label_time' => 'Hora',
    'mail_admin_manage_requests' => 'Gestionar solicitudes →',
    'mail_admin_new_reg_subject' => 'Nuevo registro – :user',
    'mail_admin_new_reg_intro' => 'Un nuevo usuario se ha registrado y espera verificación por correo:',
    'mail_admin_open_users' => 'Abrir gestión de usuarios →',
    'mail_admin_new_reg_inapp' => 'Nuevo registro: :user',
    'security_log_title' => 'Registro de seguridad',
    'security_log_desc' => 'Eventos relevantes para la seguridad (inicios de sesión, MFA, acciones de administrador, operaciones de complementos/actualizaciones). Retención: :days días. Mostrando las 500 entradas más recientes.',
    'security_log_filter_type' => 'Tipo de evento',
    'security_log_filter_severity' => 'Gravedad',
    'security_log_filter_all' => 'Todos',
    'security_log_empty' => 'Aún no se han registrado eventos de seguridad.',
    'security_log_col_time' => 'Hora',
    'security_log_col_severity' => 'Nivel',
    'security_log_col_type' => 'Tipo',
    'security_log_col_user' => 'Usuario',
    'security_log_col_ip' => 'IP',
    'security_log_col_details' => 'Detalles',
    'security_log_filter_placeholder' => 'Filtrar…',
    'security_log_filter_no_match' => 'Ninguna entrada coincide con los filtros actuales.',
    'security_log_max_rows' => 'Visualización limitada a 500 entradas. Las entradas anteriores se eliminan automáticamente según la configuración de retención.',
    'security_log_deleted_user' => 'eliminado',
    'sec_seclog_title' => 'Registro de eventos de seguridad',
    'sec_seclog_retention' => 'Retención (días)',
    'sec_seclog_retention_hint' => 'Días antes de que los eventos de seguridad se eliminen automáticamente. 0 = conservar siempre.',
    'apply' => 'Aplicar',
    'reset' => 'Restablecer',
    'mail_footer_auto_generated' => 'Este correo se generó automáticamente',
    'update_available_notif_title' => 'Plenvo :version disponible',
    'update_available_notif_msg' => 'Hay una nueva versión disponible. Actualice ahora en la configuración del sistema.',
    'plugin_activated_msg' => 'Complemento activado.',
    'plugin_deactivated_msg' => 'Complemento desactivado.',
    'preferences_saved_msg' => 'Preferencias guardadas.',
    'project_status_added' => 'Estado añadido',
    'project_status_deleted' => 'Estado eliminado',
    'project_label_added' => 'Etiqueta añadida',
    'project_label_deleted' => 'Etiqueta eliminada',
    'ai_request_failed' => 'La solicitud de IA falló. Por favor, inténtelo de nuevo.',
    'contact_admin_mail_title' => 'Nueva solicitud de contacto',
    'contact_admin_mail_footer' => 'Enviado desde la IP :ip el :time',
    'notify_admins_new_registration_label' => 'Notificar a los administradores sobre nuevos registros',
    'notify_admins_new_registration_hint' => 'Cuando está activo, los administradores reciben un correo electrónico y una notificación en la aplicación tan pronto como un usuario se registra (antes de la verificación del correo).',
    'unverified_user_max_hours_label' => 'Eliminar cuentas no verificadas después de (horas)',
    'unverified_user_max_hours_hint' => 'Las cuentas que no hayan confirmado su correo dentro de este período tras el registro serán eliminadas automáticamente por el cron. 0 = nunca eliminar.',
    'timezone_label' => 'Zona horaria',
    'timezone_user_hint' => 'Déjelo vacío para usar la zona horaria predeterminada de la instalación.',
    'timezone_inherit_default' => '— Predeterminado del sistema —',
    'app_default_timezone_label' => 'Zona horaria predeterminada',
    'app_default_timezone_hint' => 'Se utiliza cuando un usuario no ha establecido su propia zona horaria. Afecta a la visualización de fecha/hora en correos y en la interfaz.',
    'save_all_btn' => 'Guardar todas las configuraciones',
    'save_all_in_progress' => 'Guardando…',
    'save_all_success' => 'Todas las configuraciones guardadas',
    'save_all_failed' => 'Error al guardar — recargue e inténtelo de nuevo',
    'toast_click_to_copy' => 'Clic para copiar',
    'toast_copied' => 'Copiado al portapapeles ✓',
    'toast_close' => 'Cerrar',
    'hc_cron_title' => 'Health Check como monitor cron',
    'hc_cron_desc' => 'Cuando está habilitado, el cron ejecuta todas las comprobaciones en el intervalo configurado. Se envía un correo cuando un estado empeora (OK → advertencia/error o advertencia → error). Cada problema se notifica una sola vez hasta que mejore o se resuelva.',
    'hc_cron_enable_label' => 'Activar monitor cron',
    'hc_cron_interval_label' => 'Intervalo (minutos)',
    'hc_cron_interval_hint' => 'Mínimo 5, máximo 1440 minutos (24h).',
    'hc_cron_alert_email_label' => 'Correo(s) para alertas',
    'hc_cron_alert_email_hint' => 'Separados por comas o espacios. Vacío = todos los administradores activos.',
    'topbar_health_ok' => 'Sistema saludable',
    'topbar_health_warn' => 'Sistema: advertencias',
    'topbar_health_error' => 'Sistema: errores',
    'topbar_health_unknown' => 'Estado del sistema desconocido — el monitor cron aún no ha corrido',
    'mail_hc_alert_subject' => 'Alerta Health Check — :n problema(s)',
    'mail_hc_alert_intro' => 'La última comprobación cron detectó nuevos problemas:',
    'mail_hc_resolved_subject' => 'Health Check — :n problema(s) resuelto(s)',
    'mail_hc_resolved_intro' => 'Los siguientes problemas reportados anteriormente están ahora resueltos:',
    'mail_hc_at' => 'Comprobado el :time',
    'hc_paths' => 'Rutas sensibles',
    'hc_paths_ok' => ':n rutas no accesibles públicamente',
    'hc_paths_exposed' => 'Accesibles públicamente: :list',
    'hc_key_perms' => 'Permisos del archivo de clave',
    'hc_key_missing' => 'data/app.key aún no existe (se crea al primer cifrado)',
    'hc_key_ok' => '0600 (solo propietario)',
    'hc_key_bad' => 'data/app.key tiene permisos :perms — debería ser 0600',
    'hc_db_perms' => 'Permisos del archivo de BD',
    'hc_db_missing' => 'data/database.sqlite no existe',
    'hc_db_ok' => ':perms (no legible por todos)',
    'hc_db_world_readable' => 'data/database.sqlite es legible por todos (:perms) — robo de datos posible',
    'hc_https' => 'HTTPS forzado',
    'hc_https_not_https' => 'app_url es :url — debería empezar con https://',
    'hc_https_http_open' => 'http:// devuelve 200 en lugar de redirección/bloqueo — credenciales pueden viajar sin cifrar',
    'hc_https_ok' => 'app_url usa https y http:// bloquea/redirige',
    'hc_admin_mfa' => 'Cuentas de admin con 2FA',
    'hc_admin_mfa_ok' => 'Todos los admins activos tienen al menos un segundo factor',
    'hc_admin_mfa_missing' => ':n admin(s) sin TOTP/Email-MFA/WebAuthn',
    'hc_admin_mfa_check_failed' => 'Comprobación fallida',
    'hc_php_config' => 'Configuración de PHP',
    'hc_php_config_ok' => 'PHP :v — display_errors/expose_php desactivados, cookies de sesión HttpOnly',
    'hc_php_config_issues' => 'Valores recomendados violados: :list',
    'hc_mail_heartbeat' => 'Latido de envío de correo',
    'hc_mail_heartbeat_disabled' => 'Las notificaciones están desactivadas',
    'hc_mail_heartbeat_unconfigured' => 'Ningún proveedor de correo configurado',
    'hc_mail_heartbeat_never' => 'Aún no hay envío exitoso registrado',
    'hc_mail_heartbeat_ok' => 'Último envío exitoso hace :h hora(s)',
    'hc_mail_heartbeat_stale' => 'Último envío exitoso hace :d días — comprobar SMTP/proveedor',
    'hc_disk' => 'Espacio libre en disco',
    'hc_disk_unknown' => 'No se pudo determinar el espacio libre',
    'hc_disk_ok' => ':gb GB libres',
    'hc_disk_low' => 'Solo :gb GB libres (umbral 15 GB) — subidas/copias en riesgo',
    'dl_bsi_hint' => 'Informe de seguridad y conformidad BSI a nivel de código:',

    // ── Encuestas de fechas (plugin meetingpoll) ────────────────────────────
    'mp_plugin_desc'        => 'Encuestas de disponibilidad con varias opciones: propón varias fechas/horas, comparte un enlace y los participantes votan sin iniciar sesión.',
    'mp_nav'                => 'Encuestas de fechas',
    'mp_new_poll'           => 'Nueva encuesta de fechas',
    'mp_list_intro'         => 'Propón varias fechas y comparte el enlace: los participantes votan sin necesidad de cuenta.',
    'mp_no_polls'           => 'Todavía no has creado ninguna encuesta de fechas.',
    'mp_col_title'          => 'Título',
    'mp_col_options'        => 'Opciones',
    'mp_col_responses'      => 'Respuestas',
    'mp_col_status'         => 'Estado',
    'mp_status_open'        => 'Abierta',
    'mp_status_closed'      => 'Cerrada',
    'mp_status_finalized'   => 'Confirmada',
    'mp_create_title'       => 'Crear encuesta de fechas',
    'mp_edit_title'         => 'Editar encuesta de fechas',
    'mp_field_title'        => 'Título',
    'mp_field_title_ph'     => 'p. ej. Reunión de equipo en mayo',
    'mp_field_desc'         => 'Descripción',
    'mp_field_desc_ph'      => '¿De qué trata? (opcional)',
    'mp_field_location'     => 'Lugar',
    'mp_field_location_ph'  => 'p. ej. Sala 2 o videollamada (opcional)',
    'mp_field_deadline'     => 'Fecha límite',
    'mp_field_deadline_hint'=> 'Después de este momento ya no se aceptan respuestas (opcional).',
    'mp_field_options'      => 'Opciones de fecha/hora',
    'mp_opt_date'           => 'Fecha',
    'mp_opt_start'          => 'Desde',
    'mp_opt_end'            => 'Hasta',
    'mp_add_option'         => 'Añadir opción',
    'mp_opt_hint'           => 'Deja la hora en blanco para una opción de todo el día. Se requiere al menos una opción.',
    'mp_cal_hint'           => 'Haz clic en los días del calendario que quieras ofrecer como opción. Vuelve a hacer clic para quitar un día.',
    'mp_no_dates'           => 'Aún no se ha seleccionado ningún día.',
    'mp_cal_nojs'           => 'Se necesita JavaScript para elegir fechas.',
    'mp_default_time'       => 'Hora por defecto para los nuevos días:',
    'mp_duration'           => 'Duración:',
    'mp_dur_none'           => 'Sin hora de fin',
    'mp_apply_to_all'       => 'Aplicar a todos',
    'mp_edit_time'          => 'Cambiar la hora',
    'mp_invite_title'       => 'Invitar a participantes',
    'mp_invite_hint'        => 'Invita a usuarios de Plenvo mediante la búsqueda o indica direcciones de correo externas. Todos recibirán el enlace de la encuesta por correo.',
    'mp_invite_users_label' => 'Usuarios de Plenvo',
    'mp_invite_search_ph'   => 'Buscar por nombre o correo …',
    'mp_invite_emails_label'=> 'Direcciones de correo externas',
    'mp_invite_emails_ph'   => 'max@example.com, ana@example.com … (separadas por comas o saltos de línea)',
    'mp_invite_send'        => 'Enviar invitaciones',
    'mp_invited_people'     => 'Invitados',
    'mp_invite_pending'     => 'Pendiente',
    'mp_invite_responded'   => 'Ha respondido',
    'mp_invite_resend'      => 'Reenviar',
    'mp_invite_remove'      => 'Quitar de la lista',
    'mp_invite_remove_confirm' => '¿Quitar esta invitación de la lista?',
    'mp_invite_sent'        => ':count invitación(es) enviada(s).',
    'mp_invite_resent'      => 'Invitación reenviada.',
    'mp_invite_removed'     => 'Invitación eliminada.',
    'mp_invite_recently_sent' => 'Esta invitación se acaba de enviar. Espera un momento.',
    'mp_email_from_invite'  => 'Esta dirección procede de tu invitación y por eso no se puede cambiar.',
    'mp_field_allow_maybe'  => 'Permitir la opción "si hace falta" (los participantes pueden elegir "quizá")',
    'mp_field_hide_results' => 'Encuesta oculta: los participantes no ven las respuestas de los demás',
    'mp_field_notify_owner' => 'Enviarme un correo con cada nueva respuesta',
    'mp_create_submit'      => 'Crear encuesta',
    'mp_created'            => 'Encuesta de fechas creada.',
    'mp_saved'              => 'Cambios guardados.',
    'mp_deleted'            => 'Encuesta de fechas eliminada.',
    'mp_confirm_delete_poll'    => '¿Eliminar esta encuesta de fechas y todas las respuestas?',
    'mp_confirm_delete_response'=> '¿Eliminar esta respuesta?',
    'mp_delete_response'    => 'Eliminar respuesta',
    'mp_response_deleted'   => 'Respuesta eliminada.',
    'mp_share_link'         => 'Enlace para compartir',
    'mp_copy_link'          => 'Copiar enlace',
    'mp_copied'             => '¡Copiado!',
    'mp_open_link'          => 'Abrir',
    'mp_share_hint'         => 'Comparte este enlace con todos los participantes: no hace falta cuenta.',
    'mp_manage_poll'        => 'Gestionar encuesta',
    'mp_meta_responses'     => ':count respuesta(s)',
    'mp_meta_deadline'      => 'Fecha límite: :date',
    'mp_meta_hidden'        => 'Encuesta oculta',
    'mp_deadline_passed'    => 'La fecha límite venció el :date: ya no se pueden enviar respuestas.',
    'mp_voting_closed'      => 'Esta encuesta está cerrada: ya no se puede votar.',
    'mp_no_options_yet'     => 'Todavía no se han añadido opciones de fecha/hora a esta encuesta.',
    'mp_participant'        => 'Participante',
    'mp_all_day'            => 'todo el día',
    'mp_no_responses'       => 'Aún no hay respuestas.',
    'mp_total'              => 'Total',
    'mp_results'            => 'Resultados',
    'mp_finalize_title'     => 'Confirmar la fecha',
    'mp_finalize_hint'      => 'Elige la fecha definitiva. Puedes deshacerlo más tarde.',
    'mp_finalize_choose'    => 'Elige una fecha …',
    'mp_finalize_notify'    => 'Avisar a los participantes por correo',
    'mp_finalize_submit'    => 'Confirmar fecha',
    'mp_finalized'          => 'Fecha confirmada.',
    'mp_finalized_to'       => 'Fecha definitiva',
    'mp_reopen'             => 'Deshacer la confirmación',
    'mp_reopened'           => 'Confirmación deshecha.',
    'mp_your_response'      => 'Tu respuesta',
    'mp_edit_your_response' => 'Editar tu respuesta',
    'mp_voting_as'          => 'Estás votando como :name.',
    'mp_your_name'          => 'Tu nombre',
    'mp_your_email'         => 'Correo electrónico',
    'mp_email_ph'           => 'para recibir un aviso cuando se fije la fecha (opcional)',
    'mp_yes'                => 'Sí',
    'mp_maybe'              => 'Si hace falta',
    'mp_no'                 => 'No',
    'mp_comment'            => 'Comentario',
    'mp_comment_ph'         => 'opcional',
    'mp_submit_response'    => 'Guardar respuesta',
    'mp_update_response'    => 'Actualizar respuesta',
    'mp_vote_saved'         => '¡Gracias! Tu respuesta se ha guardado.',
    'mp_organized_by'       => 'Organizado por :name',
    'mp_location'           => 'Lugar',
    'mp_poll_not_found'     => 'Esta encuesta de fechas ya no existe.',
    'mp_err_title_required' => 'Introduce un título.',
    'mp_err_title_long'     => 'El título es demasiado largo.',
    'mp_err_desc_long'      => 'La descripción es demasiado larga.',
    'mp_err_loc_long'       => 'El lugar es demasiado largo.',
    'mp_err_no_options'     => 'Indica al menos una opción de fecha/hora válida.',
    'mp_err_too_many_options'=> 'Demasiadas opciones de fecha/hora.',
    'mp_err_deadline'       => 'La fecha límite no es una fecha válida.',
    'mp_err_option'         => 'Opción de fecha/hora no válida.',
    'mp_err_closed'         => 'Esta encuesta está cerrada.',
    'mp_err_full'           => 'Esta encuesta ha alcanzado el número máximo de respuestas.',
    'mp_err_no_recipients'  => 'No se ha indicado ningún destinatario válido.',
    'mp_err_invite_cap'     => 'Esta encuesta ha alcanzado el máximo de :max invitaciones.',
    'mp_err_name_required'  => 'Introduce tu nombre.',
    'mp_err_email'          => 'Introduce una dirección de correo válida.',
    'mp_err_rate_limited'   => 'Demasiadas respuestas en poco tiempo. Inténtalo de nuevo en un momento.',
    'mp_wd_0'               => 'dom',
    'mp_wd_1'               => 'lun',
    'mp_wd_2'               => 'mar',
    'mp_wd_3'               => 'mié',
    'mp_wd_4'               => 'jue',
    'mp_wd_5'               => 'vie',
    'mp_wd_6'               => 'sáb',
    'mp_mail_greeting'      => 'Hola :name,',
    'mp_mail_new_response_subject' => 'Nueva respuesta a tu encuesta de fechas: :title',
    'mp_mail_new_response_body'    => ':name ha respondido a tu encuesta de fechas ":title".',
    'mp_mail_view_results'  => 'Ver resultados',
    'mp_mail_finalized_subject'    => 'Fecha confirmada: :title',
    'mp_mail_finalized_body'       => 'Se ha fijado la siguiente fecha para ":title":',
    'mp_mail_open_poll'     => 'Abrir la encuesta',
    'mp_mail_invite_subject'=> 'Invitación a una encuesta de fechas: :title',
    'mp_mail_invite_body'   => 'Te han invitado a votar en la encuesta de fechas ":title". Elige las fechas que te vengan bien:',
];
