import type { Translations } from "./types";

export const es: Translations = {
  common: {
    save: "Guardar",
    saving: "Guardando...",
    cancel: "Cancelar",
    close: "Cerrar",
    confirm: "Confirmar",
    delete: "Eliminar",
    refresh: "Actualizar",
    retry: "Reintentar",
    search: "Buscar...",
    loading: "Cargando...",
    create: "Crear",
    creating: "Creando...",
    set: "Establecer",
    replace: "Reemplazar",
    clear: "Limpiar",
    live: "En vivo",
    off: "Apagado",
    enabled: "habilitado",
    disabled: "deshabilitado",
    active: "activo",
    inactive: "inactivo",
    unknown: "desconocido",
    untitled: "Sin título",
    none: "Ninguno",
    form: "Formulario",
    noResults: "Sin resultados",
    of: "de",
    page: "Página",
    msgs: "msjs",
    tools: "herramientas",
    match: "coincidencia",
    other: "Otros",
    configured: "configurado",
    removed: "eliminado",
    failedToToggle: "No se pudo alternar",
    failedToRemove: "No se pudo eliminar",
    failedToReveal: "No se pudo mostrar",
    collapse: "Contraer",
    expand: "Expandir",
    general: "General",
    messaging: "Mensajería",
    pluginLoadFailed:
      "No se pudo cargar el script de este complemento. Revisa la pestaña Network (dashboard-plugins/…) y la ruta del complemento del servidor.",
    pluginNotRegistered:
      "El script del complemento no llamó a register(), o falló. Abre la consola del navegador para más detalles.",
  },

  app: {
    brand: "Hermes Agent",
    brandShort: "HA",
    closeNavigation: "Cerrar navegación",
    closeModelTools: "Cerrar modelo y herramientas",
    footer: {
      org: "Nous Research",
    },
    activeSessionsLabel: "Sesiones activas:",
    gatewayStatusLabel: "Estado del Gateway:",
    gatewayStrip: {
      failed: "Inicio fallido",
      off: "Apagado",
      running: "En ejecución",
      starting: "Iniciando",
      stopped: "Detenido",
    },
    nav: {
      analytics: "Analíticas",
      chat: "Chat",
      config: "Configuración",
      cron: "Cron",
      documentation: "Documentación",
      keys: "Claves",
      logs: "Registros",
      models: "Modelos",
      profiles: "perfiles : multi agentes",
      plugins: "Complementos",
      sessions: "Sesiones",
      skills: "Habilidades",
    },
    modelToolsSheetSubtitle: "y herramientas",
    modelToolsSheetTitle: "Modelo",
    navigation: "Navegación",
    openDocumentation: "Abrir documentación en una nueva pestaña",
    openNavigation: "Abrir navegación",
    pluginNavSection: "Complementos",
    sessionsActiveCount: "{count} activas",
    statusOverview: "Resumen de estado",
    system: "Sistema",
    webUi: "Web UI",
  },

  status: {
    actionFailed: "Acción fallida",
    actionFinished: "Finalizado",
    actions: "Acciones",
    agent: "Agente",
    activeSessions: "Sesiones activas",
    connected: "Conectado",
    connectedPlatforms: "Plataformas conectadas",
    disconnected: "Desconectado",
    error: "Error",
    failed: "Fallido",
    gateway: "Gateway",
    gatewayFailedToStart: "El Gateway no pudo iniciarse",
    lastUpdate: "Última actualización",
    noneRunning: "Ninguno",
    notRunning: "No en ejecución",
    pid: "PID",
    platformDisconnected: "desconectado",
    platformError: "error",
    recentSessions: "Sesiones recientes",
    restartGateway: "Reiniciar Gateway",
    restartingGateway: "Reiniciando gateway…",
    running: "En ejecución",
    runningRemote: "En ejecución (remoto)",
    startFailed: "Inicio fallido",
    starting: "Iniciando",
    startedInBackground: "Iniciado en segundo plano — revisa los registros para ver el progreso",
    stopped: "Detenido",
    updateHermes: "Actualizar Hermes",
    updatingHermes: "Actualizando Hermes…",
    waitingForOutput: "Esperando salida…",
  },

  sessions: {
    title: "Sesiones",
    history: "Historial",
    overview: "Resumen",
    searchPlaceholder: "Buscar contenido de mensajes...",
    noSessions: "Aún no hay sesiones",
    noMatch: "Ninguna sesión coincide con tu búsqueda",
    startConversation: "Inicia una conversación para verla aquí",
    noMessages: "Sin mensajes",
    untitledSession: "Sesión sin título",
    deleteSession: "Eliminar sesión",
    confirmDeleteTitle: "¿Eliminar sesión?",
    confirmDeleteMessage:
      "Esto elimina permanentemente la conversación y todos sus mensajes. No se puede deshacer.",
    sessionDeleted: "Sesión eliminada",
    failedToDelete: "No se pudo eliminar la sesión",
    deleteEmpty: "Eliminar vacías",
    deleteEmptyConfirmTitle: "¿Eliminar sesiones vacías?",
    deleteEmptyConfirmMessage:
      "Esto elimina permanentemente {count} sesiones que no tienen mensajes. Se omiten las sesiones activas y archivadas. Esta acción no se puede deshacer.",
    emptySessionsDeleted: "{count} sesiones vacías eliminadas",
    failedToDeleteEmpty: "No se pudieron eliminar las sesiones vacías",
    selectSession: "Seleccionar sesión",
    selectAllOnPage: "Seleccionar todas en esta página",
    clearSelection: "Limpiar selección",
    selectedCount: "{count} seleccionadas",
    deleteSelected: "Eliminar {count}",
    deleteSelectedConfirmTitle: "¿Eliminar {count} sesiones?",
    deleteSelectedConfirmMessage:
      "Esto elimina permanentemente {count} sesiones seleccionadas y todos sus mensajes. No se puede deshacer.",
    selectedSessionsDeleted: "{count} sesiones eliminadas",
    failedToDeleteSelected: "No se pudieron eliminar las sesiones seleccionadas",
    resumeInChat: "Reanudar en el chat",
    previousPage: "Página anterior",
    nextPage: "Página siguiente",
    roles: {
      user: "Usuario",
      assistant: "Asistente",
      system: "Sistema",
      tool: "Herramienta",
    },
  },

  analytics: {
    period: "Período:",
    totalTokens: "Tokens totales",
    totalSessions: "Sesiones totales",
    apiCalls: "Llamadas API",
    dailyTokenUsage: "Uso diario de tokens",
    dailyBreakdown: "Desglose diario",
    perModelBreakdown: "Desglose por modelo",
    topSkills: "Habilidades principales",
    skill: "Habilidad",
    loads: "Agente cargó",
    edits: "Agente gestionó",
    lastUsed: "Último uso",
    input: "Entrada",
    output: "Salida",
    total: "Total",
    noUsageData: "No hay datos de uso para este período",
    startSession: "Inicia una sesión para ver analíticas aquí",
    date: "Fecha",
    model: "Modelo",
    tokens: "Tokens",
    perDayAvg: "/día prom.",
    acrossModels: "en {count} modelos",
    inOut: "{input} entrada / {output} salida",
  },

  models: {
    modelsUsed: "Modelos utilizados",
    estimatedCost: "Coste est.",
    tokens: "tokens",
    sessions: "sesiones",
    avgPerSession: "prom./sesión",
    apiCalls: "llamadas API",
    toolCalls: "llamadas de herramientas",
    noModelsData: "No hay datos de uso de modelos para este período",
    startSession: "Inicia una sesión para ver datos de modelos aquí",
  },

  logs: {
    title: "Registros",
    autoRefresh: "Actualización automática",
    file: "Archivo",
    level: "Nivel",
    component: "Componente",
    lines: "Líneas",
    noLogLines: "No se encontraron líneas de registro",
  },

  cron: {
    confirmDeleteMessage:
      "Esto elimina la tarea de la programación. No se puede deshacer.",
    confirmDeleteTitle: "¿Eliminar tarea programada?",
    newJob: "Nueva tarea Cron",
    nameOptional: "Nombre (opcional)",
    namePlaceholder: "p. ej. Resumen diario",
    prompt: "Prompt",
    promptPlaceholder: "¿Qué debe hacer el agente en cada ejecución?",
    schedule: "Programación (expresión cron)",
    schedulePlaceholder: "0 9 * * *",
    scheduleMode: "Programación",
    scheduleModes: {
      interval: "Cada intervalo",
      daily: "Diariamente",
      weekly: "Semanalmente",
      monthly: "Mensualmente",
      once: "Una vez",
      custom: "Personalizado (expresión cron)",
      intervalEvery: "Cada",
      intervalUnit: "Unidad",
      unitMinutes: "minutos",
      unitHours: "horas",
      unitDays: "días",
      timeOfDay: "Hora del día",
      weekdays: "Días de la semana",
      weekdaysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
      dayOfMonth: "Día del mes",
      onceAt: "Ejecutar el",
      customLabel: "Expresión cron",
      customPlaceholder: "0 9 * * *",
      customHint:
        "Expresión cron de cinco campos (minuto, hora, día, mes, día de la semana).",
      preview: "Se envía como",
      previewEmpty: "(incompleta)",
    },
    scheduleDescribe: {
      none: "—",
      everyMinutes: "Cada {n} min",
      everyHours: "Cada {n} h",
      everyDays: "Cada {n} d",
      dailyAt: "Diariamente a las {time}",
      weeklyAt: "Semanalmente los {days} a las {time}",
      monthlyAt: "Mensualmente el {day} a las {time}",
      onceAt: "Una vez el {time}",
    },
    deliverTo: "Entregar a",
    scheduledJobs: "Tareas programadas",
    noJobs: "No hay tareas cron configuradas. Crea una arriba.",
    last: "Última",
    next: "Próxima",
    pause: "Pausar",
    resume: "Reanudar",
    triggerNow: "Ejecutar ahora",
    delivery: {
      local: "Local",
      telegram: "Telegram",
      discord: "Discord",
      slack: "Slack",
      email: "Email",
    },
  },

  profiles: {
    newProfile: "Nuevo perfil",
    name: "Nombre",
    namePlaceholder: "p. ej. coder, writer, etc.",
    nameRequired: "El nombre es obligatorio",
    nameRule:
      "Solo letras minúsculas, dígitos, _ y -; debe comenzar con una letra o dígito; hasta 64 caracteres.",
    invalidName: "Nombre de perfil no válido",
    cloneFromDefault: "Clonar configuración del perfil predeterminado",
    allProfiles: "Perfiles",
    noProfiles: "No se encontraron perfiles.",
    defaultBadge: "predeterminado",
    hasEnv: "env",
    model: "Modelo",
    skills: "Habilidades",
    rename: "Renombrar",
    editSoul: "Editar SOUL.md",
    soulSection: "SOUL.md (personalidad / prompt del sistema)",
    soulPlaceholder: "# Cómo debe comportarse este agente…",
    saveSoul: "Guardar SOUL",
    soulSaved: "SOUL.md guardado",
    openInTerminal: "Copiar comando CLI",
    commandCopied: "Copiado al portapapeles",
    copyFailed: "No se pudo copiar",
    confirmDeleteTitle: "¿Eliminar perfil?",
    confirmDeleteMessage:
      "Esto elimina permanentemente el perfil '{name}' — configuración, claves, memorias, sesiones, habilidades, tareas cron. No se puede deshacer.",
    created: "Creado",
    deleted: "Eliminado",
    renamed: "Renombrado",
  },

  pluginsPage: {
    contextEngineLabel: "Motor de contexto",
    dashboardSlots: "Slots del panel",
    disableRuntime: "Deshabilitar",
    enableAfterInstall: "Habilitar tras instalar",
    enableRuntime: "Habilitar",
    forceReinstall: "Forzar reinstalación (eliminar carpeta existente primero)",
    headline:
      "Descubre, instala, habilita y actualiza complementos de Hermes (equivalente a `hermes plugins`).",
    identifierLabel: "URL de Git u owner/repo",
    inactive: "inactivo",
    installBtn: "Instalar",
    installHeading: "Instalar desde GitHub / URL de Git",
    installHint: "Usa la forma corta owner/repo o una URL de clonación https:// o git@ completa.",
    memoryProviderLabel: "Proveedor de memoria",
    missingEnvWarn: "Configura estos en Claves antes de que el complemento pueda ejecutarse:",
    noDashboardTab: "Sin pestaña de panel",
    openTab: "Abrir",
    orphanHeading: "Extensiones solo del panel (sin coincidencia de plugin.yaml del agente)",
    pluginListHeading: "Complementos instalados",
    providerDefaults: "incorporado / predeterminado",
    providersHeading: "Complementos de proveedor en tiempo de ejecución",
    providersHint:
      "Escribe memory.provider (vacío = incorporado) y context.engine en config.yaml. Surte efecto en la próxima sesión.",
    refreshDashboard: "Volver a escanear extensiones del panel",
    removeConfirm: "¿Eliminar este complemento de ~/.hermes/plugins/?",
    removeHint: "Solo se pueden eliminar complementos instalados por el usuario en ~/.hermes/plugins.",
    rescanHeading: "Registro de complementos SPA",
    rescanHint: "Vuelve a escanear tras añadir archivos en disco para que la barra lateral del panel detecte nuevos manifiestos.",
    runtimeHeading: "Tiempo de ejecución del Gateway (complementos YAML)",
    saveProviders: "Guardar configuración del proveedor",
    savedProviders: "Configuración del proveedor guardada.",
    sourceBadge: "Fuente",
    authRequired: "Autenticación requerida",
    authRequiredHint: "Ejecuta este comando para autenticarte:",
    updateGit: "Git pull",
    versionBadge: "Versión",
    showInSidebar: "Mostrar en barra lateral",
    hideFromSidebar: "Ocultar de la barra lateral",
  },

  skills: {
    title: "Habilidades",
    searchPlaceholder: "Buscar habilidades y conjuntos de herramientas...",
    enabledOf: "{enabled}/{total} habilitados",
    all: "Todas",
    categories: "Categorías",
    filters: "Filtros",
    noSkills: "No se encontraron habilidades. Las habilidades se cargan desde ~/.hermes/skills/",
    noSkillsMatch: "Ninguna habilidad coincide con tu búsqueda o filtro.",
    skillCount: "{count} habilidad{s}",
    resultCount: "{count} resultado{s}",
    noDescription: "No hay descripción disponible.",
    toolsets: "Conjuntos de herramientas",
    toolsetLabel: "conjunto de herramientas {name}",
    noToolsetsMatch: "Ningún conjunto de herramientas coincide con la búsqueda.",
    setupNeeded: "Configuración necesaria",
    disabledForCli: "Deshabilitado para CLI",
    more: "+{count} más",
  },

  config: {
    configPath: "~/.hermes/config.yaml",
    filters: "Filtros",
    sections: "Secciones",
    exportConfig: "Exportar configuración como JSON",
    importConfig: "Importar configuración desde JSON",
    resetDefaults: "Restablecer valores predeterminados",
    resetScopeTooltip: "Restablecer {scope} a los valores predeterminados",
    confirmResetScope: "¿Restablecer todos los ajustes de {scope} a sus valores predeterminados? Esto solo actualiza el formulario — los cambios no se escriben en config.yaml hasta que pulses Guardar.",
    resetScopeToast: "{scope} restablecido a los valores predeterminados — revisa y guarda para que persista",
    rawYaml: "Configuración YAML en bruto",
    searchResults: "Resultados de búsqueda",
    fields: "campo{s}",
    noFieldsMatch: 'Ningún campo coincide con "{query}"',
    configSaved: "Configuración guardada",
    yamlConfigSaved: "Configuración YAML guardada",
    failedToSave: "No se pudo guardar",
    failedToSaveYaml: "No se pudo guardar YAML",
    failedToLoadRaw: "No se pudo cargar la configuración en bruto",
    configImported: "Configuración importada — revisa y guarda",
    invalidJson: "Archivo JSON no válido",
    categories: {
      general: "General",
      agent: "Agente",
      terminal: "Terminal",
      display: "Pantalla",
      delegation: "Delegación",
      memory: "Memoria",
      compression: "Compresión",
      security: "Seguridad",
      browser: "Navegador",
      voice: "Voz",
      tts: "Texto a voz",
      stt: "Voz a texto",
      logging: "Registro",
      discord: "Discord",
      auxiliary: "Auxiliar",
    },
  },

  env: {
    changesNote: "Los cambios se guardan en disco inmediatamente. Las sesiones activas adoptan las nuevas claves automáticamente.",
    confirmClearMessage:
      "El valor almacenado para esta variable se eliminará de tu archivo .env. Esto no se puede deshacer desde la UI.",
    confirmClearTitle: "¿Limpiar esta clave?",
    description: "Gestiona claves API y secretos almacenados en",
    hideAdvanced: "Ocultar avanzado",
    showAdvanced: "Mostrar avanzado",
    showLess: "Mostrar menos",
    showMore: "Mostrar más",
    llmProviders: "Proveedores LLM",
    providersConfigured: "{configured} de {total} proveedores configurados",
    getKey: "Obtener clave",
    notConfigured: "{count} no configurados",
    notSet: "No establecido",
    keysCount: "{count} clave{s}",
    enterValue: "Introduce un valor...",
    replaceCurrentValue: "Reemplazar valor actual ({preview})",
    showValue: "Mostrar valor real",
    hideValue: "Ocultar valor",
  },

  oauth: {
    title: "Inicios de sesión de proveedores (OAuth)",
    providerLogins: "Inicios de sesión de proveedores (OAuth)",
    description: "{connected} de {total} proveedores OAuth conectados. Los flujos de inicio de sesión actualmente se ejecutan a través de la CLI; haz clic en Copiar comando y pégalo en una terminal para configurar.",
    connected: "Conectado",
    expired: "Caducado",
    notConnected: "No conectado. Ejecuta {command} en una terminal.",
    runInTerminal: "en una terminal.",
    noProviders: "No se han detectado proveedores compatibles con OAuth.",
    login: "Iniciar sesión",
    disconnect: "Desconectar",
    managedExternally: "Gestionado externamente",
    copied: "Copiado ✓",
    cli: "Copiar",
    copyCliCommand: "Copiar comando CLI (para externo / alternativa)",
    connect: "Conectar",
    sessionExpires: "La sesión caduca en {time}",
    initiatingLogin: "Iniciando flujo de inicio de sesión…",
    exchangingCode: "Intercambiando código por tokens…",
    connectedClosing: "¡Conectado! Cerrando…",
    loginFailed: "Inicio de sesión fallido.",
    sessionExpired: "Sesión caducada. Haz clic en Reintentar para iniciar un nuevo inicio de sesión.",
    reOpenAuth: "Reabrir página de autenticación",
    reOpenVerification: "Reabrir página de verificación",
    submitCode: "Enviar código",
    pasteCode: "Pega el código de autorización (con el sufijo #state está bien)",
    waitingAuth: "Esperando que autorices en el navegador…",
    enterCodePrompt: "Se abrió una nueva pestaña. Introduce este código si se solicita:",
    pkceStep1: "Se abrió una nueva pestaña en claude.ai. Inicia sesión y haz clic en Autorizar.",
    pkceStep2: "Copia el código de autorización mostrado tras autorizar.",
    pkceStep3: "Pégalo abajo y envía.",
    flowLabels: {
      pkce: "Inicio de sesión por navegador (PKCE)",
      device_code: "Código de dispositivo",
      external: "CLI externa",
    },
    expiresIn: "caduca en {time}",
  },

  language: {
    switchTo: "Cambiar idioma",
  },

  theme: {
    title: "Tema",
    switchTheme: "Cambiar tema",
  },
  achievements: {
    hero: {
      kicker: "Agentic Gamerscore",
      title: "Hermes Achievements",
      subtitle:
        "Insignias coleccionables de Hermes ganadas a partir del historial real de sesiones. Los logros conocidos no completados se muestran como Descubiertos; los logros secretos permanecen ocultos hasta que aparece el primer comportamiento coincidente.",
      scan_subtitle:
        "Escaneando el historial de sesiones de Hermes. El primer escaneo puede tardar 5–10 segundos en historiales grandes.",
    },
    actions: {
      rescan: "Volver a escanear",
    },
    stats: {
      unlocked: "Desbloqueados",
      unlocked_hint: "insignias ganadas",
      discovered: "Descubiertos",
      discovered_hint: "conocidos, aún no ganados",
      secrets: "Secretos",
      secrets_hint: "ocultos hasta la primera señal",
      highest_tier: "Nivel más alto",
      highest_tier_hint: "Copper → Silver → Gold → Diamond → Olympian",
      latest: "Más reciente",
      latest_hint_empty: "usa Hermes más",
      none_yet: "Ninguno aún",
    },
    state: {
      unlocked: "Desbloqueado",
      discovered: "Descubierto",
      secret: "Secreto",
    },
    tier: {
      target: "Objetivo {tier}",
      hidden: "Oculto",
      complete: "Completo",
      objective: "Objetivo",
    },
    progress: {
      hidden: "oculto",
    },
    scan: {
      building_headline: "Construyendo perfil de logros…",
      building_detail:
        "Leyendo sesiones, llamadas a herramientas, metadatos del modelo y estado de desbloqueo.",
      starting_headline: "Iniciando escaneo de logros…",
      progress_detail:
        "Escaneadas {scanned} de {total} sesiones · {pct}%. Las insignias se desbloquean a medida que se procesa más historial.",
      idle_detail:
        "Leyendo sesiones, llamadas a herramientas, metadatos del modelo y estado de desbloqueo. Las insignias aparecerán aquí a medida que se desbloqueen.",
    },
    guide: {
      tiers_header: "Niveles",
      secret_header: "Logros secretos",
      secret_body:
        "Los secretos ocultan su disparador exacto. Una vez que Hermes detecta una señal relacionada, la tarjeta pasa a Descubierto y muestra su requisito.",
      scan_status_header: "Estado del escaneo",
      scan_status_body:
        "Hermes está escaneando el historial local una vez, después las tarjetas aparecerán automáticamente. No hay nada bloqueado si tarda unos segundos.",
      what_scanned_header: "Qué se escanea",
      what_scanned_body:
        "Sesiones, llamadas a herramientas, metadatos del modelo, errores, logros y estado de desbloqueo local.",
    },
    card: {
      share_title: "Compartir este logro",
      share_label: "Compartir {name}",
      share_text: "Compartir",
      how_to_reveal: "Cómo revelarlo",
      what_counts: "Qué cuenta",
      evidence_label: "Evidencia",
      evidence_session_fallback: "sesión",
      no_evidence: "Aún sin evidencia",
    },
    latest: {
      header: "Desbloqueos recientes",
    },
    empty: {
      no_secrets_header: "No quedan secretos ocultos en este escaneo.",
      no_secrets_body:
        "Pista: los secretos suelen comenzar a partir de fallos inusuales o patrones de usuario avanzado: conflictos de puertos, muros de permisos, variables de entorno faltantes, errores de YAML, colisiones de Docker, uso de rollback/checkpoint, aciertos de caché o pequeñas correcciones tras mucho texto rojo.",
    },
    filters: {
      all_categories: "Todos",
      visibility_all: "todos",
      visibility_unlocked: "desbloqueados",
      visibility_discovered: "descubiertos",
      visibility_secret: "secretos",
    },
    share: {
      dialog_label: "Compartir logro",
      header: "Compartir: {name}",
      close: "Cerrar",
      rendering: "Renderizando…",
      card_alt: "Tarjeta para compartir de {name}",
      error_generic: "Algo salió mal.",
      x_title: "Abre X con una publicación predefinida",
      x_button: "Compartir en X",
      copy_title: "Copia la imagen para pegarla en tu publicación",
      copy_button: "Copiar imagen",
      copied: "Copiado ✓",
      download_button: "Descargar PNG",
      hint:
        "Compartir en X abre una publicación predefinida en una nueva pestaña. Haz clic primero en Copiar imagen si quieres adjuntar la insignia 1200×630: X te permite pegarla directamente en el redactor del tuit. Descargar PNG guarda el archivo para usarlo en cualquier lugar.",
      clipboard_unsupported:
        "Este navegador no admite copiar imágenes al portapapeles: usa Descargar en su lugar.",
      tweet_text: "Just unlocked {tier_part}\"{name}\" in Hermes Agent ☤",
    },
  },
  kanban: {
    loading: "Cargando tablero Kanban…",
    loadFailed: "Error al cargar el tablero Kanban: ",
    loadFailedHint:
      "El backend crea automáticamente kanban.db en la primera lectura. Si el problema persiste, revisa los registros del panel.",
    board: "Tablero",
    newBoard: "+ Nuevo tablero",
    newBoardTitle: "Nuevo tablero",
    newBoardDescription:
      "Los tableros te permiten separar flujos de trabajo no relacionados — uno por proyecto, repositorio o dominio. Los workers de un tablero nunca ven las tareas de otro.",
    slug: "Slug",
    slugHint: "— minúsculas, guiones, p. ej. atm10-server",
    displayName: "Nombre visible",
    displayNameHint: "(opcional)",
    description: "Descripción",
    descriptionHint: "(opcional)",
    icon: "Icono",
    iconHint: "(un solo carácter o emoji)",
    switchAfterCreate: "Cambiar a este tablero tras crearlo",
    cancel: "Cancelar",
    creating: "Creando…",
    createBoard: "Crear tablero",
    search: "Buscar",
    filterCards: "Filtrar tarjetas…",
    tenant: "Tenant",
    allTenants: "Todos los tenants",
    assignee: "Asignado a",
    allProfiles: "Todos los perfiles",
    showArchived: "Mostrar archivados",
    lanesByProfile: "Carriles por perfil",
    nudgeDispatcher: "Avisar al dispatcher",
    refresh: "Actualizar",
    selected: "seleccionado(s)",
    complete: "Completar",
    archive: "Archivar",
    apply: "Aplicar",
    clear: "Limpiar",
    createTask: "Crear tarea en esta columna",
    noTasks: "— sin tareas —",
    unassigned: "sin asignar",
    untitled: "(sin título)",
    loadingDetail: "Cargando…",
    addComment: "Añadir un comentario… (Enter para enviar)",
    comment: "Comentario",
    status: "Estado",
    workspace: "Workspace",
    skills: "Habilidades",
    createdBy: "Creado por",
    result: "Result",
    comments: "Comentarios",
    events: "Eventos",
    runHistory: "Historial de ejecuciones",
    workerLog: "Registro del worker",
    loadingLog: "Cargando registro…",
    noWorkerLog:
      "— aún no hay registro del worker (la tarea no se ha lanzado o el registro fue rotado) —",
    noDescription: "— sin descripción —",
    noComments: "— sin comentarios —",
    edit: "editar",
    save: "Guardar",
    dependencies: "Dependencias",
    parents: "Padres:",
    children: "Hijos:",
    none: "ninguno",
    addParent: "— añadir padre —",
    addChild: "— añadir hijo —",
    removeDependency: "Eliminar dependencia",
    block: "Bloquear",
    unblock: "Desbloquear",
    notifyHomeChannels: "Notificar a los canales de inicio",
    diagnostics: "Diagnósticos",
    hide: "Ocultar",
    show: "Mostrar",
    attention: "Atención",
    tasksNeedAttention: "tareas requieren atención",
    taskNeedsAttention: "1 tarea requiere atención",
    diagnostic: "diagnóstico",
    open: "Abrir",
    close: "Cerrar (Esc)",
    reassignTo: "Reasignar a:",
    copied: "Copiado",
    copyCommand: "Copiar comando al portapapeles",
    reclaim: "Recuperar",
    reassign: "Reasignar",
    renderingError: "La pestaña Kanban tuvo un error de renderizado",
    reloadView: "Recargar vista",
    wsAuthFailed:
      "Error de autenticación de WebSocket — recarga la página para refrescar el token de sesión.",
    markDone: "¿Marcar {n} tarea(s) como hechas?",
    markArchived: "¿Archivar {n} tarea(s)?",
    warning: "Advertencia",
    phantomIds: "IDs fantasma:",
    active: "activo",
    ended: "finalizado",
    noProfile: "(sin perfil)",
    showAllAttempts: "Mostrar todos los intentos",
    sendingUpdates: "Enviando actualizaciones a",
    sendNotifications: "Enviar notificaciones de completed / blocked / gave_up a",
    archiveBoardConfirm:
      "¿Archivar el tablero '{name}'? Se moverá a boards/_archived/ para que puedas recuperarlo más tarde. Las tareas de este tablero ya no aparecerán en ninguna parte de la UI.",
    archiveBoardTitle: "Archivar este tablero",
    boardSwitcherHint: "Los tableros te permiten separar flujos de trabajo no relacionados",
    taskCreatedWarning: "Tarea creada, pero: ",
    moveFailed: "Error al mover: ",
    bulkFailed: "Lote: ",
    completionBlockedHallucination: "⚠ Completado bloqueado — IDs de tarjeta fantasma",
    suspectedHallucinatedReferences: "⚠ El texto referenció IDs de tarjeta fantasma",
    pickProfileFirst: "Elige primero un perfil.",
    unblockedMessage: "Desbloqueado {id}. La tarea está lista para el próximo tick.",
    unblockFailed: "Error al desbloquear: ",
    reclaimedMessage: "Recuperado {id}. La tarea vuelve a estar lista.",
    reclaimFailed: "Error al recuperar: ",
    reassignedMessage: "Reasignado {id} a {profile}.",
    reassignFailed: "Error al reasignar: ",
    selectForBulk: "Seleccionar para acciones por lotes",
    clickToEdit: "Haz clic para editar",
    clickToEditAssignee: "Haz clic para editar el asignado",
    emptyAssignee: "(vacío = sin asignar)",
    columnLabels: {
      triage: "Clasificación",
      todo: "Por hacer",
      scheduled: "Programado",
      ready: "Listo",
      running: "En curso",
      blocked: "Bloqueado",
      done: "Hecho",
      archived: "Archivado",
    },
    columnHelp: {
      triage: "Ideas en bruto — un specifier desarrollará la especificación",
      todo: "Esperando dependencias o sin asignar",
      scheduled: "Esperando un retraso conocido o un seguimiento programado",
      ready: "Dependencias satisfechas; asigna un perfil para despachar",
      running: "Reclamado por un worker — en ejecución",
      blocked: "El worker pidió intervención humana",
      done: "Completado",
      archived: "Archivado",
    },
    confirmDone:
      "¿Marcar esta tarea como hecha? Se libera el reclamo del worker y los hijos dependientes pasan a estar listos.",
    confirmArchive:
      "¿Archivar esta tarea? Desaparecerá de la vista por defecto del tablero.",
    confirmBlocked:
      "¿Marcar esta tarea como bloqueada? Se libera el reclamo del worker.",
    completionSummary:
      "Resumen de finalización para {label}. Se almacena como el result de la tarea.",
    completionSummaryRequired:
      "El resumen de finalización es obligatorio antes de marcar una tarea como hecha.",
    triagePlaceholder: "Idea aproximada — la IA la especificará…",
    taskTitlePlaceholder: "Título de la nueva tarea…",
    specifier: "specifier",
    assigneePlaceholder: "asignado",
    priority: "Prioridad",
    skillsPlaceholder:
      "habilidades (opcional, separadas por comas): translation, github-code-review",
    noParent: "— sin padre —",
    workspacePathDir: "ruta del workspace (obligatoria, p. ej. ~/projects/my-app)",
    workspacePathOptional:
      "ruta del workspace (opcional, derivada del asignado si está vacía)",
    logTruncated: "(mostrando los últimos 100 KB — registro completo en ",
    logAt: ")",
  },
};
