"use strict";

/**
 * Kasy CLI i18n messages — Español.
 *
 * One entry per user-facing string. Keys are dotted paths describing
 * where the string is used (cli.help.*, run.*, ios.*, etc.).
 */

module.exports = {
  'cli.tagline': 'Crea apps móviles sin dolor de configuración',
    'cli.description': 'Crea apps Flutter sin dolor de configuración.',
    'cli.usage': '<comando> [argumentos]',
    'cli.option.version': 'Mostrar versión instalada',
    'cli.option.lang': 'Idioma (en, pt, es)',
    'cli.help.afterError': '(ejecuta con --help para detalles de uso)',
    'cli.help.more': 'Ejecuta "{command}" para detalles de un comando específico.',
    'cli.help.quickStart': 'Crear un nuevo app:',
    'cli.help.optionDescription': 'Mostrar ayuda del comando',
    'cli.help.commandDescription': 'Mostrar ayuda del comando',
    'cli.help.inline.options': '[opciones]',
    'cli.help.heading.usage': 'Uso',
    'cli.help.heading.arguments': 'Argumentos',
    'cli.help.heading.options': 'Opciones',
    'cli.help.heading.globalOptions': 'Opciones globales',
    'cli.help.heading.commands': 'Comandos',
    'cli.help.group.start': 'Para empezar',
    'cli.help.group.work': 'Trabajar en tu app',
    'cli.help.group.publish': 'Publicar y probar',
    'cli.help.group.maintenance': 'Mantenimiento de Kasy CLI',
    'cli.help.group.advanced': 'Avanzado',
    'cli.help.group.other': 'Otros',
    'cli.help.tip': 'Tip: ejecuta `kasy <comando> --help` para más detalles. Usa --lang pt|en|es para cambiar idioma.',
    'cli.command.setup.description': '(avanzado) Configura un proyecto Flutter existente',
    'cli.command.new.description': 'Crea una app nueva (ej: kasy new mi-app)',
    'cli.command.new.projectName': 'nombre del proyecto',
    'cli.command.new.projectNameArg': 'Nombre de la carpeta del proyecto',
    'prompt.projectName.enter': '¿Cuál es el nombre de tu proyecto?',
    'prompt.projectName.required': 'El nombre del proyecto es obligatorio.',
    'prompt.projectName.default': 'mi_app',
    'cli.command.setup.directoryName': 'directorio',
    'cli.command.setup.directoryArg': 'Directorio destino (por defecto: carpeta actual .)',
    'cli.command.setup.langName': 'idioma',
    'cli.command.setup.langOption': 'Idioma de prompts (en, pt, es)',
    'cli.command.setup.backendOption': 'Adapter de backend (firebase, supabase, api)',
    'cli.command.setup.featuresOption': 'Features opcionales separadas por coma (web,widget,llm_chat,revenuecat,ci)',
    'cli.command.help.paramName': 'comando',
    'cli.command.doctor.description': 'Verifica si tu computadora está lista para correr Kasy',
    'cli.command.modules.description': 'Muestra lo que viene incluido y lo que puedes añadir',
    'cli.command.validate.description': '(avanzado) Valida combinaciones de backend y features',
    'cli.command.validate.analyzeOnlyOption': 'Ejecuta solo flutter analyze (sin build)',
    'cli.command.version.description': 'Muestra la versión instalada de Kasy',
    'cli.command.upgrade.description': 'Actualiza la Kasy CLI a la última versión',
    'cli.command.uninstall.description': 'Desinstala Kasy de esta computadora',
    'cli.command.upgrade.running': 'Actualizando la CLI kasy...',
    'cli.command.upgrade.done': 'kasy actualizado correctamente!',
    'cli.command.uninstall.running': 'Desinstalando la CLI kasy...',
    'cli.command.uninstall.done': 'kasy desinstalado. Hasta luego!',
    'new.checks.environment': 'Verificaciones de entorno',
    'new.checks.environment.checking': 'Verificando entorno',
    'new.checks.environment.done': 'Entorno listo',
    'setup.checks.backend.checking': 'Verificando herramientas {backend}',
    'setup.checks.backend.done': 'Herramientas {backend} listas',
    'new.checks.firebaseForPush': 'Nota: Firebase CLI es obligatorio para notificaciones push (Firebase Cloud Messaging / FCM) en todos los backends.',
    'new.checks.requiredBlock': 'Faltan herramientas obligatorias. Instalalas para continuar.',
    'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
    'new.checks.installSupabase': 'Supabase: npm i -g supabase (o brew install supabase/tap/supabase) && supabase login',
    'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (o npm i -g supabase)',
    'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
    'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
    'setup.checks.environment': 'Verificaciones de entorno',
    'setup.checks.prepareFirebase': 'Herramientas Firebase (push, remote config)',
    'setup.checks.backend': 'Verificaciones de backend ({backend})',
    'setup.firebase.installing': 'Instalando Firebase CLI...',
    'setup.supabase.installing': 'Instalando Supabase CLI...',
    'setup.flutterfire.installing': 'Instalando FlutterFire CLI...',
    'setup.warn.hang': 'Si se cuelga, ejecuta manualmente: flutterfire --versión',
    'setup.warn.supabase': '¿Usas Supabase o API propia? Firebase sigue siendo útil para push y remote config.',
    'doctor.title': 'Kasy Doctor',
    'doctor.baseEnvironment': 'Entorno base',
    'doctor.optionalBackend': 'Herramientas opcionales de backend',
    'doctor.requiredMissing': 'Faltan dependencias obligatorias. Corrige los errores anteriores y ejecuta doctor nuevamente.',
    'doctor.requiredPassed': '✓ Verificaciones obligatorias de entorno aprobadas.',
    'modules.backends': 'Backends disponibles:',
    'modules.featuresBase': 'Siempre incluido:',
    'modules.features': 'Features opcionales:',
    'modules.tag.firebaseOnly': 'solo Firebase',
    'modules.tag.requiresDb': 'requiere Firebase o Supabase',
    'modules.tag.enhances': 'activa {target}',
    'modules.hint.subscriptionNoRc': 'Tip: la pantalla de Subscriptions está incluida pero inactiva. Ejecuta `kasy add revenuecat` para habilitar pagos reales.',
    'modules.feature.base.authentication.description': 'Registro, inicio de sesión y gestión de cuenta',
    'modules.feature.base.home.description': 'Pantalla principal de la app después del login',
    'modules.feature.base.settings.description': 'Tema, idioma, cuenta y preferencias',
    'modules.feature.base.notifications.description': 'Notificaciones push via Firebase Cloud Messaging (funciona con cualquier backend)',
    'modules.feature.base.subscription.description': 'Pantalla y modelo de suscripcion premium (anade RevenueCat para habilitar pagos reales)',
    'modules.backend.firebase.description': 'Adapter de backend Firebase',
    'modules.backend.supabase.description': 'Adapter de backend Supabase',
    'modules.backend.api.description': 'Adapter de backend API REST/GraphQL',
    'modules.feature.sentry.description': 'Seguimiento de errores y crashes con Sentry',
    'modules.feature.analytics.description': 'Seguimiento de eventos de analytics (Firebase Analytics)',
    'modules.feature.facebook.description': 'Login de Facebook y seguimiento de eventos Meta Ads (siempre juntos)',
    'modules.feature.revenuecat.description': 'Habilita pagos reales en la pantalla de Subscriptions',
    'modules.feature.onboarding.description': 'Flujo de bienvenida mostrado en el primer acceso',
    'modules.feature.web.description': 'Soporte Web/PWA',
    'modules.feature.widget.description': 'Widget de pantalla inicial iOS/Android',
    'modules.feature.llm_chat.description': 'Pantalla de chat con IA usando OpenAI o Gemini',
    'modules.feature.feedback.description': 'Solicitudes y votacion de features dentro de la app',
    'modules.feature.local_notifications.description': 'Recordatorios locales programados por el usuario (sin servidor)',
    'modules.feature.ci.description': 'CI/CD: GitHub/GitLab (tests + build) + Codemagic (publicación en tiendas)',
    'checks.checking': 'Verificando {name}...',
    'checks.found': '{name} encontrado',
    'checks.foundWithVersion': '{name} listo ({versión})',
    'checks.missing': '{name} ausente',
    'checks.notFound': '{name} no encontrado',
    'checks.notFound.short': 'no encontrado',
    'checks.runHint': 'Ejecuta',
    'checks.stillMissing': 'aún no detectado',
    'checks.flutter.warn': 'Flutter SDK no encontrado. Instala Flutter para compilar y ejecutar apps: https://docs.flutter.dev/get-started/install',
    'checks.install.failed': 'instalación automática falló — ejecuta el comando manualmente',
    'checks.waitPrompt.gcloud.install': 'Tras instalar gcloud, presiona Enter para verificar de nuevo',
    'checks.waitPrompt.gcloud.auth': 'Tras ejecutar gcloud auth login, presiona Enter para verificar de nuevo',
    'error.hint.notFlutterProject': 'No estás dentro de un proyecto Flutter. Usa `kasy new` para crear uno, o entra en la carpeta de un proyecto existente.',
    'error.hint.flutterMissing': 'Flutter no está instalado o no está en el PATH. Ejecuta `kasy doctor` para diagnosticar.',
    'error.hint.permission': 'Un archivo/carpeta es de solo lectura. Verifica los permisos de la carpeta padre o intenta desde tu carpeta home.',
    'error.hint.noSpace': 'Disco lleno. Libera espacio (builds Flutter/Xcode necesitan 5-15 GB) e intenta de nuevo.',
    'error.hint.network': 'Problema de red — verifica tu conexión a internet e intenta de nuevo.',
    'error.hint.firebaseLogin': 'No estás autenticado en Firebase. Ejecuta: firebase login',
    'error.hint.supabaseLogin': 'No estás autenticado en Supabase. Ejecuta: supabase login',
    'error.hint.gcloudAuth': 'Necesitas autenticarte con gcloud. Ejecuta: gcloud auth login',
    'error.hint.flutterRunFailed': 'Flutter no pudo ejecutar la app. Intenta de nuevo con --verbose para ver la salida completa.',
    'checks.diagnostic.xcodeLicense': '{name} está instalado, pero Xcode necesita que aceptes la licencia. Ejecuta: sudo xcodebuild -license',
    'checks.diagnostic.xcodeCli': '{name} está instalado, pero faltan las Command Line Tools de Xcode. Ejecuta: xcode-select --install',
    'banner.title': 'Kasy CLI · Generador Flutter SaaS',
    'welcome.firstRun': '¡Bienvenido a Kasy CLI!',
    'welcome.chooseLanguage': 'Primero, elige tu idioma:',
    'prompt.language.select': 'Elige tu idioma',
    'prompt.cancelled': 'Comando cancelado por el usuario.',
    'license.required': '🔑 Se requiere clave de activación para usar Kasy CLI',
    'license.checking': 'Validando clave de activación...',
    'license.saved': '✅ Clave validada correctamente',
    'license.invalid': 'Clave inválida. Verifica tu clave o contacta soporte en kasy.dev.',
    'license.expired': '❌ Tu suscripción ha expirado. Renueva en kasy.dev.',
    'license.inactive': '❌ Tu clave fue desactivada. Contacta soporte en kasy.dev.',
    'license.offlineWarning': '⚠️  No se pudo conectar al servidor — continuando sin conexión.',
    'license.subscriptionExpired': '❌ Tu suscripcion expiró. Las actualizaciones requieren plan activo. Renueva en kasy.dev.\n   Tus proyectos siguen funcionando — solo las actualizaciones están bloqueadas.',
    'prompt.license.enter': '👉 Ingresa tu clave de activación (XXXX-XXXX-XXXX-XXXX)',
    'prompt.license.invalid': 'Formato inválido. Usa XXXX-XXXX-XXXX-XXXX.',
    'prompt.appName.enter': 'Ingresa el nombre de tu app',
    'prompt.appName.required': 'El nombre de la app es obligatorio.',
    'prompt.bundleId.enter': 'Ingresa el bundle ID (com.company.app)',
    'prompt.bundleId.required': 'El bundle ID es obligatorio.',
    'prompt.bundleId.invalid': 'El bundle ID debe verse como com.company.app.',
    'prompt.backend.select': 'Elige el proveedor de backend',
    'prompt.features.select': 'Elige las features opcionales a incluir',
    'prompt.features.instructions': 'Espacio para marcar, enter para confirmar',
    'prompt.multiselect.instructions': '\nInstrucciones:\n    ↑/↓: Resaltar opción\n    ←/→/[space]: Marcar/desmarcar\n    a: Marcar/desmarcar todos\n    enter/return: Confirmar',
    'prompt.multiselect.warnDisabled': 'Usa ↓ para ir a una opción seleccionable, Space para marcar, Enter para confirmar',
    'prompt.firebase.projectId.enter': 'Ingresa el Firebase Project ID',
    'prompt.firebase.projectId.required': 'Firebase Project ID es obligatorio.',
    'prompt.supabase.url.enter': 'Ingresa la URL de Supabase',
    'prompt.supabase.url.required': 'La URL de Supabase es obligatoria.',
    'prompt.supabase.anonKey.enter': 'Ingresa la clave anon de Supabase',
    'prompt.supabase.anonKey.required': 'La clave anon de Supabase es obligatoria.',
    'new.supabase.q.create': '¿Crear nuevo proyecto Supabase o usar existente?',
    'new.supabase.q.create.create': '✨ Crear nuevo proyecto (recomendado para principiantes)',
    'new.supabase.q.create.existing': '📂 Usar proyecto existente',
    'new.firebase.q.setupMode': '¿Cómo quieres configurar Firebase?',
    'new.firebase.q.setupMode.push': 'Proyecto Firebase para notificaciones push (FCM):',
    'new.firebase.q.setupMode.push.explain': 'Las notificaciones push (FCM) requieren un proyecto Firebase, incluso cuando tu backend principal es Supabase o API REST.',
    'new.firebase.q.setupMode.create': '✨ Crear desde cero (recomendado para principiantes)',
    'new.firebase.q.setupMode.existing': '📂 Usar proyecto existente',
    'new.firebase.q.region': '¿Dónde están la mayoría de los usuarios de tu app?',
    'new.firebase.q.region.brazil': '🇧🇷  Brasil (São Paulo)           — southamerica-east1',
    'new.firebase.q.region.us':     '🇺🇸  Estados Unidos               — us-central1',
    'new.firebase.q.region.europe': '🇪🇺  Europa                       — europe-west1',
    'new.firebase.q.region.global': '🌍  Global / No sé                — us-central1',
    'new.firebase.create.prereq': 'Necesitas: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Plan Blaze necesario para deploy.',
    'new.firebase.create.creating': 'Creando proyecto Firebase…',
    'new.firebase.create.includeWeb': '¿Incluir app Web en Firebase? (para plataforma web)',
    'new.firebase.create.nowDo': 'Ahora activa la autenticación (antes de ejecutar el app):',
    'new.firebase.create.activateEmail': 'Activa Email/Contraseña: Firebase Console → Authentication → Sign-in method',
    'new.firebase.create.activateGoogle': 'Activa Google: misma página, clic en Google → Activar',
    'new.firebase.create.beforeContinue.title': 'Antes de continuar, activa en Firebase Console:',
    'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Contraseña y Anónimo ya fueron activados automáticamente)',
    'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → activa Email/Contraseña, Anónimo y Google',
    'new.firebase.create.beforeContinue.ready': 'He activado Google Sign-In. ¿Continuar?',
    'new.firebase.create.beforeContinue.ready.noAuth': 'He activado Email/Contraseña, Anónimo y Google Sign-In. ¿Continuar?',
    'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager y Storage ya fueron activados automáticamente)',
    'new.firebase.create.sha1Skipped': 'SHA-1 no añadido',
    'new.firebase.create.sha1ManualInstruction': 'Añade el SHA-1 manualmente: Firebase Console → Configuración del proyecto → Tus apps → Android → Añadir huella digital',
    'new.firebase.create.sha1ParseError': 'No se pudo extraer el SHA-1 de la salida de keytool',
    'new.firebase.create.sha1ErrorDetail': 'Motivo',
    'new.firebase.create.useExistingHint': 'El proyecto puede haberse creado. Prueba "Usar proyecto existente" con ID: {id}',
    'new.firebase.create.usingProjectId': 'Usando project ID: {id} (continuando con proyecto existente)',
    'new.firebase.create.waitPropagate': 'Esperando propagación del proyecto (20s)…',
    'new.firebase.create.success': 'Proyecto Firebase creado correctamente.',
    'new.firebase.create.failed': 'No se pudo crear el proyecto',
    'new.firebase.create.gcloudRequired': 'gcloud CLI es obligatorio para "crear desde cero". Sin él, el flujo completo de Firebase no puede ejecutarse.',
    'new.firebase.create.installTitle': 'Para instalar gcloud CLI, ejecuta:',
    'new.firebase.create.installCommand': 'Comando',
    'new.firebase.create.installAfter': 'Luego inicia sesión',
    'new.firebase.create.installUrl': 'O descarga en',
    'new.firebase.create.authCommand': 'Ejecuta: gcloud auth login',
    'new.firebase.create.fallbackHint': 'Por ahora, ingresa un Firebase Project ID existente para continuar (o instala gcloud y ejecuta de nuevo):',
    'new.firebase.q.billingAccount': '¿Qué cuenta de facturación vincular al proyecto?',
    'new.firebase.q.billingAccount.hint': 'Elige la cuenta con cuota disponible (hasta 3 proyectos por cuenta)',
    'new.firebase.q.billingAccount.context': 'Límite: hasta 3 proyectos por cuenta de facturación. Elige una con cuota disponible (elimina proyectos no usados en console.cloud.google.com/billing si hace falta).',
    'new.firebase.q.billingAccount.other': 'Otra — introducir ID de cuenta manualmente',
    'new.firebase.q.billingAccount.manualId': 'ID de cuenta de facturación (ej: 018A70-7D0548-0F84A8)',
    'new.firebase.q.billingAccount.manualId.hint': 'Encuéntralo en console.cloud.google.com/billing',
    'new.firebase.q.billingAccount.manualId.required': 'El ID de la cuenta de facturación es obligatorio.',
    'new.firebase.q.organization': '¿En qué organización GCP crear el proyecto?',
    'new.firebase.q.organization.none': 'Sin organización (cuenta personal / proyecto independiente)',
    'new.firebase.q.organization.hint': 'Organizaciones vinculadas a tu cuenta gcloud',
    'new.firebase.create.billingRetry.title': 'Vincula la facturación manualmente (cuota excedida o error de billing):',
    'new.firebase.create.billingRetry.hint': 'Consejo: El límite es 3 proyectos por cuenta de facturación. Elimina proyectos no usados en el enlace de arriba. Si acabas de eliminar uno, espera 2–5 min a que se propague el cambio y reintenta.',
    'new.firebase.create.billingRetry.ready': 'He vinculado la facturación. ¿Reintentar?',
    'new.firebase.create.billingRetry.retrying': 'Reintentando…',
    'new.firebase.create.billingRetry.exit': 'Ejecuta de nuevo con "Usar proyecto existente" después de vincular la facturación.',
    'new.firebase.create.projectQuotaExceeded': 'Cuota de proyectos excedida. Elimina proyectos no usados en console.cloud.google.com o ingresa un proyecto existente abajo.',
    'new.firebase.create.creatingPush': 'Creando proyecto Firebase para notificaciones push…',
    'new.firebase.create.successPush': 'Proyecto Firebase creado para FCM + Remote Config.',
    'new.supabase.q.orgSelect': '¿En qué organización crear el proyecto?',
    'new.supabase.orgsRequired': 'No se encontraron organizaciones. Ejecuta supabase login e intenta de nuevo.',
    'new.supabase.q.region': '¿Dónde están la mayoría de los usuarios de tu app?',
    'new.supabase.q.region.brazil': '🇧🇷  Brasil (São Paulo)           — sa-east-1',
    'new.supabase.q.region.us':     '🇺🇸  Estados Unidos (Virginia)    — us-east-1',
    'new.supabase.q.region.europe': '🇪🇺  Europa (Irlanda)             — eu-west-1',
    'new.supabase.q.region.global': '🌍  Global / No sé                — us-east-1',
    'new.supabase.q.dbPassword': 'Contraseña del banco (mín 6 caracteres)',
    'new.supabase.q.dbPassword.required': 'La contraseña debe tener al menos 6 caracteres.',
    'new.supabase.creating': 'Creando proyecto en Supabase…',
    'new.supabase.created': 'Proyecto creado correctamente.',
    'new.supabase.createFailed': 'No se pudo crear el proyecto',
    'new.supabase.loginHint': 'Ejecuta: supabase login. Luego ingresa la URL y clave de tu proyecto existente.',
    'new.supabase.setup': 'Vinculando proyecto y desplegando…',
    'new.supabase.setupManual': 'Ejecuta manualmente: supabase link, supabase db push, supabase functions deploy',
    'new.supabase.q.useExisting.orgSelect': '¿En qué organización está el proyecto?',
    'new.supabase.q.useExisting.projectSelect': '¿Qué proyecto Supabase existente quieres usar?',
    'new.supabase.projectsRequired': 'No se encontraron proyectos en esta organización.',
    'new.supabase.q.dbPassword.existing': 'Contraseña del banco del proyecto (necesaria para vincular y aplicar migraciones)',
    'new.supabase.existingLinked': 'Proyecto listo para vincular y aplicar migraciones.',
    'setup.license.loaded': '✓ Clave de licencia cargada desde la configuración local.',
    'setup.license.saved': '✓ Clave de licencia validada y guardada.',
    'setup.license.invalid': 'Formato de licencia inválido. Se espera XXXX-XXXX-XXXX-XXXX.',
    'setup.error.targetNotEmpty': 'El directorio de destino no está vacío: {path}',
    'setup.error.targetExists': 'El directorio de destino ya existe: {path}',
    'setup.error.coreMissing': 'No se encontro la carpeta del core template: {path}',
    'setup.error.requiredChecksFailed': 'Fallo en verificaciones obligatorias. Ejecuta `kasy doctor`.',
    'setup.error.generatingFailed': 'Error al generar el proyecto.',
    'setup.error.conflictHint': 'Consejo: Elimina la carpeta del proyecto y ejecuta de nuevo, o usa un directorio vacío.',
    'setup.spinner.generating': 'Generando archivos del proyecto...',
    'setup.success.created': 'Proyecto creado correctamente.',
    'setup.success.complete': '✓ Setup completado',
    'setup.success.location': 'Ubicacion',
    'setup.success.nextSteps': 'Siguientes pasos',
    'setup.success.stepPubGet': 'flutter pub get',
    'setup.success.stepRun': 'flutter run',
    'validate.title': 'Kasy Validate',
    'validate.success': '✓ Matriz de validación aprobada.',
    'validate.failed': 'La matriz de validación fallo.',
    'validate.error': 'Una o más combinaciones de validación fallaron.',
    'validate.projectNotFound': 'Proyecto no encontrado',
    'validate.ok': 'ok',
    'validate.fail': 'fallo',
    'validate.passed': 'aprobado',

    // ── Flujo Firebase ────────────────────────────────────────────────────
    'cli.command.firebase.description': '🔥 Crear app Flutter completo con Firebase (recomendado)',
    'new.banner': '✨ Nuevo app Flutter',
    'new.subtitle': 'Elige el backend: Firebase, Supabase o API REST.',
    'new.subtitle2': '🔒 El setup corre en tu máquina con tus credenciales — sin acceso de terceros.',
    'new.q.backend': '¿Donde quieres guardar los datos de tu app?',
    'new.q.backend.firebase.desc': 'El más fácil para empezar — auth, base de datos y storage listos',
    'new.q.backend.supabase.desc': 'Base de datos SQL (PostgreSQL) con más control',
    'new.q.backend.api.desc': 'Ya tienes tu propio servidor',

    'new.q.mode': '¿Como quieres configurar?',
    'new.q.mode.quick': '⚡ Rápido — pocas preguntas, valores inteligentes',
    'new.q.mode.advanced': '🛠  Avanzado — todas las opciones y credenciales ahora',

    'new.q.preset': '¿Qué features incluir?',
    'new.q.preset.starter': '⚡ Starter — analytics + errores + onboarding',
    'new.q.preset.saas': '💰 SaaS — suscripciones + analytics + onboarding + feedback',
    'new.q.preset.content': '📱 Contenido — crash reports + analytics + onboarding + AI chat',
    'new.q.preset.full': '🚀 Completo — todas las features',
    'new.q.preset.custom': '⚙️  Personalizar — elige feature a feature',
    'new.q.preset.none': '○  Ninguno — solo el core',

    'new.firebase.success.deployStep': '• Desplegar backend (desde dentro de la carpeta del proyecto):',

    'cli.command.deploy.description': 'Publica el servidor en Firebase o Supabase',
    'cli.command.check.description': 'Verifica si las notificaciones push están configuradas (usa --fix para arreglar)',
    'deploy.q.project': 'Firebase Project ID:',
    'deploy.q.serviceAccount': 'Ruta al service account JSON:',
    'deploy.detected.project': '✓ Proyecto Firebase detectado:',
    'deploy.detected.serviceAccount': '✓ Service account detectado:',
    'deploy.error.notProject': 'No se encontro firebase.json. Ejecute kasy deploy desde dentro de la carpeta del proyecto.',

    'cli.command.ios.description': 'Publica la app en la App Store (necesita Mac)',
    'cli.command.ios.configure.description': 'Configurar credenciales Apple para subida local del IPA',
    'cli.command.ios.release.description': 'Incrementa build, genera IPA y sube a App Store Connect',
    'cli.command.ios.build.description': 'Solo genera el IPA (sin subir)',
    'cli.command.ios.clean.description': 'Limpia cachés Flutter/Xcode tras fallo en build iOS',
    'cli.command.ios.picker.intro': 'Publicar en la App Store',
    'cli.command.ios.picker.message': '¿Qué quieres hacer?',
    'cli.command.ios.help.before': 'Como publicar en la App Store:\n  1) kasy ios configure  → hazlo una vez (guarda las credenciales Apple)\n  2) kasy ios release    → ejecuta en cada nueva version (build + subida)\n\nUsa "build" si solo quieres generar el IPA, "clean" si un build fallo.\n',
    'cli.command.codemagic.description': 'Compila la app en la nube (sin necesitar Mac)',
    'cli.command.codemagic.configure.description': 'Configurar credenciales API de Codemagic',
    'cli.command.codemagic.release.description': 'Iniciar build del workflow iOS en Codemagic',
    'cli.command.codemagic.status.description': 'Estado del build Codemagic por ID',
    'cli.command.codemagic.picker.intro': 'Compilar en la nube con Codemagic',
    'cli.command.codemagic.picker.message': '¿Qué quieres hacer?',
    'cli.command.codemagic.picker.statusHint': 'Pregunta el ID del build',
    'cli.command.codemagic.help.before': 'Como compilar con Codemagic (sin necesitar Mac):\n  1) kasy codemagic configure  → hazlo una vez (guarda el token de la API)\n  2) kasy codemagic release    → inicia un build en la nube por version\n\nUsa "status <buildId>" para seguir el progreso de un build.\n',

    'ios.configure.title': 'App Store iOS — configuración',
    'ios.configure.bundleId': 'Bundle ID',
    'ios.configure.doc': 'Guía',
    'ios.configure.openingLinks': 'Abriendo App Store Connect en el navegador…',
    'ios.configure.note.title': 'Voy a pedir 3 cosas de App Store Connect',
    'ios.configure.note.body': '1) API Key ID — en Users and Access → Keys.\n2) Issuer ID — arriba de la misma pagina.\n3) El archivo .p8 (clave privada) descargado al crear la key.\n\nEl App ID es opcional, solo si tienes varias apps.',
    'ios.configure.q.apiKey': 'Key ID de la API App Store Connect',
    'ios.configure.q.issuerId': 'Issuer ID (UUID)',
    'ios.configure.q.p8Path': 'Ruta del archivo AuthKey_XXXXX.p8 descargado',
    'ios.configure.q.appId': 'App ID en App Store Connect (opcional)',
    'ios.configure.q.required': 'Obligatorio',
    'ios.configure.q.p8NotFound': 'Archivo no encontrado',
    'ios.configure.cancelled': 'Configuración cancelada',
    'ios.configure.success': 'Credenciales Apple guardadas',
    'ios.configure.p8Installed': 'Clave instalada en',
    'ios.configure.next': 'Siguiente paso',
    'ios.release.title': 'Generando y subiendo release iOS…',
    'ios.release.success': 'Release iOS subida',
    'ios.release.task.building': 'Compilando IPA (puede tardar 2-5 min)…',
    'ios.release.task.uploading': 'Subiendo IPA a App Store Connect…',
    'ios.release.task.done': 'Compilacion + subida completadas',
    'ios.release.task.failed': 'La compilacion fallo — mira la salida debajo',
    'ios.build.title': 'Generando IPA iOS…',
    'ios.build.success': 'IPA generado',
    'ios.build.task.building': 'Compilando IPA (puede tardar 2-5 min)…',
    'ios.build.task.done': 'IPA listo en build/ios/ipa/',
    'ios.build.task.failed': 'La compilacion fallo — mira la salida debajo',
    'ios.error.notProject': 'No es un proyecto Flutter iOS (pubspec.yaml + ios/ requeridos).',
    'ios.error.noScript': 'scripts/release-ios.sh no encontrado. Ejecute: kasy update ios-release',
    'ios.error.notMac': 'Release iOS local requiere macOS con Xcode.',
    'ios.error.useCodemagic': 'Use release en la nube',
    'ios.error.notConfigured': 'Credenciales Apple no configuradas',
    'ios.error.runConfigure': 'Ejecute: kasy ios configure',
    'ios.release.askConfigure': '¿Quieres configurar las credenciales Apple ahora?',
    'ios.error.signing': 'Firma iOS no configurada (falta DEVELOPMENT_TEAM).',
    'ios.error.signingHint': 'Abra ios/Runner.xcworkspace en Xcode → Runner → Signing & Capabilities → elija su Team.',
    'ios.error.googleUrlScheme': 'URL scheme iOS de Google Sign-In no configurado.',
    'ios.error.googleUrlSchemeHint': 'Corrección: ejecute flutterfire configure, luego kasy ios clean, o regenere el proyecto antes del build.',
    'ios.warn.lowDisk': 'Poco espacio en disco ({gb} GB libres; se recomiendan al menos {min} GB para builds Xcode).',
    'ios.hints.title': 'La caché de Xcode puede estar corrupta — intente:',
    'ios.hints.closeXcode': 'Cierre Xcode por completo',
    'ios.hints.retry': 'Luego reintente',
    'ios.hints.manual': 'O manualmente',
    'ios.hints.network.title': 'Fallo de red al descargar dependencias de iOS',
    'ios.hints.network.body': 'Tu conexión se cayó mientras pod install descargaba librerías. Suele ser temporal.',
    'ios.hints.network.step1': 'Confirma que tu internet está estable',
    'ios.hints.network.step2': 'Intenta de nuevo',
    'ios.hints.network.step3': 'Si persiste',
    'ios.clean.title': 'Limpiando cachés de build iOS…',
    'ios.clean.success': 'Cachés limpiadas',
    'ios.clean.notMac': 'La limpieza iOS solo está disponible en macOS.',
    'ios.clean.step.flutterClean': 'flutter clean',
    'ios.clean.step.derivedData': 'Eliminar DerivedData de Xcode (Runner)',
    'ios.clean.step.buildDir': 'Eliminar carpetas build',
    'ios.clean.step.pubGet': 'flutter pub get',
    'ios.clean.step.pods': 'pod install',

    'codemagic.configure.title': 'Codemagic — configuración',
    'codemagic.configure.doc': 'Guía',
    'codemagic.configure.checklist': 'Complete firma + App Store Connect en el panel Codemagic (vea la guía).',
    'codemagic.configure.openingLinks': 'Abriendo Codemagic en el navegador…',
    'codemagic.configure.q.token': 'Token API de Codemagic',
    'codemagic.configure.q.appId': 'App ID en Codemagic',
    'codemagic.configure.q.workflowId': 'Workflow ID (de codemagic.yaml)',
    'codemagic.configure.q.branch': 'Rama Git para build',
    'codemagic.configure.q.required': 'Obligatorio',
    'codemagic.configure.cancelled': 'Configuración cancelada',
    'codemagic.configure.success': 'Credenciales Codemagic guardadas',
    'codemagic.configure.next': 'Siguiente paso',
    'codemagic.release.title': 'Disparando build en Codemagic…',
    'codemagic.release.triggered': 'Build iniciado',
    'codemagic.release.spin': 'Iniciando build en Codemagic…',
    'codemagic.release.spinDone': 'Build encolado en Codemagic',
    'codemagic.status.title': 'Estado del build',
    'codemagic.status.usage': 'Uso: kasy codemagic status <buildId>',
    'codemagic.status.spin': 'Consultando estado del build…',
    'codemagic.status.spinDone': 'Estado obtenido',
    'codemagic.error.notProject': 'No es un proyecto Flutter iOS (pubspec.yaml + ios/ requeridos).',
    'codemagic.error.notConfigured': 'Codemagic no configurado',
    'codemagic.error.addCi': 'Agregue CI primero: kasy add ci (crea codemagic.yaml)',
    'codemagic.error.runConfigure': 'Ejecute: kasy codemagic configure',
    'codemagic.error.googleUrlScheme': 'Build Codemagic bloqueado: URL scheme iOS de Google Sign-In no configurado.',

    'doctor.ios.title': 'Release iOS',
    'doctor.ios.appleOk': 'Credenciales Apple configuradas',
    'doctor.ios.appleMissing': 'Credenciales Apple faltantes — kasy ios configure',
    'doctor.ios.p8Ok': 'Archivo de clave API encontrado',
    'doctor.ios.p8Missing': 'AuthKey .p8 faltante — kasy ios configure',
    'doctor.ios.codemagicOk': 'Credenciales Codemagic configuradas',
    'doctor.ios.codemagicMissing': 'Codemagic opcional — kasy codemagic configure',
    'doctor.ios.notMac': 'Release iOS local requiere macOS',
    'doctor.ios.doc': 'Documentación',
    'doctor.ios.signingOk': 'Firma Xcode (Development Team) configurada',
    'doctor.ios.signingMissing': 'Firma Xcode no definida — abra Runner en Xcode y elija su Team',
    'doctor.ios.googleUrlSchemeOk': 'URL scheme iOS de Google Sign-In configurado',
    'doctor.ios.googleUrlSchemeMissing': 'URL scheme iOS de Google Sign-In divergente',
    'doctor.ios.googleUrlSchemeSkipped': 'Check del URL scheme iOS de Google Sign-In omitido (GoogleService-Info.plist ausente)',
    'doctor.ios.appleSignInEntitlementOk': 'Entitlement de Apple Sign-In configurado',
    'doctor.ios.appleSignInEntitlementMissing': 'Entitlement de Apple Sign-In ausente — agrega la capability Sign In with Apple en Xcode',
    'doctor.ios.facebookOk': 'Credenciales de Facebook configuradas (iOS)',
    'doctor.ios.facebookPlaceholders': 'Credenciales de Facebook son aún placeholders — actualiza FacebookAppID y FacebookClientToken en Info.plist',
    'doctor.ios.facebookSkipped': 'Check de credenciales de Facebook omitido (FacebookAppID ausente en Info.plist)',
    'doctor.android.facebookOk': 'Credenciales de Facebook configuradas (Android)',
    'doctor.android.facebookPlaceholders': 'Credenciales de Facebook son aún placeholders — actualiza facebook_app_id y facebook_client_token en android/app/src/main/res/values/strings.xml',

    'doctor.revenuecat.title': 'RevenueCat',
    'doctor.revenuecat.keysOk': 'Claves de API configuradas (iOS + Android)',
    'doctor.revenuecat.keysEmpty': 'Ninguna clave configurada — define al menos RC_TEST_KEY en .env (kasy run la usa en simulador/emulador)',
    'doctor.revenuecat.testKeyOk': 'RC_TEST_KEY configurada (test_) — usada en simulador/emulador',
    'doctor.revenuecat.testKeyMissing': 'RC_TEST_KEY ausente — el flujo de suscripción no funciona en simulador/emulador',
    'doctor.revenuecat.iosProdOk': 'RC_IOS_PROD_KEY configurada (appl_) — usada en iPhone físico',
    'doctor.revenuecat.iosProdMissing': 'RC_IOS_PROD_KEY ausente — kasy run en iPhone físico va a usar la clave de prueba',
    'doctor.revenuecat.androidProdOk': 'RC_ANDROID_PROD_KEY configurada (goog_) — usada en Android físico',
    'doctor.revenuecat.androidProdMissing': 'RC_ANDROID_PROD_KEY ausente — kasy run en Android físico va a usar la clave de prueba',
    'doctor.revenuecat.prefixMismatch': 'Clave con prefijo incorrecto: {key} debe empezar con {expected}',
    'doctor.revenuecat.keysTest': 'Solo claves Test Store (test_) configuradas — los releases en la tienda requieren appl_/goog_, sino el app crashea',
    'doctor.revenuecat.webhookUrlSupabase': 'URL del webhook (pega en RevenueCat → Integrations → Webhooks)',
    'doctor.revenuecat.webhookUrlFirebase': 'URL del webhook: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',

    'update.iosRelease.success': 'Archivos de release iOS actualizados',
    'add.iosRelease.success': 'Archivos de release iOS agregados',
    'add.iosRelease.already': 'Archivos de release iOS ya presentes',

    'new.api.q.baseUrl': '¿Cual es la URL base de tu API?',
    'new.api.q.baseUrl.hint': 'https://api.example.com',
    'new.firebase.banner': '🔥 Nuevo app Flutter — Firebase',
    'new.firebase.subtitle': 'Proyecto completo: auth, Firestore, notificaciones, login social y más.',
    'new.prereq.title': 'Antes de empezar, asegúrate de tener:',
    'new.firebase.prereq.title': 'Antes de empezar, asegúrate de tener:',
    'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
    'new.firebase.prereq.create.2': '2. Plan Blaze (tarjeta de crédito — requerido para Cloud Functions)',
    'new.firebase.prereq.create.billingLimit': '3. Límite: hasta 3 proyectos por cuenta de facturación. Elimina proyectos no usados o solicita aumento de cuota si ya alcanzaste el límite.',
    'new.firebase.prereq.create.projectQuota': '4. Cuota de proyectos: la cuenta Google tiene un límite (ej. 10–30 proyectos). Elimina proyectos no usados en console.cloud.google.com si es necesario.',
    'new.firebase.prereq.create.note': '   Proyecto y APIs se crearán automáticamente.',
    'new.firebase.prereq.create.pushNote': '   Proyecto Firebase para FCM + Remote Config se creará automáticamente (sin cuenta de servicio).',
    'new.firebase.prereq.1': '1. Firebase CLI instalado (npm i -g firebase-tools) + firebase login',
    'new.firebase.prereq.2': '2. Proyecto Firebase creado en console.firebase.google.com',
    'new.firebase.prereq.3': '3. Plan Blaze activado (tarjeta de crédito — requerido para Cloud Functions)',
    'new.firebase.prereq.4': '4. gcloud CLI instalado + gcloud auth login (para activar APIs automáticamente)',
    'new.firebase.prereq.5': '5. Antes del deploy: activa Secret Manager API y Firebase Storage (ver PREREQUISITES.md o enlaces tras generar)',
    'new.firebase.prereq.doc': '   Lista completa: PREREQUISITES.md',

    'new.firebase.q.appName': '¿Cuál es el nombre de tu app?',
    'new.firebase.q.appName.hint': 'ej: Mi App Increible',
    'new.firebase.q.appName.required': 'El nombre de la app es obligatorio.',

    'new.firebase.q.bundleId': '¿Cuál es el identificador único (Bundle ID) de tu app?',
    'new.firebase.q.bundleId.hint': 'Funciona como una dirección para tu app, ej: com.miempresa.miapp',
    'new.firebase.q.bundleId.invalid': 'Formato inválido. Usa: com.empresa.app',
    'new.firebase.q.bundleId.required': 'El Bundle ID es obligatorio.',

    'new.firebase.q.projectId': '¿Cuál es el ID de tu proyecto Firebase?',
    'new.firebase.q.projectId.hint': 'Encuéntralo en Firebase Console → tu proyecto → Configuración',
    'new.firebase.q.projectId.required': 'El Firebase Project ID es obligatorio.',

    'new.firebase.q.modules': '¿Qué features opcionales quieres incluir?',
    'new.firebase.q.modules.hint': 'Espacio para seleccionar, Enter para confirmar',
    'new.modules.header.common': '── Comunes (todos los backends) ──',
    'new.modules.header.features': '── Pantallas y features ──',
    'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
    'new.modules.header.ci': '── CI/CD ──',
    'new.modules.header.monetization': '── Monetizacion ──',
    'new.firebase.module.revenuecat': '💰 RevenueCat (activa Subscriptions)',
    'new.firebase.module.sentry': '🚨 Crash Reports (Sentry)',
    'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
    'new.firebase.module.facebook': '👤 Facebook (Login + Ads)',
    'new.firebase.module.web': '🌐 Web Support (PWA, solo Firebase)',
    'new.firebase.module.widget': '📱 Home Widget (iOS/Android)',
    'new.firebase.module.llm_chat': '🤖 AI Chat (OpenAI/Gemini)',
    'new.firebase.module.local_notifications': '🔔 Local Reminders (sin servidor)',
    'new.firebase.module.feedback': '💬 Feature Requests (requiere Firebase o Supabase)',
    'new.firebase.module.ci': '⚙️ CI/CD (GitHub + Codemagic)',
    'new.firebase.module.onboarding': '👋 Onboarding (flujo de bienvenida)',

    'new.firebase.q.secrets.configureNow': '¿Configurar los secrets del servidor ahora? (webhook RevenueCat, Meta Ads)',
    'new.firebase.q.secrets.configureNow.hint': 'Si no ahora, vea el README para los comandos de configuración después',
    'new.firebase.q.secrets.later': '• Secrets del servidor no configurados — se configurarán durante `kasy deploy`.',
    'new.firebase.q.revenuecat.webhookKey': 'Clave secreta del webhook (se sugirió un valor aleatorio — presiona Enter para aceptar o escribe el tuyo)',
    'new.firebase.q.revenuecat.webhookKey.hint': 'Guarda este valor. En el panel RevenueCat, pega como: Bearer <este-valor>',
    'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (Conversions API, opcional)',
    'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (opcional)',
    'new.firebase.q.revenuecat.test': 'Clave Test Store (test_xxx) — opcional, sirve para iOS+Android y funciona en simulador',
    'new.firebase.q.revenuecat.test.invalid': 'Clave Test Store debe empezar con test_ (ej: test_xxxxxxxxxxxxxxxxxxxx).',
    'new.firebase.q.revenuecat.iosProd': 'Clave iOS de producción (appl_xxx) — opcional, se usa solo en dispositivo físico',
    'new.firebase.q.revenuecat.iosProd.invalid': 'Clave iOS de producción debe empezar con appl_ (ej: appl_xxxxxxxxxxxxxxx).',
    'new.firebase.q.revenuecat.androidProd': 'Clave Android de producción (goog_xxx) — opcional, se usa solo en dispositivo físico',
    'new.firebase.q.revenuecat.androidProd.invalid': 'Clave Android de producción debe empezar con goog_ (ej: goog_xxxxxxxxxxxxxxx).',
    'new.firebase.q.revenuecat.atLeastOne': 'Configura al menos una clave (Test, iOS prod o Android prod). Puedes agregar las demás después en .env.',
    // Legacy keys — kept for projects/scripts that still reference them.
    'new.firebase.q.revenuecat.android': 'Clave API RevenueCat para Android',
    'new.firebase.q.revenuecat.ios': 'Clave API RevenueCat para iOS',
    'new.firebase.q.paywall': '¿Qué estilo de paywall?',
    'new.firebase.q.paywall.hint': 'Layout de la pantalla de suscripciones — puedes cambiarlo después en RevenueCat',
    'new.firebase.q.revenuecat.web': '¿Habilitar suscripciones en web (RevenueCat Web Billing)?',
    'new.firebase.q.revenuecat.web.hint': 'Requiere Web Billing en dashboard RevenueCat + Stripe. Deja desmarcado si no necesitas.',
    'new.firebase.q.revenuecat.webKey': 'Clave API RevenueCat Web Billing (rcb_xxx o rcb_sb_xxx, opcional — configurar después)',
    'new.firebase.success.revenuecatWeb': '• RevenueCat Web: agrega RC_WEB_API_KEY (launch.json) para suscripciones en web',
    'new.firebase.q.sentry.dsn': 'DSN de Sentry (deja en blanco para configurar después)',
    'new.firebase.q.sentry.dsn.invalid': 'DSN inválido. Formato esperado: https://clave@host/project-id',
    'new.firebase.q.mixpanel.token': 'Token de Mixpanel (deja en blanco para configurar después)',
    'new.firebase.q.facebook.appId': 'App ID de Facebook',
    'new.firebase.q.facebook.appId.required': 'App ID de Facebook es obligatorio.',
    'new.firebase.q.facebook.appId.invalid': 'App ID de Facebook debe ser numérico (ej: 1234567890).',
    'new.firebase.q.facebook.token': 'Token de App Facebook',
    'new.firebase.q.facebook.token.required': 'Token de App Facebook es obligatorio.',
    'new.firebase.q.revenuecat.android.required': 'Clave Android de RevenueCat es obligatoria.',
    'new.firebase.q.revenuecat.ios.required': 'Clave iOS de RevenueCat es obligatoria.',
    'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID debe ser numérico (ej: 1234567890).',
    'new.firebase.q.revenuecat.webKey.invalid': 'La clave Web Billing debe empezar con rcb_ (ej: rcb_sb_xxx o rcb_xxx).',

    'new.firebase.confirm.title': 'Resumen de configuración:',
    'new.firebase.confirm.app': 'App',
    'new.firebase.confirm.bundleId': 'Bundle ID',
    'new.firebase.confirm.project': 'Firebase',
    'new.firebase.confirm.modules': 'Features',
    'new.firebase.confirm.none': 'ninguno',
    'new.firebase.confirm.proceed': '¿Crear el proyecto ahora?',

    'new.firebase.step.copying': 'Copiando plantilla del proyecto...',
    'new.firebase.step.pubGet': 'Instalando paquetes Flutter...',
    'new.firebase.step.buildRunner': 'Generando código (Riverpod/Freezed)...',
    'new.firebase.step.flutterfire': 'Configurando Firebase (flutterfire)...',
    'new.firebase.step.deploy': 'Desplegando Cloud Functions + reglas de Firestore...',
    'new.firebase.step.done': '¡Listo!',

    'new.firebase.success.title': '🎉 ¡Tu app está lista!',
    'new.firebase.success.open': 'Abre el proyecto:',
    'new.firebase.success.run': 'Ejecuta el app:',
    'new.firebase.success.runMake': 'O usa make: make run | make run-ios | make run-android',
    'new.firebase.success.deviceSetup': 'Antes de ejecutar en dispositivo:',
    'new.firebase.success.deviceSetup.ios': 'iOS: conecta iPhone por cable → confiar en este ordenador → Xcode → Window → Devices → emparejar',
    'new.firebase.success.deviceSetup.android': 'Android: Ajustes → Opciones de desarrollador → activar depuración USB',
    'new.firebase.success.hotReload': "Hot reload: pulsa 'r' en la terminal mientras el app corre. Los cambios aparecen al instante.",
    'new.firebase.success.oneLiner': 'O copia y pega para entrar y ejecutar:',
    'new.firebase.success.configure': 'Configura cuando quieras:',
    'new.firebase.success.alreadyDone': 'Ya configurado por la CLI:',
    'new.firebase.success.manualNeeded': 'Configura manualmente (si hace falta):',
    'new.firebase.success.apn': '• Clave APN (push iOS): Firebase Console → Config. del Proyecto → Cloud Messaging',
    'new.firebase.success.social': '• Activa login social en Firebase Console → Authentication (Google y Apple ya están en el código; solo actívalos allí)',
    'new.firebase.success.googleSignIn': '• Login con Gmail: 1) Activa en Firebase Console → Auth → Sign-in method → Google. 2) El CLI rellena kGoogleWebClientId (google_auth_options.dart) desde google-services.json para Android/iOS. Web usa signInWithPopup.',
    'new.firebase.success.sentry': '• Sentry: Para reportes de error en producción. Obtén DSN en sentry.io. Ya en launch.json para dev. Para release: --dart-define=SENTRY_DSN=xxx',
    'new.firebase.success.mixpanel': '• Mixpanel: Para analytics en producción. Ya en launch.json para dev. Para release: --dart-define=MIXPANEL_TOKEN=xxx',
    'new.firebase.success.web': '• Web (adicional): Android e iOS funcionan con normalidad. Para probar en browser: "flutter run -d chrome" o "flutter run -d web-server --web-port=5000". Para publicar: "flutter build web". Las notificaciones push son exclusivas de mobile y se desactivan automaticamente en web.',

    'new.firebase.q.deploy': '¿Hacer deploy de Cloud Functions + reglas de Firestore ahora?',
    'new.firebase.q.deploy.hint': 'Requiere plan Blaze y firebase-tools instalado globalmente',
    'new.firebase.deployFailed.hint': 'Si el deploy falló: crea Firestore y Storage en la Consola primero:',
    'new.firebase.deployFailed.firestore': '• Firestore: crea la base (Crear base → Modo Nativo)',
    'new.firebase.deployFailed.storage': '• Storage: clic en Comenzar',
    'new.firebase.deployFailed.orGcloud': 'O crea Firestore por CLI:',
    'new.firebase.success.deployLater': '• Deploy del backend cuando estés listo (desde dentro de la carpeta del proyecto):',
    'new.firebase.success.beforeDeploy': 'Antes del firebase deploy, activa (clic para abrir):',
    'new.firebase.success.secretManager': '• Secret Manager API',
    'new.firebase.success.firestore': '• Firestore (crea la base si no existe)',
    'new.firebase.success.storage': '• Firebase Storage (Comenzar)',
    'new.firebase.success.auth': '• Firebase Authentication (Email/Contraseña)',
    'new.firebase.success.security': '🔒 .gitignore excluye .env y otros secretos. Cloud Functions usan secrets en el servidor.',

    'new.firebase.interactive.title': '⚠️  Configuración de la Nube Requerida',
    'new.firebase.interactive.desc': 'Por medidas de seguridad de Google, necesitas hacer estos pasos:',
    'new.firebase.interactive.step1': '1. Crea la base de datos (Firestore): ',
    'new.firebase.interactive.step2': '2. Sube al plan Blaze (Pay-as-you-go): ',
    'new.firebase.interactive.step3': '3. Habilita Auth (Email y Contraseña): ',
    
    'new.firebase.interactive.prompt1': '¿Ya creaste Firestore y habilitaste Autenticación en el enlace arriba?',
    'new.firebase.interactive.prompt2': '¿Hiciste el upgrade al Plan Blaze? (Requerido para Cloud Functions)',
    'new.firebase.interactive.googleAuthNote': '* Activa Google Sign-In manualmente (Email/Contraseña y Anônimo ya fueron activados): ',
    'new.firebase.interactive.billingNeeded': 'Plan Blaze aún no activo. Actívalo en el enlace de arriba y espera la detección automática.',
    'new.firebase.interactive.billingWaiting': 'Verificando estado del Blaze...',
    'new.firebase.interactive.billingTimeout': 'Plan Blaze no confirmado tras el tiempo límite. Despliegue omitido — ejecuta manualmente cuando estés listo.',
    'new.firebase.interactive.authWarn': 'No se pudo activar Email/Contraseña y Anónimo automáticamente. Actívalos manualmente:',
    'new.firebase.existing.apisFailed': 'No se pudieron activar las APIs:',
    'new.firebase.existing.googleSignInManual': 'Google Sign-In: activa manualmente en Authentication → Sign-in method → Google',

    'new.firebase.interactive.ready': '¿Listo para publicar Push Notifications + Reglas ahora?',
    'new.firebase.interactive.deploying': 'Desplegando Cloud Functions + Reglas (Storage y Firestore)...',
    'new.firebase.interactive.errorTitle': 'Ocurrio un error en el despliegue.',
    'new.firebase.interactive.errorHint': 'Revisa haber creado Firestore y activado el plan Blaze con tarjeta.',
    'new.firebase.interactive.laterHint': 'Puedes publicar luego desde la carpeta de tu proyecto corriendo: ',
    'new.firebase.interactive.skipped': 'Despliegue omitido. Puedes publicar más tarde.',

    'new.firebase.warn.flutterfire': '⚠️  FlutterFire no pudo generar firebase_options_dev.dart automáticamente.',
    'new.firebase.warn.flutterfire.manual': 'Ejecuta manualmente en la carpeta del proyecto:',

    'new.firebase.error.templateMissing': 'Plantilla Firebase no encontrada en: {path}. Asegúrate de que la carpeta Firebase/ existe.',
    'new.firebase.error.dirNotEmpty': 'El directorio "{path}" ya existe y no está vacío.',
    'new.firebase.error.aborted': 'Setup cancelado.',

    'new.supabase.prereq.1': '1. Cuenta Supabase en supabase.com',
    'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI instalados (ambos obligatorios)',
    'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase necesario para push)',
    'new.supabase.prereq.login': '   Si creas manualmente: ten URL y anon key del proyecto listos',
    'new.supabase.loginRequired': '⚠️  Debes estar conectado para crear proyecto. Ejecuta supabase login primero.',
    'new.supabase.loginCommand': '   supabase login',
    'new.supabase.success.done.db': '• Base de datos: tablas, politicas RLS',
    'new.supabase.success.done.storage': '• Storage: bucket kasy con politicas',
    'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
    'new.supabase.success.done.secrets': '• Secrets de Edge Function (si se informaron)',
    'new.supabase.success.done.launch': '• launch.json con Sentry, Mixpanel, RevenueCat',
    'new.supabase.success.auth': '• Auth: Email ya activado. Activa Google, Apple y Facebook en: {authUrl}',
    'new.supabase.success.storage': '• Storage: Bucket kasy creado con politicas (listo)',
    'new.supabase.success.fcm': '• Push (FCM): Configura en Firebase Console (plan Blaze). App lista para Supabase + FCM. URL: {fcmUrl}',
    'new.supabase.success.deployLater': '• Deploy del backend cuando estes listo (desde dentro de la carpeta del proyecto):',

    'new.api.prereq.1': '1. Tu API REST corriendo y accesible',
    'new.api.prereq.2': '2. URL base de la API (ej: https://api.yourapp.com)',
    'new.api.prereq.3': '3. Firebase CLI obligatorio para notificaciones push (FCM)',
    'new.api.success.backendUrl': '• Apunta BACKEND_URL a tu API en ejecución (launch.json)',
    'new.api.success.fcm': '• Firebase es necesario para notificaciones push (FCM) — configura la clave APNs en la consola de Firebase',
    'new.api.success.auth': '• Implementa los endpoints de auth social (Google, Apple) en tu backend',

    'new.outdated.hint': 'los proyectos creados ahora no tendrán las últimas mejoras.',
    'new.outdated.upgradeNow': '¿Actualizar a la última versión antes de crear? (requiere suscripción activa)',
    'new.outdated.upgraded': '¡kasy actualizado! Ejecuta kasy new nuevamente.',
    'new.success.title': '¡Proyecto creado con exito!',
    'new.success.nextSteps': 'Proximos pasos:',
    'new.success.step.cd': 'Ve a la carpeta del proyecto:',
    'new.success.step.deploy': 'Despliega el backend en Firebase:',
    'new.success.step.run': 'Ejecuta el app (con tus claves configuradas):',
    'new.success.step.run.vscode': '(o F5 en VS Code)',
    'new.success.step.console': 'Abre la consola del backend:',
    'new.fcm.generating': 'Generando clave de Service Account FCM…',
    'new.sha1.registering': 'Registrando SHA-1 para Google Sign-In (Android)…',
    'new.sha1.failed': 'SHA-1 no añadido automaticamente: {error}',
    'new.sha1.manual': 'Agregalo manualmente para que Google Sign-In funcione en Android:',
    'new.sha1.skipped.apiFailed': 'SHA-1 no añadido automáticamente. Motivo: {error}',
    'new.sha1.skipped.other': 'SHA-1 no añadido: {reason}',
    'new.sha1.addManually': 'Agrega manualmente: Firebase Console → Configuración del proyecto → Tus apps → Android → Agregar huella digital',
    'new.sha1.added': '✓ SHA-1 añadido (Google Sign-In)',
    'new.firestore.created': '✓ Firestore creado automáticamente',
    'new.firestore.notCreated.error': '⚠ Firestore no creado. Motivo: {error}',
    'new.firestore.notCreated': '⚠ Firestore no creado automáticamente',
    'new.storage.created': '✓ Firebase Storage creado automáticamente',
    'new.storage.notCreated.error': '⚠ Storage no creado. Motivo: {error}',
    'new.storage.notCreated': '⚠ Storage no creado automáticamente',
    'new.activateManually': 'Activa manualmente en la consola:',
    'new.fcm.serverConfig': 'Configura en tu servidor: FIREBASE_SERVICE_ACCOUNT_JSON="$(cat .kasy/fcm-service-account.json)"',
    'new.apns.warning': '⚠  Push iOS: configura la APNs Key en Firebase Console',
    'new.apns.step1': '1. Apple Developer Portal → Keys → crear APNs Key (.p8)',
    'new.apns.step2': '2. Firebase Console → Cloud Messaging → app iOS → subir la APNs Key',
    'new.firebase.create.estimatedTime': '(generalmente 3-5 min — no cierres la terminal)',
    'new.internet.warning': '📶  Asegúrate de tener una conexión a internet estable — este paso requiere red.',

    // run command
    'cli.command.run.description': 'Corre la app en celular, simulador o navegador',
    'cli.command.reset.description': 'Desinstala la app en simulador/emulador/dispositivo para probar como primera instalación',
    'reset.title': 'Resetear app en el dispositivo',
    'reset.scanning': 'Buscando simuladores, emuladores y dispositivos conectados...',
    'reset.prompt.pickDevice': '¿En cuál quieres resetear?',
    'reset.resetting': 'Reseteando',
    'reset.reinstalling': 'Reinstalando la app...',
    'reset.success.uninstalled': 'App desinstalada. Todos los datos y permisos fueron eliminados.',
    'reset.info.notInstalled': 'La app no estaba instalada en este dispositivo.',
    'reset.warn.noDevices': 'Ningún simulador, emulador o dispositivo en ejecución. Inicia uno e intenta de nuevo.',
    'reset.warn.nothingSelected': 'Ningún dispositivo seleccionado.',
    'reset.warn.iosUninstallFailed': 'simctl uninstall falló.',
    'reset.warn.androidUninstallFailed': 'adb uninstall no devolvió éxito.',
    'reset.warn.iosDeviceManual': 'iPhone físico: borra la app manualmente (mantén pulsado el ícono → Eliminar app), luego reinstala con kasy run.',
    'reset.warn.iosDeviceUninstallFailed': 'devicectl no pudo desinstalar. Verifica que el iPhone esté desbloqueado y confíe en esta Mac.',
    'reset.warn.webIncognito': 'Web: abre la app en una ventana de incógnito/privada del navegador para probar como nuevo visitante.',
    'reset.warn.unknownPlatform': 'Plataforma no soportada',
    'reset.error.notFlutterProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter.',
    'reset.error.noIdentifier': 'No pude leer el bundle id ni el package name de Android de este proyecto.',
    'reset.error.noBundleId': 'Bundle id de iOS no encontrado.',
    'reset.error.noPackageName': 'applicationId de Android no encontrado.',
    'reset.outro.skipped': 'Listo. La app no fue desinstalada.',
    'reset.outro.uninstalledOnly': 'Listo. Ejecuta kasy run para reinstalar.',
    'reset.outro.cancelled': 'Cancelado. La app no fue desinstalada.',
    'reset.prompt.xcodeOpen': 'Xcode está abierto y va a entrar en conflicto con la instalación. ¿Qué quieres hacer?',
    'reset.prompt.xcodeOpen.close': 'Cerrar Xcode automáticamente (recomendado)',
    'reset.prompt.xcodeOpen.skip': 'Dejar Xcode abierto e intentar igual',
    'reset.prompt.xcodeOpen.cancel': 'Cancelar reset',
    'reset.info.xcodeClosed': 'Xcode cerrado.',
    'reset.prompt.reinstallNow': 'App removida. Verifica en el dispositivo y reinstalar ahora?',
    'reset.prompt.clearLauncherCache': '¿Limpiar también la caché del launcher ({pkg})? Soluciona el preview gris de los widgets.',
    'reset.success.launcherCleared': 'Caché del launcher limpiada ({pkg}). Pantalla de inicio intacta.',
    'reset.warn.launcherCacheFailed': 'No se pudo limpiar la caché del launcher.',
    'reset.warn.launcherNotDetected': 'Launcher por defecto no detectado — saltando limpieza de caché.',
    'run.launching': 'Iniciando app Flutter...',
    'run.prompt.pickDevice': 'Varios dispositivos detectados. ¿En cuál quieres ejecutar?',
    'run.warn.nothingSelected': 'Ningún dispositivo seleccionado.',
    'run.updateHint.prefix': 'Mejoras disponibles para el proyecto —',
    'run.updateHint.suffix': 'para ver las novedades',
    'run.spinner.building': 'Iniciando Flutter…',
    'run.spinner.ready': 'Flutter listo — usa r (reload), R (restart), q (salir)',
    'run.spinner.failed': 'Flutter run fallo antes de iniciar',
    'run.stage.gradleFirstTime': 'Compilando Android (1.ª vez tarda 5-15 min — Gradle bajando dependencias)…',
    'run.stage.gradle': 'Compilando Android…',
    'run.stage.xcode': 'Compilando iOS…',
    'run.stage.pods': 'Instalando pods iOS…',
    'run.stage.installing': 'Instalando en el dispositivo…',
    'run.stage.syncing': 'Sincronizando archivos con el dispositivo…',
    'run.stage.buildSuccess': 'Build listo — abriendo la app…',
    'run.error.notFlutterProject': 'No se encontro pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter.',
    'run.error.flutterNotFound': 'Flutter no encontrado. Verifica que Flutter este instalado y en el PATH.',
    'run.rc.usingTest': 'RevenueCat: usando clave de prueba (test_) — simulador/emulador',
    'run.rc.usingProd': 'RevenueCat: usando claves de producción — dispositivo físico',
    'run.rc.fallbackToTest': 'RevenueCat: clave de producción ausente ({platform}) — usando test_; configura RC_{var} en .env para probar in-app purchase real',
    'run.rc.forcedTest': 'RevenueCat: --rc=test forzado',
    'run.rc.forcedProd': 'RevenueCat: --rc=prod forzado',
    'run.rc.forcedProdMissing': 'RevenueCat: --rc=prod pedido pero RC_IOS_PROD_KEY/RC_ANDROID_PROD_KEY no configuradas en .env',

    // doctor project checks
    'doctor.project.title': 'Proyecto',
    'doctor.project.appName': 'Nombre del app',
    'doctor.project.backend': 'Backend',
    'doctor.project.bundleId': 'Bundle ID',
    'doctor.project.pubGet': 'Dependencias instaladas (pubspec.lock presente)',
    'doctor.project.pubGetMissing': 'Ejecuta flutter pub get — pubspec.lock no encontrado',
    'doctor.project.modules': 'Features activos',
    'doctor.project.noModules': 'Ninguna feature opcional activa',

    // add command
    'cli.command.add.description': 'Añade algo nuevo a tu app (ej: kasy add ai_chat)',

    // docs command
    'cli.command.docs.description': 'Abre la documentación completa',

    // splash command
    'cli.command.splash.description': 'Cambia los logos del splash (claro/oscuro) y regenera los assets nativos',
    'splash.intro': 'Splash screen',
    'splash.validating': 'Validando archivos PNG...',
    'splash.validated': 'Los PNGs están bien',
    'splash.copying': 'Copiando logos a assets/images/...',
    'splash.copied': 'Logos copiados',
    'splash.android12Generating': 'Generando variantes con padding para Android 12+...',
    'splash.android12Generated': 'Variantes de Android 12+ generadas',
    'splash.generating': 'Regenerando splash nativo (Android, iOS, Web)...',
    'splash.generated': 'Splash nativo regenerado',
    'splash.done': 'Listo. Ejecuta "flutter run" para ver el nuevo splash.',
    'splash.warn.title': 'Avisos',
    'splash.warn.noAlphaLight': '{path} no tiene canal alpha (fondo transparente). El logo aparecerá con fondo sólido en vez de transparente.',
    'splash.warn.noAlphaDark': '{path} no tiene canal alpha (fondo transparente). El logo aparecerá con fondo sólido en vez de transparente.',
    'splash.warn.smallLight': 'El logo claro mide {w}x{h}. Lo recomendado es al menos 768x768 para evitar bordes borrosos.',
    'splash.warn.smallDark': 'El logo oscuro mide {w}x{h}. Lo recomendado es al menos 768x768 para evitar bordes borrosos.',
    'splash.summary.title': 'Guardado',
    'splash.summary.light': 'Modo claro',
    'splash.summary.dark': 'Modo oscuro',
    'splash.skipGenerate.title': 'Generación omitida',
    'splash.skipGenerate.hint': 'Ejecuta `dart run flutter_native_splash:create` cuando estés listo.',
    'splash.error.notKasyProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter/Kasy.',
    'splash.error.bothRequired': '--light y --dark son obligatorios.',
    'splash.error.fileNotFound': 'Archivo no encontrado: {path}',
    'splash.error.notPng': 'Uno de los archivos no es un PNG válido.',
    'splash.error.generateFailed': 'flutter_native_splash:create falló. Revisa la salida.',

    // icon command
    'cli.command.icon.description': 'Cambia el ícono del app (iOS + Android) y regenera los assets nativos',
    'icon.intro': 'Ícono del app',
    'icon.validating': 'Validando archivo PNG...',
    'icon.validated': 'PNG está bien',
    'icon.copying': 'Copiando ícono a assets/images/icon.png...',
    'icon.copied': 'Ícono copiado',
    'icon.adaptive.generating': 'Generando variante adaptive para Android (llena el círculo del launcher)...',
    'icon.adaptive.generated': 'Adaptive icon Android generado',
    'icon.adaptive.failed': 'Fallo al generar adaptive icon Android',
    'icon.adaptive.fallbackTitle': 'Fondo Android',
    'icon.adaptive.fallbackColor': 'No pude muestrear el color de fondo del PNG (transparente). Usé blanco. Edita icon_android.png si quieres otro color.',
    'icon.generating': 'Regenerando íconos nativos (Android + iOS)...',
    'icon.generated': 'Íconos nativos regenerados',
    'icon.done': 'Listo. Desinstala el app del dispositivo y reinstala para ver el nuevo ícono.',
    'icon.warn.title': 'Avisos',
    'icon.warn.notSquare': 'El ícono mide {w}x{h} (no es cuadrado). La imagen se estirará. Usa una imagen cuadrada (1024x1024 recomendado).',
    'icon.warn.small': 'El ícono mide {w}x{h}. Lo recomendado es al menos 1024x1024 (App Store exige ese tamaño).',
    'icon.warn.hasAlpha': 'El ícono tiene transparencia. iOS rechaza íconos con canal alpha — flutter_launcher_icons lo elimina automáticamente (remove_alpha_ios: true).',
    'icon.summary.title': 'Guardado',
    'icon.summary.icon': 'Ícono del app',
    'icon.skipGenerate.title': 'Generación omitida',
    'icon.skipGenerate.hint': 'Ejecuta `dart run flutter_launcher_icons` cuando estés listo.',
    'icon.reinstall.title': 'Importante',
    'icon.reinstall.hint': 'iOS y Android cachean el ícono anterior. Desinstala el app y reinstala para ver el nuevo.',
    'icon.error.notKasyProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter/Kasy.',
    'icon.error.imageRequired': '--image es obligatorio.',
    'icon.error.fileNotFound': 'Archivo no encontrado: {path}',
    'icon.error.notPng': 'El archivo no es un PNG válido.',
    'icon.error.generateFailed': 'flutter_launcher_icons falló. Revisa la salida.',

    // favicon command
    'cli.command.favicon.description': 'Cambia el favicon / ícono PWA de la web y regenera los assets web',
    'favicon.intro': 'Favicon web',
    'favicon.validating': 'Validando archivo PNG...',
    'favicon.validated': 'PNG está bien',
    'favicon.copying': 'Copiando favicon a assets/images/favicon.png...',
    'favicon.copied': 'Favicon copiado',
    'favicon.generating': 'Regenerando íconos web (favicon + tamaños PWA)...',
    'favicon.generated': 'Íconos web regenerados',
    'favicon.done': 'Listo. Ejecuta "flutter run -d chrome" para ver el nuevo favicon.',
    'favicon.warn.title': 'Avisos',
    'favicon.warn.notSquare': 'El favicon mide {w}x{h} (no es cuadrado). Se estirará. Usa una imagen cuadrada (512x512+ recomendado).',
    'favicon.warn.small': 'El favicon mide {w}x{h}. Lo recomendado es al menos 512x512 para que se vea nítido en las pantallas de instalación PWA.',
    'favicon.summary.title': 'Guardado',
    'favicon.summary.favicon': 'Favicon',
    'favicon.skipGenerate.title': 'Generación omitida',
    'favicon.skipGenerate.hint': 'Ejecuta `dart run flutter_launcher_icons` cuando estés listo.',
    'favicon.error.notKasyProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter/Kasy.',
    'favicon.error.imageRequired': '--image es obligatorio.',
    'favicon.error.fileNotFound': 'Archivo no encontrado: {path}',
    'favicon.error.notPng': 'El archivo no es un PNG válido.',
    'favicon.error.generateFailed': 'flutter_launcher_icons falló. Revisa la salida.',

    // notifications command
    'cli.command.notifications.description': 'Edita los textos de las notificaciones locales y recordatorios',
    'cli.command.notifications.text.description': 'Define titulos y mensajes de notificaciones locales',
    'cli.command.notifications.picker.intro': 'Editar textos de las notificaciones',
    'cli.command.notifications.picker.message': '¿Qué quieres hacer?',
    'notifications.error.notKasyProject': 'No se encontro kit_setup.json. Ejecuta dentro de un proyecto Kasy.',
    'notifications.error.noI18n': 'lib/i18n/*.i18n.json no encontrado en este proyecto.',
    'notifications.error.noFeatures': 'lib/core/config/features.dart no encontrado.',
    'notifications.error.notEnabled': 'Notificaciones locales desactivadas. Ejecuta: kasy add local_notifications',
    'notifications.error.cancelled': 'Cancelado.',
    'notifications.prompt.intro': 'Textos de notificación local',
    'notifications.prompt.hint': 'Demo Home = prueba instantanea en Features. Recordatorio = alerta programada en Ajustes.',
    'notifications.prompt.demoTitle': 'Demo Home — titulo de la notificación',
    'notifications.prompt.demoBody': 'Demo Home — descripción / cuerpo',
    'notifications.prompt.reminderTitle': 'Recordatorio programado — titulo',
    'notifications.prompt.reminderBody': 'Recordatorio programado — cuerpo',
    'notifications.prompt.required': 'Obligatorio.',
    'notifications.writing': 'Actualizando lib/i18n/*.i18n.json...',
    'notifications.written': 'Actualizado: {langs}',
    'notifications.slang': 'Ejecutando dart run slang...',
    'notifications.slangDone': 'Traducciones regeneradas',
    'notifications.slangFailed': 'dart run slang fallo — ejecuta manualmente en el proyecto',
    'notifications.done': 'Textos de notificación local actualizados.',
    'notifications.summary.demo': 'Home → Features (demo):',
    'notifications.summary.reminder': 'Ajustes → Recordatorios (programado):',

    'add.list.title': 'Features del proyecto',
    'add.error.noModule': 'Indica el nombre de la feature o usa --list para ver las disponibles.',
    'add.error.notKasyProject': 'kit_setup.json no encontrado. Ejecuta este comando dentro de un proyecto Kasy.',
    'add.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
    'add.alreadyActive': 'La feature "{module}" ya está activa en este proyecto.',
    'add.applying': 'Agregando feature: {module}',
    'add.applyingPatch': 'Aplicando cambios de la feature...',
    'add.patchApplied': 'Patch aplicado',
    'add.patchFailed': 'Patch fallo — revisa la salida anterior',
    'add.pubGet': 'Instalando paquetes de Flutter (flutter pub get)...',
    'add.pubGetDone': 'Dependencias actualizadas',
    'add.pubGetFailed': 'Falló al instalar paquetes de Flutter — ejecuta `flutter pub get` manualmente',
    'add.buildRunner': 'Generando código (Riverpod/Freezed)...',
    'add.buildRunnerDone': 'Generación de código completada',
    'add.buildRunnerFailed': 'Generación de código falló — ejecuta `dart run build_runner build` manualmente',
    'add.success': 'Feature "{module}" agregada exitosamente.',
    'add.cancelled': 'Cancelado.',
    'add.prompt.sentryDsn': 'Sentry DSN (deja en blanco para configurar después):',
    'add.prompt.mixpanelToken': 'Mixpanel Token (deja en blanco para configurar después):',
    'add.prompt.rcTestKey': 'Clave Test Store (test_xxx) — opcional, sirve para iOS+Android y simulador:',
    'add.prompt.rcIosProdKey': 'Clave iOS de producción (appl_xxx) — opcional, solo en dispositivo físico:',
    'add.prompt.rcAndroidProdKey': 'Clave Android de producción (goog_xxx) — opcional, solo en dispositivo físico:',
    // Legacy keys — kept for compatibility with old scripts.
    'add.prompt.rcAndroidKey': 'RevenueCat Android API key (deja en blanco para configurar después):',
    'add.prompt.rcIosKey': 'RevenueCat iOS API key (deja en blanco para configurar después):',
    'add.note.facebook': 'Agrega tu Facebook App ID y token en .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
    'new.q.llm_chat.configureNow': 'Configurar el agente de Chat LLM ahora?',
    'new.q.llm_chat.configureNow.hint': 'Puedes omitir y ejecutar "kasy add llm_chat" después',
    'add.llm_chat.reconfigure': 'Feature ya activa — reconfigurando solo las credenciales.',
    'add.prompt.llmProvider': 'Proveedor de LLM:',
    'add.prompt.llmSystemPrompt': 'Instruccion del agente — system prompt (deja en blanco para ninguna):\n  Ejemplo: "Eres un asistente de soporte del app Fitsync. Solo responde sobre entrenamientos."\n >',
    'add.prompt.llmApiKey': 'Clave de API (OpenAI o Gemini) — se guarda en el servidor, nunca en el app (deja en blanco para configurar después):',
    'add.prompt.llmEndpoint': 'URL de tu endpoint LLM (deja en blanco para configurar después):',
    'add.llm_chat.settingSecret': 'Guardando clave de API como secret en el servidor...',
    'add.llm_chat.secretSet': 'Clave de API guardada como secret',
    'add.llm_chat.secretFailed': 'No se pudo guardar el secret automaticamente — configuralo manualmente (ver instrucciones abajo)',
    'add.llm_chat.skipSecret': 'Clave de API omitida — configura antes del deploy via CLI del servidor',
    'add.llm_chat.deploying': 'Desplegando funcion LLM en el servidor...',
    'add.llm_chat.deployed': 'Funcion LLM desplegada con exito',
    'add.llm_chat.deployFailed': 'Deploy automático fallo — despliega manualmente (ver instrucciones abajo)',
    'add.llm_chat.nextSteps.firebase': '\n  Proximos pasos:\n  1. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n  2. Corre el app: kasy run\n',
    'add.llm_chat.nextSteps.firebase.deployFailed': '\n  Proximos pasos:\n  1. Deploy manual: firebase deploy --only functions:llmChat\n  2. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n  3. Corre el app: kasy run\n',
    'add.llm_chat.nextSteps.supabase': '\n  Proximos pasos:\n  1. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n  2. Corre el app: kasy run\n',
    'add.llm_chat.nextSteps.supabase.deployFailed': '\n  Proximos pasos:\n  1. Deploy manual: supabase functions deploy llm-chat --no-verify-jwt\n  2. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n  3. Corre el app: kasy run\n',
    'add.llm_chat.nextSteps.api': '\n  Proximos pasos:\n  1. Crea un endpoint en tu servidor que acepte {message, history} y llame tu LLM.\n  2. Actualiza LLM_CHAT_ENDPOINT en .vscode/launch.json con la URL de tu endpoint.\n  3. Corre el app: kasy run\n',
    'cli.command.remove.description': 'Elimina algo que ya no usas (ej: kasy remove sentry)',
    'remove.error.noModule': 'Ingresa el nombre de la feature. Uso: kasy remove <feature>',
    'remove.error.notKasyProject': 'kit_setup.json no encontrado. Ejecuta este comando dentro de un proyecto Kasy.',
    'remove.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
    'remove.error.notActive': 'La feature "{module}" no está activa en este proyecto.',
    'remove.confirm': 'Eliminar la feature "{module}"? Esto borrara archivos y dependencias.',
    'remove.cancelled': 'Cancelado.',
    'remove.removing': 'Eliminando feature: {module}',
    'remove.pubGet': 'Instalando paquetes de Flutter (flutter pub get)...',
    'remove.pubGetDone': 'Dependencias actualizadas',
    'remove.pubGetFailed': 'Falló al instalar paquetes de Flutter — ejecuta `flutter pub get` manualmente',
    'remove.buildRunner': 'Generando código (Riverpod/Freezed)...',
    'remove.buildRunnerDone': 'Generación de código completada',
    'remove.buildRunnerFailed': 'Generación de código falló — ejecuta `dart run build_runner build` manualmente',
    'remove.success': 'Feature "{module}" eliminada exitosamente.',
    'remove.warn.ci': 'Archivos de CI eliminados. Si tenias workflows personalizados, restauralos desde git.',
    'remove.warn.sentry.shared': 'sentry_flutter conservado — todavia requerido por features activas (revenuecat/facebook).',
    'cli.command.update.description': 'Actualiza partes de tu app a la última versión (ej: kasy update components)',
    'cli.command.update.targetArg': 'Objetivo a actualizar (ej.: revenuecat, sentry, components)',
    'update.error.noProject': 'kit_setup.json no encontrado. Ejecuta dentro de un proyecto Kasy.',
    'update.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
    'update.error.unknownTarget': 'Objetivo de actualización desconocido: {module}\nDisponibles: {list}',
    'update.error.notActive': 'La feature "{module}" no está activa en este proyecto.',
    'update.alreadyUpToDate': 'El proyecto ya está actualizado (v{versión}).',
    'update.status': 'Proyecto: v{from}  →  CLI: v{to}',
    'update.noVersion': 'El proyecto fue generado sin seguimiento de versión. Todas las features pueden actualizarse.',
    'update.changesTitle': 'Actualizaciones disponibles:',
    'update.reapplyTitle': 'Sin cambios nuevos — puedes reaplicar si es necesario:',
    'update.howToUpdate': 'Para actualizar una feature:',
    'update.howToUpdateComponents': 'Para actualizar componentes base:',
    'update.warn.commit': 'Esto sobrescribirá los archivos de la feature "{module}". Asegúrate de haber hecho commit antes.',
    'update.warn.commitComponents': 'Esto sobrescribirá archivos de los componentes base. Asegúrate de haber hecho commit antes.',
    'update.confirm': 'Sobrescribir archivos de la feature "{module}" con la versión más reciente?',
    'update.confirmComponents': 'Sobrescribir archivos de los componentes base con la versión más reciente?',
    'update.confirmCore': 'Sobrescribir archivos de core (animaciones, widgets, tema, herramientas dev) con la versión más reciente?',
    'update.cancelled': 'Cancelado.',
    'update.applying': 'Aplicando actualización de la feature: {module}',
    'update.applyingComponents': 'Aplicando actualización de componentes base...',
    'update.applyingCore': 'Aplicando actualización de archivos de core...',
    'update.applied': 'Feature {module} actualizada',
    'update.appliedComponents': '{count} archivos de componentes base actualizados',
    'update.appliedCore': '{count} archivos de core actualizados',
    'update.applyFailed': 'Error al aplicar actualización de la feature {module}',
    'update.applyComponentsFailed': 'Error al aplicar actualización de componentes base',
    'update.noPatch': 'La feature "{module}" no tiene archivos para actualizar (feature solo de configuración).',
    'update.noComponentFiles': 'No se encontraron archivos de componentes base para actualizar.',
    'update.pubGet': 'Instalando paquetes de Flutter (flutter pub get)...',
    'update.pubGetDone': 'Dependencias actualizadas',
    'update.pubGetFailed': 'Falló al instalar paquetes de Flutter — ejecuta `flutter pub get` manualmente',
    'update.buildRunner': 'Generando código (Riverpod/Freezed)...',
    'update.buildRunnerDone': 'Generación de código completada',
    'update.buildRunnerFailed': 'Generación de código falló — ejecuta `dart run build_runner build` manualmente',
    'update.success': 'Feature "{module}" actualizada exitosamente.',
    'update.componentsSuccess': 'Componentes base actualizados exitosamente.',
    'update.coreSuccess': 'Archivos de core actualizados exitosamente.',
    'check.intro': 'Kasy Check — Notificaciones Push',
    'check.firebase.detected': 'Backend Firebase',
    'check.firebase.adcInfo': 'Firebase usa Application Default Credentials — no requiere configuración extra.',
    'check.apns.warn': 'Push iOS requiere APNs Key (no verificable via CLI)',
    'check.apns.where': 'Firebase Console → Cloud Messaging → app iOS → Clave de autenticación APNs',
    'check.done': 'Listo',
    'check.notKasy': 'Este directorio no parece ser un proyecto Kasy.',
    'check.aborted': 'Cancelado',
    'check.supabase.notLinked': 'Proyecto Supabase no vinculado',
    'check.supabase.notLinkedHint': 'ejecuta: supabase link --project-ref TU_REF',
    'check.supabase.linked': 'Proyecto vinculado',
    'check.spin.secrets': 'Verificando secrets…',
    'check.spin.secretsDone': 'Secrets verificados',
    'check.secrets.listFailed': 'No se pudo listar los secrets',
    'check.secrets.checkLogin': 'verifica: supabase login',
    'check.fbProjId.ok': 'FIREBASE_PROJECT_ID configurado',
    'check.fbProjId.missing': 'FIREBASE_PROJECT_ID ausente',
    'check.fbProjId.fixHint': 'Corrige: supabase secrets set FIREBASE_PROJECT_ID="{id}"',
    'check.fbProjId.fixed': 'FIREBASE_PROJECT_ID → configurado automáticamente',
    'check.fbProjId.fixFailed': 'FIREBASE_PROJECT_ID → falló al configurar',
    'check.fbSak.ok': 'FIREBASE_SERVICE_ACCOUNT_JSON configurado',
    'check.fbSak.missing': 'FIREBASE_SERVICE_ACCOUNT_JSON ausente',
    'check.fbSak.spin': 'Generando y configurando clave FCM…',
    'check.fbSak.spinDone': 'Clave FCM generada',
    'check.fbSak.fixed': 'FIREBASE_SERVICE_ACCOUNT_JSON → configurado automáticamente',
    'check.fbSak.fixFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → falló al configurar',
    'check.fbSak.genFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → no se pudo generar la clave',
    'check.fbSak.manual': "Manual: Firebase Console → Configuración → Cuentas de servicio → Generar clave\nLuego: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat clave.json)'",
    'check.fbSak.hint': "Corrige automáticamente: kasy check --fix\nO manualmente: Firebase Console → Configuración → Cuentas de servicio → Generar clave\nLuego: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat clave.json)'",
    'check.fn.spin': 'Verificando edge functions…',
    'check.fn.spinDone': 'Edge functions verificadas',
    'check.fn.listFailed': 'No se pudo listar edge functions',
    'check.fn.deployed': 'Edge function send-push-notification publicada',
    'check.fn.missing': 'Edge function send-push-notification no publicada',
    'check.fn.deploySpin': 'Publicando send-push-notification…',
    'check.fn.deployDone': 'send-push-notification → publicada automáticamente',
    'check.fn.deployFailed': 'send-push-notification → falló el deploy',
    'check.fn.hint': 'Corrige automáticamente: kasy check --fix\nO manualmente: supabase functions deploy send-push-notification',
    'deploy.firebase.intro': 'Deploy — Firebase',
    'deploy.firebase.spin': 'Publicando en Firebase...',
    'deploy.firebase.spinDone': 'Deploy de Firebase completado',
    'deploy.apns.title': 'Push iOS: configura la APNs Key en Firebase Console',
    'deploy.apns.step1': '1. Apple Developer Portal → Keys → crear APNs Key (.p8)',
    'deploy.apns.step2': '2. Firebase Console → Cloud Messaging → app iOS → subir APNs Key',
    'deploy.supabase.intro': 'Deploy — Supabase',
    'deploy.supabase.notLinked': 'Proyecto Supabase no vinculado en este directorio.',
    'deploy.supabase.linkHint': 'Ejecuta: supabase link --project-ref TU_PROJECT_REF',
    'deploy.supabase.projectRef': 'Project ref: {ref}',
    'deploy.supabase.sakAlready': 'FIREBASE_SERVICE_ACCOUNT_JSON ya configurado',
    'deploy.supabase.sakSpin': 'Generando clave FCM (Service Account)…',
    'deploy.supabase.sakSpinDone': 'Clave FCM generada',
    'deploy.supabase.sakManual': "Configura manualmente: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='...'",
    'deploy.supabase.sakNoGS': 'google-services.json no encontrado — configura manualmente',
    'deploy.supabase.fnSpin': 'Publicando edge functions…',
    'deploy.supabase.fnSpinDone': 'Edge functions procesadas',
    'deploy.supabase.fnNone': 'edge functions (ninguna encontrada)',
    'deploy.outro': 'Deploy completado',
};
