export const esTranslation = {
  sidebar: {
    library: 'Biblioteca',
    mainstage: 'Escenario Principal',
    newReleases: 'Novedades',
    allAlbums: 'Todos los Álbumes',
    randomAlbums: 'Álbumes Aleatorios',
    artists: 'Artistas',
    composers: 'Compositores',
    randomMix: 'Mezcla Aleatoria',
    randomPicker: 'Crear Mezcla',
    favorites: 'Favoritos',
    nowPlaying: 'Reproduciendo Ahora',
    system: 'Sistema',
    statistics: 'Estadísticas',
    settings: 'Configuración',
    help: 'Ayuda',
    expand: 'Expandir Barra Lateral',
    collapse: 'Colapsar Barra Lateral',

    downloadingTracks: 'Descargando {{n}} pistas…',
    syncingTracks: 'Sincronizando {{done}}/{{total}}…',
    cancelDownload: 'Cancelar descarga',
    offlineLibrary: 'Biblioteca Offline',
    genres: 'Géneros',
    tracks: 'Canciones',
    playlists: 'Listas de Reproducción',
    mostPlayed: 'Más Reproducidos',
    losslessAlbums: 'Sin Pérdidas',
    radio: 'Radio por Internet',
    folderBrowser: 'Explorar Carpetas',
    deviceSync: 'Sincronizar dispositivo',
    libraryScope: 'Ámbito de biblioteca',
    allLibraries: 'Todas las bibliotecas',
    expandPlaylists: 'Expandir listas',
    collapsePlaylists: 'Colapsar listas',
    more: 'Más',
    feelingLucky: 'Mezcla Suerte',
  },
  home: {
    hero: 'Destacado',
    starred: 'Favoritos Personales',
    recent: 'Agregados Recientemente',
    mostPlayed: 'Más Reproducidos',
    recentlyPlayed: 'Reproducidos Recientemente',
    losslessAlbums: 'Álbumes sin Pérdidas',
    discover: 'Descubrir',
    discoverSongs: 'Descubrir canciones',
    loadMore: 'Cargar Más',
    discoverMore: 'Descubrir Más',
    discoverArtists: 'Descubrir Artistas',
    discoverArtistsMore: 'Todos los Artistas',
    becauseYouLike: 'Porque escuchaste…',
    becauseYouLikeFor: 'Porque escuchaste a {{artist}}',
    similarTo: 'Similar a {{artist}}',
    becauseYouLikeTracks_one: '{{count}} canción',
    becauseYouLikeTracks_other: '{{count}} canciones'
  },
  hero: {
    eyebrow: 'Álbum Destacado',
    playAlbum: 'Reproducir Álbum',
    enqueue: 'Agregar a la Cola',
    enqueueTooltip: 'Agregar álbum completo a la cola',
  },
  search: {
    placeholder: 'Buscar artista, álbum o canción…',
    noResults: 'No hay resultados para "{{query}}"',
    artists: 'Artistas',
    albums: 'Álbumes',
    songs: 'Canciones',
    clearLabel: 'Limpiar búsqueda',
    addedToQueueToast: '"{{title}}" añadido a la cola',
    title: 'Buscar',
    resultsFor: 'Resultados para "{{query}}"',
    album: 'Álbum',
    advanced: 'Búsqueda Avanzada',
    advancedSearchTerm: 'Término de búsqueda',
    advancedSearchPlaceholder: 'Título, álbum, artista…',
    advancedGenre: 'Género',
    advancedAllGenres: 'Todos los géneros',
    advancedYear: 'Año',
    advancedYearFrom: 'desde',
    advancedYearTo: 'hasta',
    advancedAll: 'Todos',
    advancedSearch: 'Buscar',
    advancedEmpty: 'Ingresa un término de búsqueda o selecciona un filtro para comenzar.',
    advancedNoResults: 'No se encontraron resultados.',
    advancedGenreNote: 'Las canciones se seleccionan aleatoriamente de este género.',
    recentSearches: 'Búsquedas Recientes',
    browse: 'Explorar',
    emptyHint: '¿Qué quieres escuchar?',
    genres: 'Géneros',
  },
  nowPlaying: {
    tooltip: '¿Quién está escuchando?',
    title: '¿Quién está escuchando?',
    loading: 'Cargando…',
    nobody: 'Nadie está escuchando actualmente.',
    minutesAgo: 'hace {{n}}m',
    nothingPlaying: 'Aún no se está reproduciendo nada. ¡Empieza una canción!',
    aboutArtist: 'Sobre el Artista',
    fromAlbum: 'De este Álbum',
    viewAlbum: 'Ver Álbum',
    goToArtist: 'Ir al Artista',
    readMore: 'Leer más',
    showLess: 'Mostrar menos',
    genreInfo: 'Género',
    trackInfo: 'Información de la Pista',
    topSongs: 'Más reproducidas de este artista',
    topSongsCredit: 'Temas principales de {{name}}',
    trackPosition: 'Pista {{pos}}',
    playsCount_one: '{{count}} reproducción',
    playsCount_other: '{{count}} reproducciones',
    releasedYearsAgo_one: 'hace {{count}} año',
    releasedYearsAgo_other: 'hace {{count}} años',
    discography: 'Discografía',
    lastfmStats: 'Estadísticas de Last.fm',
    thisTrack: 'Este tema',
    thisArtist: 'Este artista',
    listeners: 'oyentes',
    scrobbles: 'scrobbles',
    yourScrobbles: 'por ti',
    listenersN: '{{n}} oyentes',
    scrobblesN: '{{n}} scrobbles',
    playsByYouN: 'reproducido {{n}}× por ti',
    openTrackOnLastfm: 'Tema en Last.fm',
    openArtistOnLastfm: 'Artista en Last.fm',
    rgTrackTooltip: 'ReplayGain (pista)',
    rgAlbumTooltip: 'ReplayGain (álbum)',
    rgAutoTooltip: 'ReplayGain (auto)',
    showMoreTracks: 'Mostrar {{count}} más',
    showLessTracks: 'Mostrar menos',
    hideCard: 'Ocultar tarjeta',
    layoutMenu: 'Diseño',
    visibleCards: 'Tarjetas visibles',
    hiddenCards: 'Tarjetas ocultas',
    noHiddenCards: 'No hay tarjetas ocultas',
    resetLayout: 'Restablecer diseño',
    emptyColumn: 'Suelta tarjetas aquí',
  },
  contextMenu: {
    playNow: 'Reproducir Ahora',
    playNext: 'Reproducir Siguiente',
    addToQueue: 'Agregar a la Cola',
    enqueueAlbum: 'Agregar Álbum a la Cola',
    enqueueAlbums_one: 'Agregar {{count}} álbum a la cola',
    enqueueAlbums_other: 'Agregar {{count}} álbumes a la cola',
    startRadio: 'Iniciar Radio',
    instantMix: 'Mezcla Instantánea',
    instantMixFailed: 'No se pudo crear la Mezcla Instantánea — error del servidor o plugin.',
    cliMixNeedsTrack: 'No hay nada en reproducción — inicia la reproducción y vuelve a ejecutar el comando de mezcla.',
    lfmLove: 'Favorito en Last.fm',
    lfmUnlove: 'Quitar favorito de Last.fm',
    favorite: 'Favorito',
    favoriteArtist: 'Artista Favorito',
    favoriteAlbum: 'Álbum Favorito',
    unfavorite: 'Quitar de Favoritos',
    unfavoriteArtist: 'Quitar Artista de Favoritos',
    unfavoriteAlbum: 'Quitar Álbum de Favoritos',
    removeFromQueue: 'Quitar de la Cola',
    removeFromPlaylist: 'Quitar de la Playlist',
    openAlbum: 'Abrir Álbum',
    goToArtist: 'Ir al Artista',
    download: 'Descargar (ZIP)',
    addToPlaylist: 'Agregar a Lista de Reproducción',
    selectedPlaylists: '{{count}} listas seleccionadas',
    selectedAlbums: '{{count}} álbumes seleccionados',
    selectedArtists: '{{count}} artistas seleccionados',
    songInfo: 'Información de la Canción',
    shareLink: 'Copiar enlace para compartir',
    shareCopied: 'Enlace copiado al portapapeles.',
    shareCopyFailed: 'No se pudo copiar al portapapeles.',
  },
  sharePaste: {
    notLoggedIn: 'Inicia sesión y añade el servidor antes de pegar un enlace para compartir.',
    noMatchingServer: 'Ningún servidor guardado coincide con este enlace. Añade un servidor con esta dirección: {{url}}',
    trackUnavailable: 'No se encontró esta canción en el servidor.',
    albumUnavailable: 'No se encontró este álbum en el servidor.',
    artistUnavailable: 'No se encontró este artista en el servidor.',
    composerUnavailable: 'No se encontró este compositor en el servidor.',
    openedTrack: 'Reproduciendo la canción compartida.',
    openedAlbum: 'Abriendo el álbum compartido.',
    openedArtist: 'Abriendo el artista compartido.',
    openedComposer: 'Abriendo el compositor compartido.',
    openedQueue_one: 'Reproduciendo {{count}} pista del enlace para compartir.',
    openedQueue_other: 'Reproduciendo {{count}} pistas del enlace para compartir.',
    openedQueuePartial:
      'Reproduciendo {{played}} de {{total}} pistas del enlace ({{skipped}} no encontradas en este servidor).',
    queueAllUnavailable: 'Ninguna pista de este enlace se encontró en el servidor.',
    genericError: 'No se pudo abrir el enlace para compartir.',
  },
  albumDetail: {
    back: 'Volver',
    orbitDoubleClickHint: 'Doble clic para añadir esta canción a la cola Orbit',
    playAll: 'Reproducir Todo',
    shareAlbum: 'Compartir álbum',
    enqueue: 'Agregar a la Cola',
    enqueueTooltip: 'Agregar álbum completo a la cola',
    artistBio: 'Biografía del Artista',
    download: 'Descargar (ZIP)',
    downloading: 'Cargando…',
    cacheOffline: 'Disponible offline',
    offlineCached: 'Disponible offline',
    offlineDownloading: 'Descargando… ({{n}}/{{total}})',
    removeOffline: 'Quitar de offline',
    offlineStorageFull: 'Almacenamiento offline lleno (límite: {{mb}} MB). Libera espacio eliminando un álbum de tu Biblioteca Offline, o aumenta el límite en Configuración.',
    offlineStorageGoToLibrary: 'Biblioteca Offline',
    offlineStorageGoToSettings: 'Configuración',
    favoriteAdd: 'Agregar a Favoritos',
    favoriteRemove: 'Quitar de Favoritos',
    favorite: 'Favorito',
    noBio: 'No hay biografía disponible.',
    moreByArtist: 'Más de {{artist}}',
    tracksCount: '{{n}} Pistas',
    goToArtist: 'Ir a {{artist}}',
    moreLabelAlbums: 'Más álbumes en {{label}}',
    trackTitle: 'Título',
    trackAlbum: 'Álbum',
    trackArtist: 'Artista',
    trackGenre: 'Género',
    trackFormat: 'Formato',
    trackFavorite: 'Favorito',
    trackRating: 'Calificación',
    trackDuration: 'Duración',
    trackTotal: 'Total',
    columns: 'Columnas',
    resetColumns: 'Restablecer',
    notFound: 'Álbum no encontrado.',
    bioModal: 'Biografía del Artista',
    bioClose: 'Cerrar',
    ratingLabel: 'Calificación',
    enlargeCover: 'Ampliar',
    filterSongs: 'Filtrar canciones…',
    sortNatural: 'Natural',
    sortByTitle: 'A–Z (Título)',
    sortByArtist: 'A–Z (Artista)',
    sortByAlbum: 'A–Z (Álbum)',
  },
  entityRating: {
    albumShort: 'Calificación del álbum',
    artistShort: 'Calificación del artista',
    albumAriaLabel: 'Calificación del álbum',
    artistAriaLabel: 'Calificación del artista',
    selectedArtistsRatingAriaLabel: 'Calificación con estrellas para {{count}} artistas seleccionados',
    selectedAlbumsRatingAriaLabel: 'Calificación con estrellas para {{count}} álbumes seleccionados',
    saveFailed: 'No se pudo guardar la calificación.',
  },
  artistDetail: {
    back: 'Volver',
    albums: 'Álbumes',
    album: 'Álbum',
    playAll: 'Reproducir Todo',
    shareArtist: 'Compartir artista',
    shuffle: 'Aleatorio',
    radio: 'Radio',
    loading: 'Cargando…',
    noRadio: 'No se encontraron pistas similares para este artista.',
    notFound: 'Artista no encontrado.',
    albumsBy: 'Álbumes de {{name}}',
    topTracks: 'Mejores Pistas',
    noAlbums: 'No se encontraron álbumes.',
    trackTitle: 'Título',
    trackAlbum: 'Álbum',
    trackDuration: 'Duración',
    favoriteAdd: 'Agregar a Favoritos',
    favoriteRemove: 'Quitar de Favoritos',
    favorite: 'Favorito',
    albumCount_one: '{{count}} Álbum',
    albumCount_other: '{{count}} Álbumes',
    openedInBrowser: 'Abierto en navegador',
    featuredOn: 'También Aparece En',
    similarArtists: 'Artistas Similares',
    cacheOffline: 'Guardar discografía offline',
    offlineCached: 'Discografía guardada',
    offlineDownloading: 'Descargando… ({{done}}/{{total}} álbumes)',
    uploadImage: 'Subir imagen del artista',
    uploadImageError: 'Error al subir imagen',
    releaseTypes: {
      album: 'Álbum',
      ep: 'EP',
      single: 'Single',
      compilation: 'Recopilación',
      live: 'En vivo',
      soundtrack: 'Banda sonora',
      remix: 'Remix',
      other: 'Otro',
    },
  },
  favorites: {
    title: 'Favoritos',
    empty: "Aún no has guardado ningún favorito.",
    artists: 'Artistas',
    albums: 'Álbumes',
    songs: 'Canciones',
    enqueueAll: 'Agregar todo a la cola',
    playAll: 'Reproducir todo',
    removeSong: 'Quitar de favoritos',
    stations: 'Estaciones de Radio',
    showingFiltered: 'Mostrando {{filtered}} de {{total}} ({{artist}})',
    showingCount: 'Mostrando {{filtered}} de {{total}}',
    clearArtistFilter: 'Limpiar filtro de artista',
    noFilterResults: 'No hay resultados con los filtros seleccionados.',
    allArtists: 'Todos los Artistas',
    topArtists: 'Artistas favoritos principales',
    topArtistsSongCount_one: '{{count}} canción',
    topArtistsSongCount_other: '{{count}} canciones',
  },
  randomLanding: {
    title: 'Crear Mezcla',
    mixByTracks: 'Mezcla por Canciones',
    mixByTracksDesc: 'Selección aleatoria de canciones de toda tu biblioteca',
    mixByAlbums: 'Mezcla por Álbumes',
    mixByAlbumsDesc: 'Álbumes aleatorios para tu próximo descubrimiento',
    mixByLucky: 'Mezcla Suerte',
    mixByLuckyDesc: 'Instant Mix inteligente con artistas, álbumes y valoraciones destacadas',
  },
  randomAlbums: {
    title: 'Álbumes Aleatorios',
    refresh: 'Refrescar',
  },
  genres: {
    title: 'Géneros',
    genreCount: 'Géneros',
    albumCount_one: '{{count}} álbum',
    albumCount_other: '{{count}} álbumes',
    loading: 'Cargando géneros…',
    empty: 'No se encontraron géneros.',
    albumsLoading: 'Cargando álbumes…',
    albumsEmpty: 'No se encontraron álbumes para este género.',
    loadMore: 'Cargar más',
    back: 'Volver',
  },
  randomMix: {
    title: 'Mezcla Aleatoria',
    remix: 'Remezclar',
    remixTooltip: 'Cargar nuevas canciones aleatorias',
    remixGenre: 'Remezclar {{genre}}',
    remixTooltipGenre: 'Cargar nuevas canciones de {{genre}}',
    playAll: 'Reproducir Todo',
    trackTitle: 'Título',
    trackArtist: 'Artista',
    trackAlbum: 'Álbum',
    trackFavorite: 'Favorito',
    trackDuration: 'Duración',
    favoriteAdd: 'Agregar a Favoritos',
    favoriteRemove: 'Quitar de Favoritos',
    play: 'Reproducir',
    trackGenre: 'Género',
    mixSettingsHeader: 'Ajustes del mix',
    exclusionsHeader: 'Exclusiones',
    filterPanelInexactSizeNote: 'El tamaño del mix es un objetivo — las solicitudes grandes pueden devolver menos pistas únicas si el grupo aleatorio del servidor se agota.',
    mixSize: 'Tamaño de lista',
    excludeAudiobooks: 'Excluir audiolibros y radioteatros',
    excludeAudiobooksDesc: 'Busca palabras clave en género, título, álbum y artista — ej. Hörbuch, Audiobook, Spoken Word, …',
    genreBlocked: 'Palabra clave bloqueada',
    genreAddedToBlacklist: 'Agregada a lista de filtros',
    genreAlreadyBlocked: 'Ya está bloqueada',
    artistBlocked: 'Artista bloqueado',
    artistAddedToBlacklist: 'Artista agregado a lista de filtros',
    artistClickHint: 'Click para bloquear este artista',
    blacklistToggle: 'Filtro de Palabras Clave',
    genreMixTitle: 'Mezcla por Género',
    genreMixDesc: 'Top 20 géneros por cantidad de canciones — click para cargar mezcla aleatoria',
    genreMixAll: 'Todas las Canciones',
    genreMixLoadMore: 'Cargar 10 más',
    genreMixNoGenres: 'No se encontraron géneros en el servidor.',
    shuffleGenres: 'Mostrar géneros diferentes',
    filterPanelTitle: 'Filtros',
    filterPanelDesc: 'Click en una etiqueta de género o nombre de artista en la lista para bloquearlo de futuras mezclas.',
    genreClickHint: 'Click en una etiqueta de género para agregarla\ncomo palabra clave filtrada.\nBusca en género, título, álbum y artista.',
  },
  luckyMix: {
    done: 'Mezcla Suerte lista: {{count}} canciones',
    failed: 'No se pudo crear la Mezcla Suerte. Inténtalo de nuevo.',
    unavailable: 'Mezcla Suerte no está disponible para este servidor.',
    cancelTooltip: 'Cancelar creación de Mezcla Suerte',
  },
  albums: {
    title: 'Todos los Álbumes',
    sortByName: 'A–Z (Álbum)',
    sortByArtist: 'A–Z (Artista)',
    sortNewest: 'Más recientes primero',
    sortRandom: 'Aleatorio',
    yearFrom: 'Desde',
    yearTo: 'Hasta',
    yearFilterClear: 'Limpiar filtro de año',
    yearFilterLabel: 'Año',
    compilationLabel: 'Recopilatorios',
    compilationOnly: 'Solo recopilatorios',
    compilationHide: 'Ocultar recopilatorios',
    compilationTooltipAll: 'Todos los álbumes · clic: solo recopilatorios',
    compilationTooltipOnly: 'Solo recopilatorios · clic: ocultar recopilatorios',
    compilationTooltipHide: 'Recopilatorios ocultos · clic: mostrar todo',
    select: 'Selección múltiple',
    startSelect: 'Activar selección múltiple',
    cancelSelect: 'Cancelar',
    selectionCount: '{{count}} seleccionados',
    downloadZips: 'Descargar ZIPs',
    addOffline: 'Agregar Offline',
    enqueueSelected_one: 'A la cola ({{count}})',
    enqueueSelected_other: 'A la cola ({{count}})',
    enqueueQueued_one: '{{count}} álbum añadido a la cola',
    enqueueQueued_other: '{{count}} álbumes añadidos a la cola',
    downloadingZip: 'Descargando {{current}}/{{total}}: {{name}}',
    downloadZipDone: '{{count}} ZIP(s) descargado(s)',
    downloadZipFailed: 'Error al descargar {{name}}',
    offlineQueuing: 'Encolando {{count}} álbum(es) para offline…',
    offlineFailed: 'Error al agregar {{name}} offline',
    addToPlaylist: 'Agregar a Lista de Reproducción',
  },
  tracks: {
    title: 'Canciones',
    subtitle: 'Explorar. Buscar. Descubrir.',
    heroEyebrow: 'Canción del momento',
    heroReroll: 'Elegir otra',
    playSong: 'Reproducir',
    enqueueSong: 'Añadir a la cola',
    railRandom: 'Selección aleatoria',
    railHighlyRated: 'Mejor valoradas',
    browseTitle: 'Explorar todas las canciones',
    browseUnsupported: 'Este servidor no lista toda la biblioteca de una vez. Usa la búsqueda de arriba para encontrar canciones concretas.',
    searchPlaceholder: 'Busca una canción por título, artista o álbum…',
    count_one: '{{count}} canción',
    count_other: '{{count}} canciones',
  },
  artists: {
    title: 'Artistas',
    search: 'Buscar…',
    all: 'Todos',
    gridView: 'Vista de cuadrícula',
    listView: 'Vista de lista',
    imagesOn: 'Imágenes de artistas activadas — puede aumentar la carga de red y sistema',
    imagesOff: 'Imágenes de artistas desactivadas — mostrando solo iniciales',
    loadMore: 'Cargar más',
    notFound: 'No se encontraron artistas.',
    albumCount_one: '{{count}} Álbum',
    albumCount_other: '{{count}} Álbumes',
    selectionCount: '{{count}} seleccionados',
    select: 'Selección múltiple',
    startSelect: 'Activar selección múltiple',
    cancelSelect: 'Cancelar',
    addToPlaylist: 'Agregar a Lista',
  },
  composers: {
    title: 'Compositores',
    search: 'Buscar…',
    notFound: 'No se encontraron compositores.',
    unsupported: 'La navegación por compositor requiere Navidrome 0.55 o más reciente.',
    loadFailed: 'No se pudieron cargar los compositores.',
    retry: 'Reintentar',
    involvedIn_one: 'Participa en {{count}} álbum',
    involvedIn_other: 'Participa en {{count}} álbumes',
  },
  composerDetail: {
    back: 'Atrás',
    notFound: 'Compositor no encontrado.',
    about: 'Sobre este compositor',
    works: 'Obras',
    noWorks: 'No se encontraron obras.',
    workCount_one: '{{count}} obra',
    workCount_other: '{{count}} obras',
    shareComposer: 'Compartir compositor',
    unknownComposer: 'Compositor',
  },
  login: {
    subtitle: 'Tu Reproductor Navidrome para Escritorio',
    serverName: 'Nombre del Servidor (opcional)',
    serverNamePlaceholder: 'Mi Navidrome',
    serverUrl: 'URL del Servidor',
    serverUrlPlaceholder: '192.168.1.100:4533 o https://music.example.com',
    username: 'Usuario',
    usernamePlaceholder: 'admin',
    password: 'Contraseña',
    showPassword: 'Mostrar contraseña',
    hidePassword: 'Ocultar contraseña',
    connect: 'Conectar',
    connecting: 'Conectando…',
    connected: '¡Conectado!',
    error: 'Conexión fallida — por favor verifica tus datos.',
    urlRequired: 'Por favor ingresa una URL de servidor.',
    savedServers: 'Servidores Guardados',
    addNew: 'O agregar un nuevo servidor',
    orMagicString: 'O cadena mágica',
    magicStringPlaceholder: 'Pega una cadena de invitación (psysonic1-…)',
    magicStringInvalid: 'Cadena mágica no válida o ilegible.',
  },
  connection: {
    connected: 'Conectado',
    connectedTo: 'Conectado a {{server}}',
    disconnected: 'Desconectado',
    disconnectedFrom: 'No se puede alcanzar {{server}} — click para verificar configuración',
    checking: 'Conectando…',
    extern: 'Externo',
    offlineTitle: 'Sin conexión al servidor',
    offlineSubtitle: 'No se puede alcanzar {{server}}. Verifica tu red o servidor.',
    offlineModeBanner: 'Modo Offline — reproduciendo desde caché local',
    offlineNoCacheBanner: 'Sin conexión al servidor — no se puede acceder a {{server}}',
    offlineLibraryTitle: 'Biblioteca Offline',
    offlineLibraryEmpty: 'No hay álbumes en caché aún. Conéctate, abre un álbum y click en "Disponible offline".',
    offlineAlbumCount: '{{n}} álbum',
    offlineAlbumCount_plural: '{{n}} álbumes',
    offlineFilterAll: 'Todos',
    offlineFilterAlbums: 'Álbumes',
    offlineFilterPlaylists: 'Listas',
    offlineFilterArtists: 'Discografías',
    retry: 'Reintentar',
    serverSettings: 'Configuración del servidor',
    switchServerTitle: 'Cambiar servidor',
    switchServerHint: 'Clic para elegir otro servidor guardado.',
    manageServers: 'Gestionar servidores…',
    switchFailed: 'No se pudo cambiar — servidor inalcanzable.',
    lastfmConnected: 'Last.fm conectado como @{{user}}',
    lastfmSessionInvalid: 'Sesión inválida — click para reconectar',
  },
  common: {
    albums: 'Álbumes',
    album: 'Álbum',
    loading: 'Cargando…',
    loadingMore: 'Cargando…',
    loadingPlaylists: 'Cargando Listas…',
    noAlbums: 'No se encontraron álbumes.',
    downloading: 'Descargando…',
    downloadZip: 'Descargar (ZIP)',
    back: 'Volver',
    cancel: 'Cancelar',
    save: 'Guardar',
    delete: 'Eliminar',
    use: 'Usar',
    add: 'Agregar',
    new: 'Nuevo',
    active: 'Activo',
    download: 'Descargar',
    chooseDownloadFolder: 'Elegir carpeta de descarga',
    noFolderSelected: 'Ninguna carpeta seleccionada',
    rememberDownloadFolder: 'Recordar esta carpeta',
    filterGenre: 'Filtro de Género',
    filterSearchGenres: 'Buscar géneros…',
    filterNoGenres: 'Ningún género coincide',
    filterClear: 'Limpiar',
    favorites: 'Favoritos',
    favoritesTooltipOff: 'Mostrar solo favoritos',
    favoritesTooltipOn: 'Mostrar todo',
    play: 'Reproducir',
    bulkSelected: '{{count}} seleccionados',
    clearSelection: 'Limpiar selección',
    bulkAddToPlaylist: 'Agregar a Lista',
    bulkRemoveFromPlaylist: 'Quitar de Lista',
    bulkClear: 'Limpiar selección',
    updaterAvailable: 'Actualización disponible',
    updaterVersion: 'v{{version}} está disponible',
    updaterWebsite: 'Sitio web',
    updaterModalTitle: 'Nueva Versión Disponible',
    updaterChangelog: 'Novedades',
    updaterDownloadBtn: 'Descargar Ahora',
    updaterSkipBtn: 'Omitir esta Versión',
    updaterRemindBtn: 'Recordarme Después',
    updaterDone: 'Descarga completada',
    updaterShowFolder: 'Mostrar en Carpeta',
    updaterInstallHint: 'Cierra Psysonic y ejecuta el instalador manualmente.',
    updaterAurHint: 'Instala la actualización vía AUR:',
    updaterErrorMsg: 'Error de descarga',
    updaterRetryBtn: 'Reintentar',
    durationHoursMinutes: '{{hours}}h {{minutes}}m',
    durationMinutesOnly: '{{minutes}}m',
    updaterOpenGitHub: 'Abrir en GitHub',
    filters: 'Filtros',
    more: 'más',
    yearRange: 'Rango de años',
    clearAll: 'Limpiar todo',
  },
  settings: {
    title: 'Configuración',
    language: 'Idioma',
    languageEn: 'English',
    languageDe: 'Deutsch',
    languageEs: 'Español',
    languageFr: 'Français',
    languageNl: 'Nederlands',
    languageNb: 'Norsk',
    languageRu: 'Русский',
    languageZh: '中文',
    font: 'Fuente',
    fontHintOpenDyslexic: 'Compatible con dislexia · sin soporte para chino',
    theme: 'Tema',
    appearance: 'Apariencia',
    servers: 'Servidores',
    serverName: 'Nombre del Servidor',
    serverUrl: 'URL del Servidor',
    serverUrlPlaceholder: '192.168.1.100:4533 o https://music.example.com',
    serverUsername: 'Usuario',
    serverPassword: 'Contraseña',
    addServer: 'Agregar Servidor',
    addServerTitle: 'Agregar Nuevo Servidor',
    useServer: 'Usar',
    deleteServer: 'Eliminar',
    noServers: 'No hay servidores guardados.',
    serverActive: 'Activo',
    confirmDeleteServer: '¿Eliminar servidor "{{name}}"?',
    serverConnecting: 'Conectando…',
    serverConnected: '¡Conectado!',
    serverFailed: 'Conexión fallida.',
    testBtn: 'Probar Conexión',
    testingBtn: 'Probando…',
    serverCompatible: 'Diseñado para Navidrome. Otros servidores compatibles con Subsonic (Gonic, Airsonic, …) pueden funcionar con funcionalidad reducida, ya que Psysonic utiliza muchos endpoints específicos de la API de Navidrome.',
    userMgmtTitle: 'Gestión de usuarios',
    userMgmtDesc: 'Administra los usuarios de este servidor. Requiere privilegios de administrador.',
    userMgmtNoAdmin: 'Necesitas privilegios de administrador para gestionar usuarios en este servidor.',
    userMgmtLoadError: 'No se pudieron cargar los usuarios.',
    userMgmtLoadFriendly: 'El servidor no respondió — suele ser algo puntual.',
    userMgmtRetry: 'Reintentar',
    userMgmtEmpty: 'No se encontraron usuarios.',
    userMgmtYouBadge: 'Tú',
    userMgmtAdminBadge: 'Admin',
    userMgmtAddUser: 'Añadir usuario',
    userMgmtAddUserTitle: 'Nuevo usuario',
    userMgmtEditUserTitle: 'Editar usuario',
    userMgmtUsername: 'Nombre de usuario',
    userMgmtName: 'Nombre visible',
    userMgmtEmail: 'Correo electrónico',
    userMgmtPassword: 'Contraseña',
    userMgmtPasswordEditHint: 'Introduce una nueva contraseña para actualizarla.',
    userMgmtRoleAdmin: 'Admin',
    userMgmtLibraries: 'Bibliotecas',
    userMgmtLibrariesAdminHint: 'Los usuarios admin tienen acceso automáticamente a todas las bibliotecas.',
    userMgmtLibrariesEmpty: 'No hay bibliotecas disponibles en este servidor.',
    userMgmtLibrariesValidation: 'Selecciona al menos una biblioteca.',
    userMgmtLibrariesUpdateError: 'Usuario guardado, pero la asignación de bibliotecas falló',
    userMgmtNoLibraries: 'Sin bibliotecas asignadas',
    userMgmtNeverSeen: 'Nunca',
    userMgmtSave: 'Guardar',
    userMgmtCancel: 'Cancelar',
    userMgmtDelete: 'Eliminar',
    userMgmtEdit: 'Editar',
    userMgmtConfirmDelete: '¿Eliminar el usuario «{{username}}»? Esta acción no se puede deshacer.',
    userMgmtCreateError: 'No se pudo crear el usuario.',
    userMgmtUpdateError: 'No se pudo actualizar el usuario.',
    userMgmtDeleteError: 'No se pudo eliminar el usuario.',
    userMgmtCreated: 'Usuario creado.',
    userMgmtUpdated: 'Usuario actualizado.',
    userMgmtDeleted: 'Usuario eliminado.',
    userMgmtValidationMissing: 'Se requieren nombre de usuario, nombre visible y contraseña.',
    userMgmtValidationMissingIdentity: 'Se requieren nombre de usuario y nombre visible.',
    userMgmtMagicStringGenerate: 'Generar cadena mágica',
    userMgmtSaveAndMagicString: 'Guardar y obtener cadena mágica',
    userMgmtMagicStringPasswordNavHint:
      'Navidrome guardará esta contraseña para el usuario. Si difiere de la actual, se actualizará la contraseña de acceso en el servidor.',
    userMgmtMagicStringPlaintextWarning:
      'Comparte la cadena mágica con cuidado: contiene la contraseña sin cifrar (la codificación no es cifrado). Quien tenga la cadena completa puede iniciar sesión como este usuario.',
    userMgmtMagicStringCopied: 'Cadena mágica copiada al portapapeles.',
    userMgmtMagicStringCopyFailed: 'No se pudo copiar al portapapeles.',
    userMgmtMagicStringLoginFailed: 'Falló la comprobación de la contraseña; no se pudieron verificar las credenciales.',
    userMgmtMagicStringModalTitle: 'Generar cadena mágica',
    userMgmtMagicStringModalDesc: 'Introduce la contraseña Subsonic de «{{username}}». Se incluirá en la cadena mágica copiada.',
    userMgmtMagicStringModalConfirm: 'Copiar cadena',
    audiomuseTitle: 'AudioMuse-AI (Navidrome)',
    audiomuseDesc:
      'Activa si este servidor tiene el plugin <pluginLink>AudioMuse-AI Navidrome</pluginLink> configurado. Habilita Mezcla Instantánea desde pistas y usa artistas similares del servidor en lugar de Last.fm en páginas de artistas.',
    audiomuseIssueHint:
      'La Mezcla Instantánea falló recientemente — verifica el plugin de Navidrome y la API de AudioMuse. Artistas similares usan Last.fm como respaldo cuando el servidor no devuelve ninguno.',
    connected: 'Conectado',
    failed: 'Fallido',
    eqTitle: 'Ecualizador',
    eqEnabled: 'Habilitar Ecualizador',
    eqPreset: 'Preajuste',
    eqPresetCustom: 'Personalizado',
    eqPresetBuiltin: 'Preajustes Integrados',
    eqPresetCustomGroup: 'Mis Preajustes',
    eqSavePreset: 'Guardar como Preajuste',
    eqPresetName: 'Nombre del preajuste…',
    eqDeletePreset: 'Eliminar preajuste',
    eqResetBands: 'Restablecer a Plano',
    eqPreGain: 'Pre-ganancia',
    eqResetPreGain: 'Restablecer pre-ganancia',
    eqAutoEqTitle: 'Búsqueda AutoEQ de Auriculares',
    eqAutoEqPlaceholder: 'Buscar modelo de auricular / IEM…',
    eqAutoEqSearching: 'Buscando…',
    eqAutoEqNoResults: 'No se encontraron resultados',
    eqAutoEqError: 'Error de búsqueda',
    eqAutoEqRateLimit: 'Límite de GitHub alcanzado — intenta de nuevo en un minuto',
    eqAutoEqFetchError: 'Error al obtener perfil EQ',
    lfmTitle: 'Last.fm',
    lfmConnect: 'Conectar con Last.fm',
    lfmConnecting: 'Esperando autorización…',
    lfmConfirm: 'He autorizado la aplicación',
    lfmConnected: 'Conectado como',
    lfmDisconnect: 'Desconectar',
    lfmConnectDesc: 'Conecta tu cuenta de Last.fm para habilitar scrobbling y actualizaciones de "Reproduciendo Ahora" directamente desde Psysonic — no requiere configuración de Navidrome.',
    lfmOpenBrowser: 'Se abrirá una ventana del navegador. Autoriza Psysonic en Last.fm, luego click en el botón de abajo.',
    lfmScrobbles: '{{n}} scrobbles',
    lfmMemberSince: 'Miembro desde {{year}}',
    scrobbleEnabled: 'Scrobbling habilitado',
    scrobbleDesc: 'Enviar canciones a Last.fm después del 50% de reproducción',
    behavior: 'Comportamiento de la App',
    cacheTitle: 'Tamaño Máx. de Almacenamiento',
    cacheDesc: 'Portadas e imágenes de artistas. Cuando está lleno, las entradas más antiguas se eliminan automáticamente. Los álbumes offline no se eliminan automáticamente, pero se borrarán al limpiar la caché manualmente.',
    cacheUsedImages: 'Imágenes:',
    cacheUsedOffline: 'Pistas offline:',
    cacheUsedHot: 'Tamaño en disco:',
    hotCacheTrackCount: 'Pistas en caché:',
    cacheMaxLabel: 'Tamaño máx.',
    cacheClearBtn: 'Limpiar Caché',
    cacheClearWarning: 'Esto también eliminará todos los álbumes offline de la biblioteca.',
    cacheClearConfirm: 'Limpiar Todo',
    cacheClearCancel: 'Cancelar',
    offlineDirTitle: 'Biblioteca Offline (En App)',
    offlineDirDesc: 'Ubicación de almacenamiento para pistas que haces disponibles offline dentro de Psysonic.',
    offlineDirDefault: 'Predeterminado (Datos de App)',
    offlineDirChange: 'Cambiar Directorio',
    offlineDirClear: 'Restablecer a Predeterminado',
    offlineDirHint: 'Las nuevas descargas usarán esta ubicación. Las descargas existentes permanecen en su ruta original.',
    hotCacheTitle: 'Caché de reproducción activa',
    hotCacheDisclaimer: 'Precarga las siguientes pistas en cola y mantiene las anteriores. Cuando está activado, usa espacio en disco y red.',
    hotCacheDirDefault: 'Predeterminado (Datos de App)',
    hotCacheDirChange: 'Cambiar carpeta',
    hotCacheDirClear: 'Restablecer a predeterminado',
    hotCacheDirHint: 'Cambiar la carpeta restablece el índice en-app; los archivos ya en disco permanecen donde están hasta que los elimines.',
    hotCacheEnabled: 'Habilitar caché de reproducción activa',
    hotCacheMaxMb: 'Tamaño máximo de caché',
    hotCacheDebounce: 'Espera de cambio de cola',
    hotCacheDebounceImmediate: 'Inmediato',
    hotCacheDebounceSeconds: '{{n}} s',
    hotCacheClearBtn: 'Limpiar caché activa',
    audioOutputDevice: 'Dispositivo de salida de audio',
    audioOutputDeviceDesc: 'Selecciona el dispositivo de audio que usa Psysonic. Los cambios surten efecto de inmediato y reinician la pista actual.',
    audioOutputDeviceDefault: 'Predeterminado del sistema',
    audioOutputDeviceRefresh: 'Actualizar lista de dispositivos',
    audioOutputDeviceOsDefaultNow: 'salida actual del sistema',
    audioOutputDeviceListError: 'No se pudo cargar la lista de dispositivos de audio.',
    audioOutputDeviceNotInCurrentList: 'no está en la lista actual',
    audioOutputDeviceMacNotice: 'En macOS, la reproducción actualmente sigue siempre al dispositivo de salida del sistema por razones técnicas. Cambia el destino mediante Ajustes del Sistema → Sonido o el icono del altavoz en la barra de menús. Motivo: CoreAudio activa una solicitud de permiso de micrófono al abrir un stream no-predeterminado — lo evitamos usando siempre la salida por defecto del sistema.',
    hiResTitle: 'Reproducción Nativa Hi-Res',
    hiResEnabled: 'Habilitar reproducción nativa hi-res',
    hiResDesc: "Fuerza 44.1 kHz de salida por defecto para máxima estabilidad. Habilita solo si tu hardware y red soportan confiablemente altas tasas de muestreo (88.2 kHz+).",
    showArtistImages: 'Mostrar Imágenes de Artistas',
    showArtistImagesDesc: 'Carga y muestra imágenes de artistas en el resumen de Artistas. Desactivado por defecto para reducir I/O de disco del servidor y carga de red en bibliotecas grandes.',
    showOrbitTrigger: 'Mostrar "Orbit" en la cabecera',
    showOrbitTriggerDesc: 'El botón en la cabecera para iniciar o unirse a una sesión de escucha compartida. Ocúltalo si no usas Orbit — puedes volver a activarlo aquí.',
    showTrayIcon: 'Mostrar Icono en Bandeja',
    showTrayIconDesc: 'Muestra el icono de Psysonic en el área de notificación / barra de menú.',
    minimizeToTray: 'Minimizar a Bandeja',
    minimizeToTrayDesc: 'Al cerrar la ventana, mantener Psysonic ejecutándose en la bandeja del sistema en lugar de salir.',
    preloadMiniPlayer: 'Precargar mini reproductor',
    preloadMiniPlayerDesc: 'Crea la ventana del mini reproductor en segundo plano al iniciar la aplicación para que muestre contenido al instante la primera vez que se abre. Consume un poco más de memoria.',
    discordRichPresence: 'Discord Rich Presence',
    discordRichPresenceDesc: 'Muestra la pista actual en tu perfil de Discord. Requiere que Discord esté ejecutándose.',
    useCustomTitlebar: 'Barra de título personalizada',
    useCustomTitlebarDesc: 'Reemplaza la barra de título del sistema con una integrada que coincide con el tema de la app. Desactiva para usar la barra nativa de GNOME/GTK.',
    linuxWebkitSmoothScroll: 'Rueda suave (Linux)',
    linuxWebkitSmoothScrollDesc: 'Activado: inercia. Desactivado: pasos por línea (estilo GTK).',
    discordCoverSource: 'Fuente de portada',
    discordCoverSourceDesc: 'De dónde obtener la portada del álbum para tu perfil de Discord.',
    discordCoverNone: 'Ninguna (solo icono de la app)',
    discordCoverServer: 'Servidor (vía info del álbum)',
    discordCoverApple: 'Apple Music',
    discordOptions: 'Opciones avanzadas de Discord',
    discordTemplates: 'Plantillas de texto personalizadas',
    discordTemplatesDesc: 'Personaliza qué información se muestra en tu perfil de Discord. Variables: {title}, {artist}, {album}',
    discordTemplateDetails: 'Línea principal (details)',
    discordTemplateState: 'Línea secundaria (state)',
    discordTemplateLargeText: 'Tooltip del álbum (largeText)',
    nowPlayingEnabled: 'Mostrar en Reproduciendo Ahora',
    nowPlayingEnabledDesc: 'Transmite tu pista actual a la vista de oyentes en vivo del servidor. Desactiva para dejar de enviar datos de reproducción.',
    enableBandsintown: 'Fechas de gira de Bandsintown',
    enableBandsintownDesc: 'Muestra próximos conciertos del artista actual en la pestaña Info. Los datos se obtienen de la API pública de Bandsintown.',
    lyricsServerFirst: 'Preferir letras del servidor',
    lyricsServerFirstDesc: 'Verifica primero letras provistas por el servidor (etiquetas embebidas, archivos sidecar) antes de consultar LRCLIB. Desactiva para usar LRCLIB primero.',
    enableNeteaselyrics: 'Letras de Netease Cloud Music',
    enableNeteaselyricsDesc: 'Usa Netease Cloud Music como fuente de letras de último recurso cuando el servidor y LRCLIB no devuelvan nada. Mejor cobertura para música asiática e internacional.',
    lyricsSourcesTitle: 'Fuentes de Letras',
    lyricsSourcesDesc: 'Elige qué fuentes consultar para letras y en qué orden. Arrastra para reordenar. Las fuentes desactivadas se omiten completamente.',
    lyricsSourceServer: 'Servidor',
    lyricsSourceLrclib: 'LRCLIB',
    lyricsSourceNetease: 'Netease Cloud Music',
    lyricsModeStandard: 'Estándar',
    lyricsModeStandardDesc: 'Tres fuentes con orden configurable: etiquetas del servidor, LRCLIB, Netease.',
    lyricsModeLyricsplus: 'YouLyPlus (Karaoke)',
    lyricsModeLyricsplusDesc: 'Sincronización palabra por palabra desde Apple Music, Spotify, Musixmatch y QQ (backend comunitario). Recurre silenciosamente a las fuentes estándar cuando no se encuentra nada.',
    lyricsStaticOnly: 'Mostrar letras como texto estático',
    lyricsStaticOnlyDesc: 'Muestra las letras sincronizadas sin desplazamiento automático ni resaltado por palabra.',
    downloadsTitle: 'Exportación ZIP y Archivado',
    downloadsFolderDesc: 'Carpeta de destino para álbumes que descargas como ZIP a tu computadora.',
    downloadsDefault: 'Carpeta de Descargas Predeterminada',
    pickFolder: 'Seleccionar',
    pickFolderTitle: 'Seleccionar Carpeta de Descarga',
    clearFolder: 'Limpiar carpeta de descarga',
    logout: 'Cerrar Sesión',
    aboutTitle: 'Acerca de Psysonic',
    aboutDesc: 'Un reproductor de música de escritorio moderno creado para Navidrome. Utiliza la API de Subsonic más extensiones específicas de Navidrome. Construido en Tauri v2 con motor de audio nativo en Rust — ligero y rápido, pero lleno de características: barra de progreso tipo onda, letras sincronizadas, integración Last.fm, ecualizador de 10 bandas, crossfade, reproducción gapless, Replay Gain, navegación por géneros, y una gran biblioteca de temas.',
    aboutLicense: 'Licencia',
    aboutLicenseText: 'GNU GPL v3 — libre para usar, modificar y distribuir bajo la misma licencia.',
    aboutRepo: 'Código Fuente en GitHub',
    aboutVersion: 'Versión',
    aboutBuiltWith: 'Construido con Tauri · React · TypeScript · Rust/rodio',
    aboutReleaseNotesLabel: 'Notas de la versión',
    aboutReleaseNotesLink: 'Abrir las novedades de esta versión',
    aboutContributorsLabel: 'Contribuidores',
    showChangelogOnUpdate: "Mostrar 'Novedades' al actualizar",
    showChangelogOnUpdateDesc: 'Muestra un discreto banner de changelog encima de Now Playing tras una actualización. Clic abre las notas de la versión; X lo oculta.',
    randomMixTitle: 'Lista negra de Mezcla Aleatoria',
    luckyMixMenuTitle: 'Mostrar Mezcla Suerte en el menú',
    luckyMixMenuDesc: 'Activa Mezcla Suerte en "Crear Mezcla" y como elemento de menú separado cuando la navegación dividida está activa. Solo visible cuando AudioMuse está activo en el servidor actual.',
    randomMixBlacklistTitle: 'Palabras Clave de Filtro Personalizadas',
    randomMixBlacklistDesc: 'Las canciones se excluyen cuando cualquier palabra clave coincide con su género, título, álbum o artista (activo cuando el checkbox de arriba está activado).',
    randomMixBlacklistPlaceholder: 'Agregar palabra clave…',
    randomMixBlacklistAdd: 'Agregar',
    randomMixBlacklistEmpty: 'Aún no hay palabras clave personalizadas.',
    randomMixHardcodedTitle: 'Palabras clave integradas (activas cuando el checkbox está activado)',
    tabAudio: 'Audio',
    tabStorage: 'Sin conexión y caché',
    tabAppearance: 'Apariencia',
    tabLibrary: 'Biblioteca',
    tabServers: 'Servidores',
    tabLyrics: 'Letras',
    tabPersonalisation: 'Personalización',
    tabIntegrations: 'Integraciones',
    inputKeybindingsTitle: 'Atajos de teclado',
    aboutContributorsCount_one: '{{count}} contribución',
    aboutContributorsCount_other: '{{count}} contribuciones',
    searchPlaceholder: 'Buscar en ajustes…',
    searchNoResults: 'Ningún ajuste coincide con tu búsqueda.',
    aboutMaintainersLabel: 'Mantenedores',
    integrationsPrivacyTitle: 'Aviso de privacidad',
    integrationsPrivacyBody: 'Todas las integraciones de esta pestaña son <strong>opt-in</strong> y, una vez activadas, envían datos a servicios externos o a tu servidor Navidrome. Last.fm recibe tu historial de escucha, Discord muestra la pista actual en tu perfil, Bandsintown se consulta por artista para obtener fechas de gira, y la compartición «En reproducción» publica tu pista actual para otros usuarios de tu servidor Navidrome. Si no quieres nada de esto, simplemente deja desactivada la sección correspondiente.',
    homeCustomizerTitle: 'Página de Inicio',
    queueToolbarTitle: 'Barra de herramientas de cola',
    queueToolbarReset: 'Restablecer a predeterminado',
    queueToolbarSeparator: 'Separador',
    sidebarTitle: 'Barra Lateral',
    sidebarReset: 'Restablecer a predeterminado',
    artistLayoutTitle: 'Secciones de la página del artista',
    artistLayoutDesc: 'Arrastra para reordenar, alterna para ocultar secciones individuales de la página del artista. Las secciones sin datos se omiten automáticamente.',
    artistLayoutReset: 'Restablecer a predeterminado',
    artistLayoutBio: 'Biografía del artista',
    artistLayoutTopTracks: 'Mejores pistas',
    artistLayoutSimilar: 'Artistas similares',
    artistLayoutAlbums: 'Álbumes',
    artistLayoutFeatured: 'También presente en',
    sidebarDrag: 'Arrastra para reordenar',
    sidebarFixed: 'Siempre visible',
    randomNavSplitTitle: 'Dividir navegación Mix',
    randomNavSplitDesc: 'Mostrar "Mezcla Aleatoria", "Álbumes Aleatorios" y "Mezcla Suerte" como entradas separadas en la barra lateral en lugar del hub "Crear Mezcla".',
    tabInput: 'Entrada',
    tabUsers: 'Usuarios',
    tabSystem: 'Sistema',
    loggingTitle: 'Registro',
    loggingModeDesc: 'Controla la verbosidad de los logs del backend en la terminal.',
    loggingModeOff: 'Apagado',
    loggingModeNormal: 'Normal',
    loggingModeDebug: 'Depuración',
    loggingExport: 'Exportar logs',
    loggingExportSuccess: 'Logs exportados ({{count}} líneas).',
    loggingExportError: 'No se pudieron exportar los logs.',
    ratingsSectionTitle: 'Calificaciones',
    ratingsSkipStarTitle: 'Saltar para 1 estrella',
    ratingsSkipStarDesc:
      'Después de varios saltos seguidos, asigna 1 estrella a la pista. Solo para pistas aún no calificadas.',
    ratingsSkipStarThresholdLabel: 'Saltos',
    ratingsMixFilterTitle: 'Filtrar por calificación',
    ratingsMixFilterDesc:
      'Filtra elementos de baja calificación en {{mix}} y {{albums}}. Click en la estrella seleccionada nuevamente para desactivar el umbral.',
    ratingsMixMinSong: 'Canciones',
    ratingsMixMinAlbum: 'Álbumes',
    ratingsMixMinArtist: 'Artistas',
    ratingsMixMinThresholdAria: 'Estrellas mínimas: {{label}}',
    backupTitle: 'Respaldo y Restauración',
    backupExport: 'Exportar configuración',
    backupExportDesc: 'Guarda toda la configuración, perfiles de servidor, configuración Last.fm, tema, EQ y atajos de teclado a un archivo .psybkp. Las contraseñas se almacenan en texto plano — mantén el archivo seguro.',
    backupImport: 'Importar configuración',
    backupImportDesc: 'Restaura configuración desde un archivo .psybkp. La app se recargará después de importar.',
    backupImportConfirm: 'Esto sobrescribirá toda la configuración actual. ¿Continuar?',
    backupSuccess: 'Respaldo guardado',
    backupImportSuccess: 'Configuración restaurada — recargando…',
    backupImportError: 'Archivo de respaldo inválido o corrupto.',
    shortcutsReset: 'Restablecer a predeterminados',
    shortcutListening: 'Presiona una tecla…',
    shortcutUnbound: '—',
    globalShortcutsTitle: 'Atajos Globales',
    globalShortcutsNote: 'Funcionan en todo el sistema incluso cuando Psysonic está en segundo plano. Requieren Ctrl, Alt o Super como modificador.',
    shortcutClear: 'Limpiar',
    shortcutPlayPause: 'Reproducir / Pausa',
    shortcutNext: 'Siguiente pista',
    shortcutPrev: 'Pista anterior',
    shortcutVolumeUp: 'Subir volumen',
    shortcutVolumeDown: 'Bajar volumen',
    shortcutSeekForward: 'Avanzar 10s',
    shortcutSeekBackward: 'Retroceder 10s',
    shortcutToggleQueue: 'Alternar cola',
    shortcutOpenFolderBrowser: 'Abrir {{folderBrowser}}',
    shortcutFullscreenPlayer: 'Reproductor pantalla completa',
    shortcutNativeFullscreen: 'Pantalla completa nativa',
    shortcutOpenMiniPlayer: 'Abrir mini reproductor',
    shortcutStartSearch: 'Iniciar una búsqueda',
    shortcutStartAdvancedSearch: 'Iniciar una búsqueda avanzada',
    shortcutToggleSidebar: 'Alternar barra lateral',
    shortcutMuteSound: 'Silenciar',
    shortcutToggleEqualizer: 'Abrir / alternar ecualizador',
    shortcutToggleRepeat: 'Alternar repetición',
    shortcutOpenNowPlaying: 'Abrir "Reproduciendo ahora"',
    shortcutShowLyrics: 'Mostrar letra',
    shortcutFavoriteCurrentTrack: 'Añadir pista actual a favoritos',
    shortcutOpenHelp: 'Ayuda',
    playbackTitle: 'Reproducción',
    replayGain: 'Replay Gain',
    replayGainDesc: 'Normalizar volumen de pistas usando metadatos ReplayGain',
    replayGainMode: 'Modo',
    replayGainAuto: 'Auto',
    replayGainAutoDesc: 'Usa la ganancia del álbum cuando las pistas adyacentes en la cola son del mismo álbum, si no la ganancia de pista.',
    replayGainTrack: 'Pista',
    replayGainAlbum: 'Álbum',
    replayGainPreGain: 'Pre-Ganancia (archivos etiquetados)',
    replayGainPreGainDesc: 'Aumento universal añadido a cada cálculo de ReplayGain. Útil si tu biblioteca te parece globalmente demasiado baja.',
    replayGainFallback: 'Respaldo (sin etiquetar / radio)',
    replayGainFallbackDesc: 'Se aplica a pistas (y emisoras de radio) sin etiquetas ReplayGain, para que el contenido sin etiquetar no salte más fuerte que el resto.',
    normalization: 'Normalización',
    normalizationDesc: 'Iguala el volumen percibido entre pistas, álbumes y radio.',
    normalizationOff: 'Apagado',
    normalizationReplayGain: 'ReplayGain',
    normalizationLufs: 'LUFS',
    loudnessTargetLufs: 'LUFS objetivo',
    loudnessTargetLufsDesc: 'Volumen de referencia al que se ajustan todas las pistas. Valor más bajo = salida más fuerte. Los servicios de streaming suelen rondar los -14 LUFS.',
    loudnessPreAnalysisAttenuation: 'Atenuación antes de medir',
    loudnessPreAnalysisAttenuationDesc:
      'Atenúa hasta que la loudness del tema esté guardada. En streaming luego solo hay estimaciones aproximadas. 0 dB = ninguna; más negativo = más bajo. A la derecha se muestra el dB efectivo para el destino actual.',
    loudnessPreAnalysisAttenuationRef: 'Efectivo {{eff}} dB con destino {{tgt}} LUFS.',
    loudnessPreAnalysisAttenuationReset: 'Predeterminado',
    loudnessFirstPlayNote:
      'En la primera reproducción de un tema nuevo el volumen puede oscilar brevemente mientras se mide. La siguiente vez se usa la medición guardada y todo permanece estable. Las pistas próximas en la cola suelen analizarse durante la canción anterior, por lo que en la práctica esto rara vez ocurre.',
    crossfade: 'Crossfade',
    crossfadeDesc: 'Transición entre pistas',
    crossfadeSecs: '{{n}} s',
    notWithGapless: 'No disponible mientras Gapless está activo',
    notWithCrossfade: 'No disponible mientras Crossfade está activo',
    gapless: 'Reproducción Gapless',
    gaplessDesc: 'Precarga siguiente pista para eliminar silencios entre canciones',
    preservePlayNextOrder: 'Mantener el orden de "Reproducir Siguiente"',
    preservePlayNextOrderDesc: 'Los elementos añadidos a "Reproducir Siguiente" se encolan detrás de los anteriores en vez de saltar al principio.',
    trackPreviewsTitle: 'Previsualizaciones de pistas',
    trackPreviewsToggle: 'Activar previsualizaciones',
    trackPreviewsDesc: 'Mostrar botones de Reproducir y Previsualización en las listas de pistas para una muestra rápida a mitad de canción.',
    trackPreviewStart: 'Posición inicial',
    trackPreviewStartDesc: 'Cuánto avanza la pista antes de iniciar la previsualización (% de la duración).',
    trackPreviewDuration: 'Duración',
    trackPreviewDurationDesc: 'Cuánto dura cada previsualización antes de detenerse.',
    trackPreviewDurationSecs: '{{n}} s',
    trackPreviewLocationsTitle: 'Dónde aparecen las previsualizaciones',
    trackPreviewLocationsDesc: 'Elige en qué listas se muestran los botones de previsualización.',
    trackPreviewLocation_suggestions: 'En sugerencias de listas',
    trackPreviewLocation_albums: 'En listas de pistas de álbum',
    trackPreviewLocation_playlists: 'En listas de reproducción',
    trackPreviewLocation_favorites: 'En favoritos',
    trackPreviewLocation_artist: 'En las mejores pistas del artista',
    trackPreviewLocation_randomMix: 'En Random Mix',
    preloadMode: 'Precargar Siguiente Pista',
    preloadModeDesc: 'Cuándo comenzar a cargar la siguiente pista en cola',
    nextTrackBufferingTitle: 'Buffer',
    preloadHotCacheMutualExclusive: 'Precarga y Caché Activa sirven para lo mismo — solo uno puede estar activo a la vez. Habilitar uno desactivará automáticamente el otro.',
    preloadOff: 'Apagado',
    preloadBalanced: 'Balanceado (30 s antes del final)',
    preloadEarly: 'Temprano (después de 5 s de reproducción)',
    preloadCustom: 'Personalizado',
    preloadCustomSeconds: 'Segundos antes del final: {{n}}',
    infiniteQueue: 'Cola Infinita',
    infiniteQueueDesc: 'Agregar automáticamente pistas aleatorias cuando la cola termina',
    experimental: 'Experimental',
    fsPlayerSection: 'Reproductor Pantalla Completa',
    fsShowArtistPortrait: 'Mostrar foto del artista',
    fsShowArtistPortraitDesc: 'Muestra la foto del artista (o portada del álbum) en el lado derecho del reproductor pantalla completa.',
    fsPortraitDim: 'Oscurecimiento de foto',
    fsLyricsStyle: 'Estilo de letra',
    fsLyricsStyleRail: 'Carril',
    fsLyricsStyleRailDesc: 'Carril deslizante clásico de 5 líneas.',
    fsLyricsStyleApple: 'Desplazamiento',
    fsLyricsStyleAppleDesc: 'Lista desplazable a pantalla completa.',
    sidebarLyricsStyle: 'Estilo de desplazamiento de letra',
    sidebarLyricsStyleClassic: 'Clásico',
    sidebarLyricsStyleClassicDesc: 'La línea activa se centra.',
    sidebarLyricsStyleApple: 'Apple Music-like',
    sidebarLyricsStyleAppleDesc: 'La línea activa se ancla arriba con animación suave.',
    seekbarStyle: 'Estilo de Barra de Progreso',
    seekbarStyleDesc: 'Elige la apariencia de la barra de progreso del reproductor',
    seekbarTruewave: 'Forma de Onda Real',
    seekbarPseudowave: 'Forma de Onda Pseudo',
    seekbarLinedot: 'Línea y Punto',
    seekbarBar: 'Barra',
    seekbarThick: 'Barra Gruesa',
    seekbarSegmented: 'Segmentada',
    seekbarNeon: 'Brillo Neón',
    seekbarPulsewave: 'Onda Pulsante',
    seekbarParticletrail: 'Estela de Partículas',
    seekbarLiquidfill: 'Llenado Líquido',
    seekbarRetrotape: 'Cinta Retro',
    themeSchedulerTitle: 'Cambio Automático de Tema',
    themeSchedulerEnable: 'Habilitar Programador de Temas',
    themeSchedulerEnableSub: 'Cambia automáticamente entre dos temas según la hora del día',
    themeSchedulerDayTheme: 'Tema de Día',
    themeSchedulerDayStart: 'Comienza de Día A las',
    themeSchedulerNightTheme: 'Tema de Noche',
    themeSchedulerNightStart: 'Comienza de Noche A las',
    themeSchedulerActiveHint: 'El Programador de Temas está activo — los cambios de tema se manejan automáticamente.',
    visualOptionsTitle: 'Opciones Visuales',
    coverArtBackground: 'Fondo de Portada',
    coverArtBackgroundSub: 'Mostrar portada desenfocada como fondo en encabezados de álbumes y listas de reproducción',
    playlistCoverPhoto: 'Foto de Portada de Playlist',
    playlistCoverPhotoSub: 'Mostrar cuadrícula de fotos de portada en la vista detallada de playlists',
    showBitrate: 'Mostrar Bitrate',
    showBitrateSub: 'Mostrar bitrate de audio en las listas de pistas',
    floatingPlayerBar: 'Barra del Reproductor Flotante',
    floatingPlayerBarSub: 'Mantener la barra del reproductor flotando sobre el contenido',
    uiScaleTitle: 'Escala de Interfaz',
    uiScaleLabel: 'Zoom',
  },
  changelog: {
    modalTitle: 'Novedades',
    dontShowAgain: 'No mostrar de nuevo',
    close: 'Entendido',
  },
  whatsNew: {
    title: 'Novedades',
    empty: 'Aún no hay entrada de changelog para esta versión.',
    bannerTitle: 'Changelog',
    bannerCollapsed: 'Novedades en v{{version}}',
    dismiss: 'Ocultar',
    close: 'Cerrar',
  },
  help: {
    title: 'Ayuda',
    searchPlaceholder: 'Buscar en la ayuda…',
    noResults: 'No hay temas coincidentes. Prueba con otro término.',
    s1: 'Primeros Pasos',
    q1: '¿Qué servidores son compatibles?',
    a1: 'Psysonic está construido principalmente para Navidrome y es totalmente compatible con Subsonic — Gonic, Airsonic, LMS y otros servidores Subsonic-API también funcionan. Algunas funciones avanzadas (calificaciones, listas inteligentes, compartir Magic String, gestión de usuarios) requieren Navidrome.',
    q2: '¿Cómo añado un servidor?',
    a2: 'Configuración → Servidores → Añadir Servidor. Introduce la URL (p.ej. http://192.168.1.100:4533), nombre de usuario y contraseña. Psysonic prueba la conexión antes de guardar — nada se guarda si falla. Puedes añadir tantos servidores como quieras y cambiar entre ellos en la cabecera; sólo uno está activo a la vez.',
    q3: '¿Recorrido rápido por la interfaz?',
    a3: 'Barra lateral (izquierda) para navegación, Mainstage / páginas en el centro, barra del reproductor abajo, panel de Cola a la derecha (se abre con el icono arriba a la derecha junto al indicador Now-Playing). La barra de búsqueda arriba busca en toda la biblioteca; «Now Playing» muestra qué están escuchando otros usuarios del mismo servidor Navidrome.',
    s2: 'Reproducción y Cola',
    q4: '¿Cómo uso la cola?',
    a4: 'Abre el panel de Cola desde la cabecera arriba a la derecha. Arrastra filas para reordenar, arrástralas fuera para eliminar, o usa la barra de herramientas para mezclar, guardar la cola como lista o saltar a una pista. Arrastra filas fuera del panel para soltarlas en otro lugar como transferencia.',
    q5: 'Gapless vs Crossfade — ¿cuál es la diferencia?',
    a5: 'Gapless prebuferiza la siguiente pista para que no haya silencio entre canciones (ideal para discos en directo y mezclas DJ). Crossfade desvanece la pista actual mientras la siguiente entra en 1–10 s (ideal para mezclas aleatorias). Son mutuamente exclusivos — activar uno desactiva el otro. Configura ambos en Configuración → Audio.',
    q6: '¿Qué es Cola Infinita?',
    a6: 'Cuando la cola se acaba y Repetir está desactivado, Psysonic añade silenciosamente pistas similares/aleatorias de tu biblioteca para que la reproducción no se detenga. Las pistas auto-añadidas aparecen bajo un divisor «— Añadido automáticamente —». Activa/desactiva con el icono de infinito en la cabecera de la cola; restringe a un género en Configuración → Cola.',
    q7: '¿Selección múltiple y rango con Mayús-clic?',
    a7: 'Activa «Seleccionar» en Álbumes / Nuevos lanzamientos / Random Albums / Listas. Haz clic en un elemento para alternar, mantén Mayús y haz clic en otro elemento — todo lo que esté entre ambos en el orden visible se selecciona. Los Mayús-clic extienden desde el ancla más recientemente clicada. La barra de herramientas ofrece acciones masivas (cola, descarga, eliminar, etc.).',
    q8: '¿Atajos de teclado y hotkeys globales?',
    a8: 'Teclas in-app por defecto: Espacio = Reproducir / Pausa, Esc = cerrar pantalla completa / modales, F1 = chuleta de atajos. Configuración → Entrada permite reasignar cada acción in-app (incluyendo combinaciones como Ctrl+Mayús+P) y establecer atajos globales del sistema que funcionan incluso con Psysonic en segundo plano. Las teclas multimedia (Reproducir/Pausa, Siguiente, Anterior) funcionan en todas las plataformas.',
    s3: 'Herramientas de Audio',
    q9: '¿Modos de Replay Gain?',
    a9: 'Configuración → Audio → Replay Gain. El modo Pista normaliza cada canción a un nivel objetivo. El modo Álbum preserva la curva de volumen dentro de un álbum. El modo Auto elige Pista o Álbum según si la cola viene de un solo álbum. Las pistas sin etiquetas Replay Gain caen a un preamplificador configurable.',
    q10: '¿Qué es Smart Loudness Normalization (LUFS)?',
    a10: 'Una alternativa moderna a Replay Gain en Configuración → Audio. Psysonic analiza cada pista a LUFS / EBU R128 y guarda el resultado, para un volumen consistente en toda tu biblioteca — incluyendo pistas sin etiquetas Replay Gain. El análisis en frío corre en segundo plano y usa 35–40 % de CPU durante ~1 minuto, luego cae a 0. Establece tu objetivo (por defecto −10 LUFS) una vez.',
    q11: '¿EQ y AutoEQ?',
    a11: 'Un EQ paramétrico de 10 bandas en Configuración → Audio → Ecualizador, con bandas manuales y preajustes. AutoEQ a su lado obtiene un perfil de corrección medido para tu modelo de auriculares de la base de datos AutoEQ y lo aplica automáticamente a las bandas — elige tus auriculares y el EQ se ajusta a la curva correcta.',
    q12: '¿Cómo cambio el dispositivo de salida de audio?',
    a12: 'Configuración → Audio → Dispositivo de Salida. Psysonic lista todas las salidas disponibles y cambia instantáneamente al elegir. El botón Actualizar detecta dispositivos conectados después del inicio. En Linux los nombres ALSA como «sysdefault» se limpian automáticamente para legibilidad.',
    q13: '¿Qué es Hot Cache?',
    a13: 'Hot Cache precarga la pista actual y las siguientes en RAM y en disco para que la reproducción comience sin retraso de buffering — especialmente útil en servidores lentos / remotos. La eviction se activa cuando se alcanza el límite de tamaño. Configura tamaño y el retardo de debounce (para que saltos rápidos no sobrecarguen) en Configuración → Audio.',
    s4: 'Biblioteca y Descubrimiento',
    q14: '¿Cómo funcionan las calificaciones y Skip-to-1★?',
    a14: 'Psysonic admite calificaciones de 1–5 estrellas vía OpenSubsonic (Navidrome ≥ 0.53). Califica pistas en listas, en el menú contextual, o en la barra del reproductor bajo el nombre del artista; álbumes en la página del álbum; artistas en la página del artista. Skip-to-1★ (Configuración → Biblioteca → Calificaciones) asigna automáticamente 1 estrella tras un número configurable de saltos consecutivos. El mismo panel permite establecer una calificación mínima como filtro para Mixes generados.',
    q15: '¿Cómo navego — Carpetas, Géneros, Pistas?',
    a15: 'El navegador de carpetas (barra lateral) recorre el directorio musical del servidor en disposición Miller-column — clic en una carpeta para entrar, clic en una pista o el icono de play de una carpeta para reproducir / añadir. Géneros usa una vista de nube de etiquetas escalada por número de pistas; clic en un género para abrirlo. Pistas es un hub plano con lista virtual ordenable por columnas y búsqueda en vivo.',
    q16: '¿Búsqueda y búsqueda avanzada?',
    a16: 'La barra de búsqueda en la cabecera ejecuta una búsqueda en vivo mientras escribes a través de artistas, álbumes y pistas. Abre la búsqueda avanzada (barra lateral) para una vista más rica: filtra por año, género, calificación, formato, canales, frecuencia de muestreo, BPM, mood, y combina criterios. Clic derecho en cualquier resultado abre el mismo menú contextual usado en otros lugares.',
    q17: '¿Qué son los Mixes (Random / Género / Super Genre / Lucky)?',
    a17: 'Random Mix construye una lista de pistas aleatorias de tu biblioteca; el filtro de palabras clave excluye audiolibros, comedia, etc. por subcadenas de género / título / álbum. Super Genre Mix agrupa tu biblioteca en estilos amplios (Rock, Metal, Electrónica, Jazz, Clásica…) y construye un mix enfocado. Lucky Mix usa tu historial de escucha, calificaciones y pistas similares de AudioMuse-AI para ensamblar una lista instantánea con un clic.',
    q18: '¿Página de estadísticas?',
    a18: 'Estadísticas (barra lateral) muestra los principales artistas, álbumes, pistas, distribución por género, tiempo de escucha a lo largo del tiempo, y alcance por biblioteca cuando tienes más de una carpeta de música configurada. Varias vistas son exportables como imagen de tarjeta compartible.',
    q19: '¿Cómo descargo un álbum como ZIP?',
    a19: 'Página del álbum → «Descargar (ZIP)». El servidor comprime el álbum primero — para álbumes grandes o sin pérdida (FLAC / WAV) la barra de progreso aparece sólo cuando el zipping termina y la transferencia comienza. Esto es normal.',
    s5: 'Letras',
    q20: '¿De dónde vienen las letras?',
    a20: 'Tres fuentes, configurables en Configuración → Letras: tu servidor Navidrome (letras embebidas / OpenSubsonic), LRCLIB (letras sincronizadas comunitarias) y NetEase Cloud Music (gran catálogo asiático + internacional). Cada fuente puede activarse / desactivarse y reordenarse arrastrando.',
    q21: '¿Cómo veo letras durante la reproducción?',
    a21: 'Haz clic en el icono del micrófono en la barra del reproductor para abrir la pestaña Letras en el panel de cola. Las letras sincronizadas se desplazan automáticamente y soportan clic-para-saltar; las letras de texto plano se desplazan como bloque estático. Activa el reproductor de pantalla completa desde la portada de la barra para una vista inmersiva con fondo mesh-blob.',
    s6: 'Compartir y Social',
    q22: '¿Qué son las Magic Strings?',
    a22: 'Las Magic Strings son tokens cortos copy-paste que comparten cosas entre usuarios de Psysonic sin servidor de terceros. Las strings de invitación de servidor permiten a un amigo registrarse en tu Navidrome con un solo pegado; las Magic Strings de Álbum / Artista / Cola abren el mismo álbum / artista / cola en el receptor. Genéralas desde el menú compartir, pégalas en la barra de búsqueda para consumirlas.',
    q23: '¿Qué es Orbit?',
    a23: 'Orbit es escucha sincronizada en grupo: un anfitrión reproduce una pista, cada invitado la oye sincronizada, y los invitados pueden sugerir canciones que el anfitrión puede aceptar en la cola. Inicia una sesión desde el botón Orbit en la cabecera, comparte el enlace de invitación, y otros pueden unirse desde cualquier instalación de Psysonic. El anfitrión controla la reproducción (saltar, buscar, cola) — los invitados ven en tiempo real y tienen una caja de sugerencias. Las sesiones son efímeras y terminan cuando el anfitrión las cierra.',
    q24: '¿Qué es el desplegable Now Playing?',
    a24: 'El icono de transmisión arriba a la derecha muestra qué están escuchando otros usuarios en tu servidor Navidrome ahora mismo, refrescado cada 10 segundos. Tu propia entrada desaparece en cuanto pausas. Por servidor, así que los usuarios de otro servidor activo no se muestran.',
    s7: 'Personalización',
    q25: '¿Temas y planificador de tema?',
    a25: 'Configuración → Apariencia → Tema elige entre 60+ temas en 8 grupos (Psysonic, Mediaplayer, Sistemas operativos, Juegos, Películas, Series, Redes sociales, Open Source Classics — Catppuccin / Nord / Gruvbox / Nightfox / Dracula). Auto-Switch Theme te permite establecer un tema diurno y nocturno con horas de inicio para que Psysonic cambie automáticamente.',
    q26: '¿Puedo personalizar la barra lateral, Inicio y página de artista?',
    a26: 'Sí — Configuración → Personalización. El customizador de barra lateral permite arrastrar elementos de navegación al orden deseado y ocultar los que no usas. El customizador de Inicio activa/desactiva cada fila de Mainstage (Hero, Recent, Discover, Recently Played, Starred…). El customizador de página de artista reordena las secciones (Top Songs, Álbumes, Singles, Compilaciones, Artistas similares, etc.) y oculta las que nunca miras.',
    q27: '¿Qué es el Mini Player?',
    a27: 'Una pequeña ventana flotante con cover, controles de transporte y cola compacta. Ábrela desde el icono mini-player en la barra del reproductor o con su atajo de teclado. La ventana recuerda su posición y tamaño entre sesiones. En Windows la mini-webview se precrea al inicio para apertura instantánea; Linux / macOS la activan opcionalmente vía Configuración → Apariencia → Precargar mini player.',
    q28: '¿Qué es la Floating Player Bar?',
    a28: 'Un estilo opcional de barra del reproductor (Configuración → Apariencia) que se separa del borde inferior con fondo temático, borde de acento, portada redondeada y sección de volumen centrada. Útil en monitores altos o temas compactos.',
    q29: '¿Vista previa de pista al pasar el ratón?',
    a29: 'Pasa el ratón sobre una fila de pista, haz clic en el botón pequeño de vista previa en la portada, o activa la vista previa desde el menú contextual — Psysonic transmite los primeros ~15 s a través del mismo motor de audio Rust para que la normalización de loudness se aplique. Útil para hojear un álbum que no has oído antes.',
    q30: '¿Temporizador de suspensión?',
    a30: 'Haz clic en el icono de luna en la barra del reproductor para abrir el temporizador. Elige una duración (o «final de la pista actual») y Psysonic desvanece y pausa al final. El botón muestra un anillo circular y una cuenta regresiva mientras corre el temporizador.',
    q31: '¿Escala UI, fuente, estilo de seekbar?',
    a31: 'Configuración → Apariencia — Escala de Interfaz (80–125 % sin afectar el tamaño de fuente del sistema), Fuente (10 fuentes UI incluyendo IBM Plex Mono, Fira Code, Geist, Golos Text…), Estilo de Seekbar (Forma de onda analizada / pseudoonda determinista / Línea y Punto / Barra / Barra Gruesa / Segmentada / Brillo Neón / Onda Pulso / Estela de Partículas / Relleno Líquido / Cinta Retro).',
    s8: 'Usuario Avanzado',
    q32: '¿Controles del reproductor por línea de comandos?',
    a32: 'El binario Psysonic también funciona como mando a distancia. Ejemplos: psysonic --player play / pause / next / prev, --player volume 75, --player seek 15, --player shuffle, --player repeat off|all|one, --player rating 1-5. Cambia servidores, dispositivos de audio, bibliotecas; activa Instant Mix; busca artistas / álbumes / pistas. Lista completa con psysonic --player --help. Autocompletado de shell para bash y zsh vía psysonic completions.',
    q33: '¿Listas Inteligentes (Navidrome)?',
    a33: 'Las Listas Inteligentes son listas dinámicas del lado de Navidrome definidas por reglas (género = Rock Y año > 2020, etc.). La página Listas en Psysonic permite crearlas, editarlas y eliminarlas con un editor visual de reglas — Psysonic habla con la API nativa de Navidrome para esto. Se comportan como listas normales en el resto de la app y se actualizan automáticamente cuando cambia tu biblioteca.',
    q34: '¿Respaldar y restaurar configuración?',
    a34: 'Configuración → Almacenamiento → Respaldo y Restauración exporta perfiles de servidor, temas, atajos y otras configuraciones a un único archivo JSON. Importa el archivo en otra máquina o tras una reinstalación para restaurar todo de una vez. Las contraseñas de servidores están incluidas — guarda el archivo en privado.',
    q35: '¿Dónde veo todas las licencias open-source?',
    a35: 'Configuración → Sistema → Open Source Licenses. La lista completa de dependencias (cargo crates y paquetes npm) se entrega con textos de licencia incluidos. Haz clic en una entrada para el texto completo; el bloque destacado arriba resalta las bibliotecas reconocibles (Tauri, React, rodio, symphonia, etc.).',
    s9: 'Offline y Sync',
    q36: 'Modo offline — ¿caché de álbumes y listas?',
    a36: 'Abre cualquier álbum o lista y haz clic en el icono de descarga en la cabecera — Psysonic almacena cada pista localmente para que se reproduzca desde disco sin llamada de red. La página Biblioteca Offline (barra lateral) lista todo lo cacheado, muestra el progreso en curso, y permite eliminar entradas con el icono de papelera (que aparece tras completar una descarga).',
    q37: '¿Límite de almacenamiento offline?',
    a37: 'Configuración → Biblioteca → Offline permite establecer un tamaño máximo de caché. Cuando se alcanza el límite, el botón de descarga de la página del álbum muestra un banner de aviso. Libera espacio eliminando álbumes o listas desde la página Biblioteca Offline.',
    q38: 'Device Sync — ¿copiar música a USB / SD?',
    a38: 'Device Sync (barra lateral) copia álbumes, listas o artistas enteros a una unidad externa para escucha offline en otros dispositivos. Elige una carpeta destino, elige fuentes de las pestañas del navegador, haz clic en «Transferir al dispositivo». Psysonic escribe un manifiesto (psysonic-sync.json) para saber qué archivos ya están allí, incluso si reabres Device Sync en otro SO con otra plantilla. Las plantillas soportan tokens {artist} / {album} / {title} / {track_number} / {disc_number} / {year} con / como separador de carpeta.',
    s10: 'Integraciones y Solución de Problemas',
    q39: '¿Scrobbling de Last.fm?',
    a39: 'Configuración → Integraciones → Last.fm. Conecta tu cuenta una vez y Psysonic scrobblea directamente a Last.fm — no se necesita configuración de Navidrome. Un scrobble se envía tras escuchar el 50 % de una pista. Los pings now-playing se envían al inicio.',
    q40: '¿Discord Rich Presence?',
    a40: 'Configuración → Integraciones → Discord muestra tu pista actual en tu perfil de Discord. Elige entre el icono de la app, las portadas de tu servidor (vía getAlbumInfo2 — requiere un servidor accesible públicamente), o portadas de Apple Music. Personaliza las cadenas mostradas (detalles, estado, tooltip) con plantillas de tokens.',
    q41: '¿Fechas de gira de Bandsintown?',
    a41: 'Opt-in en Configuración → Integraciones → Now-Playing Info. La pestaña Now Playing en la página Now Playing muestra entonces fechas de gira próximas para el artista en reproducción vía Bandsintown widget API. Desactivado por defecto — no se hacen peticiones hasta que actives.',
    q42: 'Internet Radio — ¿reproducir streams en vivo?',
    a42: 'Internet Radio (barra lateral) reproduce cualquier stream en vivo almacenado en tu servidor Navidrome (añade emisoras vía la UI admin de Navidrome). La reproducción corre por el motor HTML5 audio del navegador — la mayoría de configuraciones de EQ / Replay Gain / Loudness no se aplican a la radio, pero sí se muestran los metadatos ICY (nombre de canción actual). Soporta MP3, AAC, OGG Vorbis y la mayoría de streams HLS; el soporte de codec depende de la plataforma.',
    q43: 'La prueba de conexión falla — ¿qué hago?',
    a43: 'Verifica la URL incluyendo el puerto (p.ej. http://192.168.1.100:4533). En una red local http:// suele funcionar donde https:// no (sin certificado). Asegúrate de que ningún firewall bloquee el puerto y que usuario y contraseña sean correctos. Si tu servidor está detrás de un proxy inverso, prueba primero la URL directa para aislar la causa.',
    q44: 'Las portadas e imágenes de artista cargan lentamente.',
    a44: 'Las imágenes se obtienen del servidor en la primera vista y luego se almacenan localmente durante 30 días. Si el almacenamiento de tu servidor es lento, la primera visita a una página puede tardar un momento; las visitas posteriores son instantáneas. Hot Cache también ayuda con pistas pero el caché de imágenes es independiente.',
    q45: 'Problemas en Linux — ¿pantalla negra o sin sonido?',
    a45: 'La pantalla negra es generalmente un problema de driver GPU / EGL en WebKitGTK — lanza con GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 (los instaladores AUR / .deb / .rpm los configuran automáticamente). Para audio, asegúrate de que PipeWire o PulseAudio esté ejecutándose. Los cortes de audio tras suspensión / despertar ahora son manejados automáticamente por el hook de recuperación post-sleep.',
  },
  queue: {
    title: 'Cola',
    savePlaylist: 'Guardar Lista',
    updatePlaylist: 'Actualizar Lista',
    filterPlaylists: 'Filtrar listas…',
    playlistName: 'Nombre de Lista',
    cancel: 'Cancelar',
    save: 'Guardar',
    loadPlaylist: 'Cargar Lista',
    loading: 'Cargando…',
    noPlaylists: 'No se encontraron listas.',
    load: 'Reemplazar cola y reproducir',
    appendToQueue: 'Agregar a cola',
    delete: 'Eliminar',
    deleteConfirm: '¿Eliminar lista "{{name}}"?',
    clear: 'Limpiar',
    shuffle: 'Mezclar cola',
    gapless: 'Gapless',
    crossfade: 'Crossfade',
    infiniteQueue: 'Cola Infinita',
    autoAdded: '— Agregado automáticamente —',
    radioAdded: '— Radio —',
    hide: 'Ocultar',
    hideNowPlaying: 'Ocultar información de reproducción',
    showNowPlaying: 'Mostrar información de reproducción',
    close: 'Cerrar',
    nextTracks: 'Siguientes',
    shareQueue: 'Copiar enlace de la cola',
    shareQueueEmpty: 'La cola está vacía — no hay nada que compartir.',
    emptyQueue: 'La cola está vacía.',
    trackSingular: 'pista',
    trackPlural: 'pistas',
    showRemaining: 'Mostrar tiempo restante',
    showTotal: 'Mostrar tiempo total',
    showEta: 'Mostrar hora estimada de fin',
    replayGain: 'ReplayGain',
    rgTrack: 'T {{db}} dB',
    rgAlbum: 'A {{db}} dB',
    rgPeak: 'Pico {{pk}}',
    sourceOffline: 'Reproducción desde la biblioteca sin conexión',
    sourceHot: 'Reproducción desde la caché',
    sourceStream: 'Reproducción desde la transmisión en red',
    clearCachedLoudnessWaveform: 'Clear cached loudness and waveform, then re-analyze this track',
    recalculatingLoudnessWaveform: 'Recalculating loudness and waveform for this track…',
  },
  miniPlayer: {
    showQueue: 'Mostrar cola',
    hideQueue: 'Ocultar cola',
    pinOnTop: 'Mantener encima',
    pinOff: 'Desfijar',
    openMainWindow: 'Abrir ventana principal',
    close: 'Cerrar',
    emptyQueue: 'La cola está vacía',
  },
  statistics: {
    title: 'Estadísticas',
    recentlyPlayed: 'Reproducidos Recientemente',
    mostPlayed: 'Álbumes Más Reproducidos',
    highestRated: 'Álbumes Mejor Calificados',
    genreDistribution: 'Distribución de Géneros (Top 20)',
    loadMore: 'Cargar más',
    statArtists: 'Artistas',
    statArtistsTooltip: 'Solo artistas de álbum — los artistas que aparecen únicamente como artistas de pista (featuring, invitado, etc.) sin álbum propio no se cuentan.',
    statAlbums: 'Álbumes',
    statSongs: 'Canciones',
    statGenres: 'Géneros',
    statPlaytime: 'Tiempo Total de Reproducción',
    genreInsights: 'Información de Géneros',
    formatDistribution: 'Distribución de Formatos',
    formatSample: 'Muestra de {{n}} pistas',
    computing: 'Calculando…',
    genreSongs: '{{count}} Canciones',
    genreAlbums: '{{count}} Álbumes',
    recentlyAdded: 'Agregados Recientemente',
    decadeDistribution: 'Álbumes por Década',
    decadeAlbums_one: '{{count}} Álbum',
    decadeAlbums_other: '{{count}} Álbumes',
    decadeUnknown: 'Desconocido',
    lfmTitle: 'Estadísticas de Last.fm',
    lfmTopArtists: 'Artistas Principales',
    lfmTopAlbums: 'Álbumes Principales',
    lfmTopTracks: 'Pistas Principales',
    lfmPlays: '{{count}} reproducciones',
    lfmPeriodOverall: 'Todo el Tiempo',
    lfmPeriod7day: '7 Días',
    lfmPeriod1month: '1 Mes',
    lfmPeriod3month: '3 Meses',
    lfmPeriod6month: '6 Meses',
    lfmPeriod12month: '12 Meses',
    lfmNotConnected: 'Conecta Last.fm en Configuración para ver tus estadísticas.',
    lfmRecentTracks: 'Scrobbles Recientes',
    lfmNowPlaying: 'Reproduciendo Ahora',
    lfmJustNow: 'ahora mismo',
    lfmMinutesAgo: 'hace {{n}}m',
    lfmHoursAgo: 'hace {{n}}h',
    lfmDaysAgo: 'hace {{n}}d',
    topRatedSongs: 'Canciones Mejor Calificadas',
    topRatedArtists: 'Artistas Mejor Calificados',
    noRatedSongs: 'Aún no hay canciones calificadas. Califica canciones en la vista de álbum o playlist.',
    noRatedArtists: 'Aún no hay artistas calificados.',
  },
  player: {
    regionLabel: 'Reproductor de Música',
    openFullscreen: 'Abrir Reproductor Pantalla Completa',
    fullscreen: 'Reproductor Pantalla Completa',
    closeFullscreen: 'Cerrar Pantalla Completa',
    closeTooltip: 'Cerrar (Esc)',
    noTitle: 'Sin Título',
    stop: 'Detener',
    prev: 'Pista Anterior',
    play: 'Reproducir',
    pause: 'Pausa',
    previewActive: 'Vista previa activa',
    previewLabel: 'Vista previa',
    delayModalTitle: 'Temporizador',
    delayPauseSection: 'Pausar después de',
    delayStartSection: 'Iniciar después de',
    delayPreviewPause: 'Pausa a las',
    delayPreviewStart: 'Inicio a las',
    delaySchedulePause: 'Programar pausa',
    delayScheduleStart: 'Programar inicio',
    delayCancelPause: 'Cancelar temporizador de pausa',
    delayCancelStart: 'Cancelar temporizador de inicio',
    delayInactivePause: 'Solo disponible durante la reproducción.',
    delayInactiveStart: 'Solo en pausa con pista o radio cargada.',
    delayCustomMinutes: 'Retraso personalizado (minutos)',
    delayCustomPlaceholder: 'p. ej. 2,5',
    closeDelayModal: 'Cerrar',
    delayIn: 'en',
    delayFmtSec: '{{n}} s',
    delayFmtMin: '{{n}} min',
    delayFmtHr: '{{n}} h',
    delayCancel: 'Cancelar',
    delayApply: 'Aplicar',
    next: 'Pista Siguiente',
    repeat: 'Repetir',
    repeatOff: 'Apagado',
    repeatAll: 'Todo',
    repeatOne: 'Una',
    progress: 'Progreso de Canción',
    volume: 'Volumen',
    toggleQueue: 'Alternar Cola',
    collapseQueueResize: 'Contraer cola, cambiar ancho',
    moreOptions: 'Más opciones',
    equalizer: 'Ecualizador',
    miniPlayer: 'Mini reproductor',
    lyrics: 'Letras',
    fsLyricsToggle: 'Letras en pantalla completa',
    lyricsLoading: 'Cargando letras…',
    lyricsNotFound: 'No se encontraron letras para esta pista',
    lyricsSourceServer: 'Fuente: Servidor',
    lyricsSourceLrclib: 'Fuente: LRCLIB',
    lyricsSourceNetease: 'Fuente: Netease',
    lyricsSourceLyricsplus: 'Fuente: YouLyPlus',
    showDuration: 'Mostrar duración',
    showRemainingTime: 'Mostrar tiempo restante',
  },
  nowPlayingInfo: {
    tab: 'Info',
    empty: 'Reproduce algo para ver información',
    artist: 'Artista',
    songInfo: 'Info de la canción',
    onTour: 'En gira',
    noTourEvents: 'No hay próximos conciertos',
    tourLoading: 'Cargando…',
    poweredByBandsintown: 'Datos de gira vía Bandsintown',
    bioReadMore: 'Leer más',
    bioReadLess: 'Ver menos',
    showMoreTours_one: 'Mostrar {{count}} más',
    showMoreTours_other: 'Mostrar {{count}} más',
    showLessTours: 'Ver menos',
    enableBandsintownPrompt: '¿Ver próximas fechas de gira?',
    enableBandsintownPromptDesc: 'Opcional. Carga conciertos del artista actual vía la API pública de Bandsintown.',
    enableBandsintownPrivacy: 'Al activar, el nombre del artista actual se envía a la API de Bandsintown para obtener fechas de gira. No se envían datos de cuenta ni personales.',
    enableBandsintownAction: 'Activar',
    role: {
      artist: 'Artista',
      albumArtist: 'Artista del álbum',
      composer: 'Compositor',
    },
  },
  songInfo: {
    title: 'Información de Canción',
    songTitle: 'Título',
    artist: 'Artista',
    album: 'Álbum',
    albumArtist: 'Artista del Álbum',
    year: 'Año',
    genre: 'Género',
    duration: 'Duración',
    track: 'Pista',
    format: 'Formato',
    bitrate: 'Bitrate',
    sampleRate: 'Frecuencia de Muestreo',
    bitDepth: 'Profundidad de Bits',
    channels: 'Canales',
    fileSize: 'Tamaño de Archivo',
    path: 'Ruta',
    replayGainTrack: 'RG Ganancia de Pista',
    replayGainAlbum: 'RG Ganancia de Álbum',
    replayGainPeak: 'RG Pico de Pista',
    mono: 'Mono',
    stereo: 'Estéreo',
  },
  playlists: {
    title: 'Listas de Reproducción',
    newPlaylist: 'Nueva Lista',
    unnamed: 'Lista sin nombre',
    createName: 'Nombre de lista…',
    create: 'Crear',
    cancel: 'Cancelar',
    empty: 'Aún no hay listas.',
    emptyPlaylist: 'Esta lista está vacía.',
    addFirstSong: 'Agrega tu primera canción',
    notFound: 'Lista no encontrada.',
    songs: '{{n}} canciones',
    playAll: 'Reproducir Todo',
    shuffle: 'Aleatorio',
    addToQueue: 'Agregar a Cola',
    back: 'Volver a Listas',
    deletePlaylist: 'Eliminar',
    confirmDelete: 'Click de nuevo para confirmar',
    removeSong: 'Quitar de lista',
    addSongs: 'Agregar Canciones',
    searchPlaceholder: 'Buscar en tu biblioteca…',
    noResults: 'Sin resultados.',
    suggestions: 'Canciones Sugeridas',
    noSuggestions: 'No hay sugerencias disponibles.',
    titleBadge: 'Lista',
    refreshSuggestions: 'Nuevas sugerencias',
    addSong: 'Agregar a lista',
    preview: 'Vista previa (30 s)',
    previewStop: 'Detener vista previa',
    playNextSuggestion: 'Reproducir a continuación',
    suggestionsHint: 'Doble clic en una fila para añadirla a la lista',
    addSelected: 'Agregar seleccionados',
    cacheOffline: 'Guardar lista offline',
    offlineCached: 'Lista guardada',
    removeOffline: 'Quitar de caché offline',
    offlineDownloading: 'Descargando… ({{done}}/{{total}} álbumes)',
    publicLabel: 'Pública',
    privateLabel: 'Privada',
    editMeta: 'Editar lista',
    editNamePlaceholder: 'Nombre de lista…',
    editCommentPlaceholder: 'Agregar descripción…',
    editPublic: 'Lista pública',
    editSave: 'Guardar',
    editCancel: 'Cancelar',
    changeCover: 'Cambiar imagen de portada',
    changeCoverLabel: 'Cambiar foto',
    removeCover: 'Quitar foto',
    coverUpdated: 'Portada actualizada',
    metaSaved: 'Lista actualizada',
    downloadZip: 'Descargar (ZIP)',
    // Toast notifications for multi-select
    addSuccess: '{{count}} canciones agregadas a {{playlist}}',
    addPartial: '{{added}} agregadas, {{skipped}} skippeadas por duplicadas',
    addAllSkipped: 'Todas skippeadas ({{count}} duplicadas)',
    addedAsDuplicates: '{{count}} canciones añadidas a {{playlist}} (como duplicados)',
    duplicateConfirmTitle: 'Ya en la lista',
    duplicateConfirmMessage: 'Las {{count}} canciones ya están en "{{playlist}}". ¿Añadirlas igualmente como duplicados?',
    duplicateConfirmAction: 'Añadir igualmente',
    addError: 'Error al agregar canciones',
    createAndAddSuccess: 'Lista "{{playlist}}" creada con {{count}} canciones',
    createError: 'Error al crear lista',
    deleteSuccess: '{{count}} listas eliminadas',
    deleteFailed: 'Error al eliminar {{name}}',
    deleteSelected: 'Eliminar seleccionadas',
    deleteSelectedPartial: 'Solo {{n}} de {{total}} listas seleccionadas pueden eliminarse (las demás pertenecen a otro usuario).',
    mergeSuccess: '{{count}} canciones unificadas en {{playlist}}',
    mergeNoNewSongs: 'No hay canciones nuevas para agregar',
    mergeError: 'Error al unificar listas',
    mergeInto: 'Unificar en',
    selectionCount: '{{count}} seleccionadas',
    select: 'Seleccionar',
    startSelect: 'Activar selección',
    cancelSelect: 'Cancelar',
    loadingAlbums: 'Resolviendo {{count}} álbumes…',
    loadingArtists: 'Resolviendo {{count}} artistas…',
    myPlaylists: 'Mis Listas',
    noOtherPlaylists: 'No hay otras listas disponibles',
    addToPlaylistSuccess: '{{count}} canciones agregadas a {{playlist}}',
    addToPlaylistNoNew: 'No hay canciones nuevas para agregar a {{playlist}}',
    addToPlaylistError: 'Error al agregar a la lista',
    removeSuccess: 'Canción quitada de la playlist',
    removeError: 'Error al quitar la canción de la playlist',
    importCSV: 'Importar CSV',
    importCSVTooltip: 'Importar desde CSV de Spotify',
    csvImportReport: 'Reporte de Importación CSV',
    csvImportTotal: 'Total',
    csvImportAdded: 'Agregadas',
    csvImportDuplicates: 'Duplicadas',
    csvImportNotFound: 'No Encontradas',
    csvImportNetworkErrors: 'Errores de Red',
    csvImportDuplicatesTitle: 'Canciones Duplicadas (Ya en la Lista):',
    csvImportNotFoundTitle: 'Canciones No Encontradas:',
    csvImportNetworkErrorsTitle: 'Errores de Red (puede reintentar la importación):',
    csvImportDownloadReport: 'Descargar Reporte',
    csvImportClose: 'Cerrar',
    csvImportNoValidTracks: 'No se encontraron canciones válidas en el archivo CSV',
    csvImportFailed: 'Error al importar el archivo CSV',
    csvImportToast: '{{added}} agregadas, {{notFound}} no encontradas, {{duplicates}} duplicadas',
    csvImportDownloadSuccess: 'Reporte descargado exitosamente',
    csvImportDownloadError: 'Error al descargar el reporte',
  },
  smartPlaylists: {
    sectionBasic: '1. Básico',
    sectionGenres: '2. Géneros',
    sectionYearsAndFilters: '3. Años y filtros',
    genreMode: 'Modo de géneros',
    genreModeInclude: 'Incluir géneros',
    genreModeExclude: 'Excluir géneros',
    genreSearchPlaceholder: 'Filtrar géneros...',
    availableGenres: 'Disponibles',
    selectedGenres: 'Seleccionados',
    yearMode: 'Modo de años',
    yearModeInclude: 'Incluir rango',
    yearModeExclude: 'Excluir rango',
    name: 'Nombre (sin prefijo)',
    limit: 'Límite',
    limitHint: 'Cuántas canciones incluir en la playlist (1-{{max}}, normalmente 50).',
    artistContains: 'Artista contiene…',
    albumContains: 'Álbum contiene…',
    titleContains: 'Título contiene…',
    minRating: 'Valoración mínima',
    minRatingAria: 'Valoración mínima para la playlist inteligente',
    minRatingHint: '0 desactiva el umbral mínimo; 1-5 mantiene canciones con valoración mayor que el valor seleccionado.',
    fromYear: 'Desde año',
    toYear: 'Hasta año',
    excludeUnrated: 'Excluir canciones sin valoración',
    compilationOnly: 'Solo compilaciones',
    create: 'Nueva Smart Playlist',
    save: 'Guardar Smart Playlist',
    created: '{{name}} creada',
    updated: '{{name}} actualizada',
    createFailed: 'No se pudo crear la smart playlist.',
    updateFailed: 'No se pudo actualizar la smart playlist.',
    navidromeOnly: 'Las smart playlists solo se pueden crear en servidores Navidrome.',
    loadFailed: 'No se pudieron cargar las smart playlists desde Navidrome.',
    sortRandom: 'Ordenar: aleatorio',
    sortTitleAsc: 'Ordenar: título A-Z',
    sortTitleDesc: 'Ordenar: título Z-A',
    sortYearDesc: 'Ordenar: año desc',
    sortYearAsc: 'Ordenar: año asc',
    sortPlayCountDesc: 'Ordenar: reproducciones desc',
  },
  mostPlayed: {
    title: 'Más Reproducidos',
    topArtists: 'Artistas Principales',
    topAlbums: 'Álbumes Principales',
    plays: '{{n}} reproducciones',
    sortMost: 'Más reproducciones primero',
    sortLeast: 'Menos reproducciones primero',
    loadMore: 'Cargar más álbumes',
    noData: 'Aún no hay datos de reproducción. ¡Empieza a escuchar!',
    noArtists: 'Todos los artistas filtrados.',
    filterCompilations: 'Ocultar artistas de compilaciones (Various Artists, Soundtracks, etc.)',
    filterCompilationsShort: 'Ocultar compilaciones',
  },
  losslessAlbums: {
    empty: 'Aún no hay álbumes sin pérdidas en esta biblioteca.',
    unsupported: 'Este servidor no expone los metadatos necesarios para encontrar álbumes sin pérdidas.',
    slowFetchHint: 'Carga más lento que otras páginas de álbumes — Psysonic recorre todo el catálogo de canciones por calidad.',
  },
  radio: {
    title: 'Radio por Internet',
    empty: 'No hay estaciones de radio configuradas.',
    addStation: 'Agregar Estación',
    editStation: 'Editar',
    deleteStation: 'Eliminar estación',
    confirmDelete: 'Click de nuevo para confirmar',
    stationName: 'Nombre de estación…',
    streamUrl: 'URL de stream…',
    homepageUrl: 'URL de página (opcional)',
    save: 'Guardar',
    cancel: 'Cancelar',
    live: 'EN VIVO',
    liveStream: 'Radio por Internet',
    openHomepage: 'Abrir página',
    changeCoverLabel: 'Cambiar portada',
    removeCover: 'Quitar portada',
    browseDirectory: 'Buscar en Directorio',
    directoryPlaceholder: 'Buscar estaciones…',
    noResults: 'No se encontraron estaciones.',
    stationAdded: 'Estación agregada',
    filterAll: 'Todas',
    filterFavorites: 'Favoritos',
    sortManual: 'Manual',
    sortAZ: 'A → Z',
    sortZA: 'Z → A',
    sortNewest: 'Más recientes',
    favorite: 'Agregar a favoritos',
    unfavorite: 'Quitar de favoritos',
    noFavorites: 'No hay estaciones favoritas.',
    listenerCount_one: '{{count}} oyente',
    listenerCount_other: '{{count}} oyentes',
    recentlyPlayed: 'Reproducidos Recientemente',
    upNext: 'Siguientes',
  },
  folderBrowser: {
    empty: 'Carpeta vacía',
    error: 'Error al cargar',
  },
  deviceSync: {
    title: 'Sincronizar dispositivo',
    targetFolder: 'Carpeta de destino',
    noFolderChosen: 'Ninguna carpeta seleccionada',
    selectDrive: 'Seleccionar unidad…',
    refreshDrives: 'Actualizar unidades',
    noDrivesDetected: 'No se detectaron unidades extraíbles',
    browseManual: 'Explorar manualmente…',
    free: 'libre',
    notMountedVolume: 'El destino no está en un volumen montado. La unidad puede haberse desconectado.',
    chooseFolder: 'Elegir…',
    filenameTemplate: 'Plantilla de nombre de archivo',
    targetDevice: 'Dispositivo de destino',
    templateHint: 'Variables: {artist}, {album}, {title}, {track_number}, {disc_number}, {year}',
    cleanupButton: 'Eliminar archivos fuera de la selección',
    cleanupNothingToDelete: 'Nada que eliminar — el dispositivo ya está sincronizado.',
    confirmCleanup: '¿Eliminar {{count}} archivo(s) del dispositivo que no están en la selección actual? ¿Continuar?',
    cleanupComplete: '{{count}} archivo(s) eliminado(s) del dispositivo.',
    selectedSources: 'Fuentes seleccionadas',
    noSourcesSelected: 'No hay fuentes seleccionadas. Haz clic en elementos del navegador para agregarlos.',
    clearAll: 'Limpiar todo',
    tabPlaylists: 'Listas de reproducción',
    tabAlbums: 'Álbumes',
    tabArtists: 'Artistas',
    searchPlaceholder: 'Buscar…',
    syncButton: 'Sincronizar al dispositivo',
    actionTransfer: 'Transferir al dispositivo',
    actionDelete: 'Eliminar del dispositivo',
    actionApplyAll: 'Aplicar todos los cambios',
    templatePreview: 'Vista previa',
    templatePresetStandard: 'Estándar',
    templatePresetMultiDisc: 'Multi-Disco',
    templatePresetAltFolder: 'Carpeta alt.',
    tokenSlashHint: '/ = separador de carpeta',
    cancel: 'Cancelar',
    noTargetDir: 'Por favor, elige primero una carpeta de destino.',
    noSources: 'Por favor, selecciona al menos una fuente.',
    noTracks: 'No se encontraron pistas en las fuentes seleccionadas.',
    fetchError: 'Error al obtener pistas del servidor.',
    syncComplete: 'Sincronización completada.',
    dismiss: 'Cerrar',
    cancelSync: 'Cancelar',
    syncCancelled: 'Sincronización cancelada ({{done}} / {{total}} transferidos).',
    colName: 'Nombre',
    colType: 'Tipo',
    colStatus: 'Estado',
    onDevice: 'Gestor de dispositivo',
    addSources: 'Agregar…',
    syncResult: '{{done}} transferido(s), {{skipped}} ya actualizado(s) ({{total}} total)',
    deleteFromDevice: 'Marcar para eliminar ({{count}})',
    confirmDelete: '¿Eliminar {{count}} elemento(s) del dispositivo: {{names}}?',
    deleteComplete: '{{count}} elemento(s) eliminado(s) del dispositivo.',
    manifestImported: '{{count}} fuente(s) importada(s) desde el manifiesto del dispositivo.',
    statusSynced: 'Sincronizado',
    statusPending: 'Pendiente',
    statusDeletion: 'Eliminación',
    markForDeletion: 'Marcar para eliminar',
    removeSource: 'Eliminar',
    undoDeletion: 'Deshacer eliminación',
    syncInBackground: 'Sincronización iniciada en segundo plano — puedes navegar a otro lugar.',
    syncInProgress: '{{done}} / {{total}} pistas…',
    syncSummary: 'Resumen de sincronización',
    calculating: 'Calculando la carga útil requerida…',
    filesToAdd: 'Archivos a agregar:',
    filesToDelete: 'Archivos a eliminar:',
    netChange: 'Cambio neto:',
    availableSpace: 'Espacio disponible en disco:',
    spaceWarning: 'Advertencia: El dispositivo de destino no tiene suficiente espacio reportado.',
    proceed: 'Proceder con la sincronización',
    notEnoughSpace: '¡Espacio físico en disco insuficiente detectado!',
    liveSearch: 'Live',
    randomAlbumsLabel: 'Álbumes aleatorios',
  },
  orbit: {
    triggerLabel: 'Orbit',
    triggerTooltip: 'Iniciar o unirse a una sesión de escucha compartida',
    launchCreate: 'Crear una sesión',
    launchJoin: 'Unirse a una sesión',
    launchHelp: '¿Cómo funciona esto?',
    launchHelpSoon: 'Próximamente',
    joinModalTitle: 'Unirse a una sesión Orbit',
    joinModalSub: 'Pega el enlace de invitación que te envió tu anfitrión.',
    joinModalLinkLabel: 'Enlace de invitación',
    joinModalLinkPlaceholder: 'psysonic2-…',
    joinModalLinkHelper: 'Funciona con cualquier enlace Orbit válido. Debe apuntar al servidor al que estás conectado actualmente.',
    joinModalPasteTooltip: 'Pegar desde el portapapeles',
    joinModalSubmit: 'Unirse',
    joinModalBusy: 'Uniéndose…',
    joinErrEmpty: 'Pega un enlace de invitación.',
    joinErrInvalid: 'Eso no parece un enlace de invitación Orbit.',
    closeAria: 'Cerrar',
    heroTitlePrefix: 'Escucha junto con',
    heroTitleBrand: 'Orbit',
    heroSub: 'Inicia una sesión — otros usuarios en {{server}} escucharán contigo y podrán sugerir canciones.',
    fallbackServer: 'este servidor',
    tipLan: 'Actualmente estás conectado mediante una dirección de red local. Los invitados fuera de tu red no pueden unirse — cambia a una dirección de servidor pública en los ajustes antes de empezar.',
    tipRemote: 'Para que los invitados fuera de tu red doméstica puedan unirse, la dirección de tu servidor debe ser accesible públicamente. Si tu servidor es solo interno, cambia antes de empezar.',
    labelName: 'Nombre de la sesión',
    namePlaceholder: 'Velvet Orbit',
    reshuffleTooltip: 'Nueva sugerencia',
    reshuffleAria: 'Sugerir un nuevo nombre',
    helperName: 'Cómo aparecerá la sesión a tus invitados — déjalo o escribe el tuyo.',
    labelMax: 'Invitados máx.',
    helperMax: 'Tú no cuentas — esto solo limita a los invitados entrantes.',
    labelLink: 'Enlace de invitación',
    tooltipCopied: 'Copiado',
    tooltipCopy: 'Copiar',
    ariaCopyLink: 'Copiar enlace de invitación',
    helperLink: 'Envía este enlace a tus invitados. Pueden pegarlo en cualquier parte de Psysonic con Ctrl+V.',
    labelClearQueue: 'Vaciar mi cola primero',
    helperClearQueue: 'Empieza la sesión con una cola vacía. Desactivado: las canciones ya en cola se mantienen y se comparten con los invitados.',
    btnCancel: 'Cancelar',
    btnStarting: 'Iniciando…',
    btnStart: 'Iniciar Orbit',
    btnCopyAndStart: 'Copiar enlace e iniciar',
    errNameRequired: 'Por favor, dale un nombre a tu sesión.',
    errStartFailed: 'No se pudo iniciar.',
    hostLabel: 'Anfitrión: {{name}}',
    participantsTooltip: 'Participantes',
    settingsTooltip: 'Ajustes de sesión',
    shareTooltip: 'Compartir enlace de invitación',
    shuffleLabel: 'Próximo mezclado en',
    catchUpLabel: 'alcanzar',
    catchUpTooltip: 'Saltar a la posición actual del anfitrión',
    hostAway: 'Anfitrión desconectado',
    hostOnline: 'Anfitrión en línea',
    endTooltip: 'Terminar sesión',
    leaveTooltip: 'Salir de la sesión',
    helpTooltip: 'Cómo funciona Orbit',
    diag: {
      openTooltip: 'Diagnóstico — registro de eventos copiable',
      title: 'Diagnóstico de Orbit',
      role: 'Rol',
      hostTrack: 'ID de pista del anfitrión',
      hostPos: 'Posición del anfitrión',
      guestTrack: 'Mi ID de pista',
      guestPos: 'Mi posición',
      drift: 'Desfase',
      stateAge: 'Edad del estado',
      eventLog: 'Registro de eventos ({{count}})',
      copyLabel: 'Copiar',
      copyTooltip: 'Copiar registro al portapapeles',
      clearLabel: 'Borrar',
      clearTooltip: 'Vaciar el búfer',
      empty: 'Aún sin eventos — aparecen cuando Orbit sincroniza.',
      hint: 'Abre esto antes de reproducir el problema, luego pulsa Copiar y pega en el reporte.',
      copied: '{{count}} líneas copiadas',
      copyFailed: 'No se pudo copiar al portapapeles',
      cleared: 'Búfer vaciado',
    },
    helpTitle: 'Cómo funciona Orbit',
    helpIntro: 'Orbit convierte Psysonic en una sala de escucha compartida. Un anfitrión elige la música; los invitados escuchan en sincronía y pueden sugerir canciones.',
    helpHostOnly: '(anfitrión)',
    helpSec1Title: '¿Qué es Orbit?',
    helpSec1Body: 'Un modo de "escuchar juntos" — el anfitrión maneja la reproducción, los invitados se conectan. Todo pasa por playlists en tu propio servidor Navidrome; sin infraestructura externa.',
    helpSec2Title: 'Anfitrión e invitados',
    helpSec2Body: 'El anfitrión controla la reproducción (play / pause / skip / seek) y decide cuándo termina la sesión. Los invitados siguen la reproducción, pueden sugerir canciones y salir o volver a unirse en cualquier momento. Solo el anfitrión puede expulsar o banear permanentemente a un participante.',
    helpSec2WarnHead: 'Importante: cuentas separadas.',
    helpSec2WarnBody: 'Cada participante necesita su propia cuenta Navidrome. Si anfitrión e invitado inician sesión con el mismo usuario, sus envíos chocan y el anfitrión nunca ve las sugerencias del invitado.',
    helpSec3Title: 'Iniciar e invitar',
    helpSec3Body: 'Haz clic en el botón "Orbit" → Crear una sesión → el modal muestra un enlace de invitación listo para copiar y te permite opcionalmente vaciar tu cola actual. Comparte el enlace como prefieras. Mientras una sesión está activa, el botón de compartir en la barra superior copia el enlace en cualquier momento.',
    helpSec4Title: 'Unirse',
    helpSec4Body: 'Pega el enlace de invitación en cualquier parte de Psysonic con Ctrl+V / Cmd+V — el aviso para unirse aparece automáticamente. Alternativa: "Orbit" → Unirse a una sesión → pega en el campo. Si el enlace apunta a un servidor donde tienes una cuenta, Psysonic cambia automáticamente. Si tienes más de una cuenta en ese servidor, un pequeño selector pregunta cuál usar.',
    helpSec5Title: 'Sugerir canciones',
    helpSec5Body: 'En cualquier lista: doble clic en una fila, o clic derecho → "Añadir a la sesión Orbit". Un clic simple muestra una pista en lugar de tirar todo el álbum a la cola compartida — es intencional. Las acciones masivas explícitas como "Reproducir todo" o "Reproducir álbum" piden confirmación primero y luego añaden (nunca reemplazan).',
    helpSec6Title: 'La cola compartida',
    helpSec6Body: 'La cola muestra las próximas canciones del anfitrión — visible para todos. Las adiciones masivas siempre se añaden al final, para que las sugerencias de los invitados no se pierdan. El mezclado automático reordena la cola periódicamente (configurable: 1 / 5 / 10 / 15 / 30 min). Si tu reproducción se desvía del anfitrión, el botón "Alcanzar" en la barra te devuelve a la posición en vivo del anfitrión.',
    helpSec7Title: 'Aprobaciones',
    helpSec7Body: 'Por defecto, las sugerencias de los invitados necesitan aprobación manual — aparecen en una barra de "Aprobaciones" en la parte superior del panel con botones aceptar / rechazar. La aprobación automática puede activarse en los ajustes de sesión para que todo entre directamente.',
    helpSec8Title: 'Participantes y ajustes',
    helpSec8Body: 'Abre el icono de ajustes en la barra de sesión para la frecuencia de mezclado, la aprobación automática y el atajo "Mezclar ahora". Haz clic en el número de participantes para ver quién está conectado — expulsar (puede volver a unirse por el enlace) o banear (bloqueado para la sesión). Los invitados también ven la lista de participantes, pero solo de lectura.',
    helpSec9Title: 'Terminar la sesión',
    helpSec9Body: 'X del anfitrión → diálogo de confirmación → la sesión se cierra para todos y las playlists del servidor se limpian automáticamente. X del invitado → el invitado sale, la sesión sigue. Si el anfitrión queda en silencio 5 minutos, el invitado sale automáticamente con un aviso; las reconexiones cortas en esa ventana son invisibles.',
    participantsInviteLabel: 'Enlace de invitación',
    participantsCountLabel: '{{count}} en sesión',
    participantsHost: 'anfitrión',
    participantsEmpty: 'Aún no hay invitados',
    participantsKickTooltip: 'Quitar de la sesión',
    participantsKickAria: 'Quitar a {{user}}',
    participantsRemoveTooltip: 'Quitar de la sesión',
    participantsRemoveAria: 'Quitar a {{user}} de esta sesión',
    participantsBanTooltip: 'Banear permanentemente',
    participantsBanAria: 'Banear permanentemente a {{user}}',
    participantsMuteTooltip: 'Silenciar sugerencias',
    participantsUnmuteTooltip: 'Permitir sugerencias',
    participantsMuteAria: 'Silenciar las sugerencias de {{user}}',
    participantsUnmuteAria: 'Volver a permitir las sugerencias de {{user}}',
    confirmRemoveTitle: '¿Quitar de la sesión?',
    confirmRemoveBody: '{{user}} será expulsado de la sesión, pero puede volver a unirse por tu enlace de invitación.',
    confirmRemoveConfirm: 'Quitar',
    confirmBanTitle: '¿Banear permanentemente?',
    confirmBanBody: '{{user}} será expulsado y bloqueado para volver a unirse a esta sesión. No se puede deshacer durante la sesión.',
    confirmBanConfirm: 'Banear',
    confirmCancel: 'Cancelar',
    confirmJoinTitle: '¿Unirse a la sesión Orbit?',
    confirmJoinBody: '{{host}} te ha invitado a "{{name}}". ¿Unirse a la sesión?',
    confirmJoinConfirm: 'Unirse',
    confirmLeaveTitle: '¿Salir de la sesión?',
    confirmLeaveBody: '¿Salir de "{{name}}"? Puedes volver a unirte en cualquier momento por el enlace de invitación de {{host}}.',
    confirmLeaveConfirm: 'Salir',
    confirmEndTitle: '¿Terminar la sesión para todos?',
    confirmEndBody: '"{{name}}" se cerrará para todos los participantes. Las playlists de la sesión se limpian automáticamente.',
    confirmEndConfirm: 'Terminar sesión',
    invalidLinkTitle: 'El enlace de invitación ya no es válido',
    invalidLinkBody: 'Esta sesión Orbit ya no existe o ya ha terminado. Pide al anfitrión un nuevo enlace de invitación.',
    settingsTitle: 'Ajustes de sesión',
    settingAutoApprove: 'Aprobar sugerencias automáticamente',
    settingAutoApproveHint: 'Las sugerencias de los invitados entran instantáneamente en tu cola. Desactivado: se quedan en la lista de sesión para revisión posterior.',
    settingAutoShuffle: 'Mezclado automático',
    settingAutoShuffleHint: 'Mezclado Fisher-Yates periódico de la cola próxima. Desactivado: el orden solo cambia cuando lo reorganizas.',
    settingShuffleInterval: 'Remezclar cada',
    settingShuffleIntervalHint: 'Con qué frecuencia se remezcla la cola próxima durante la sesión.',
    suggestBlockedMuted: 'El anfitrión te silenció en esta sesión — sugerencias desactivadas.',
    settingShuffleIntervalValue_one: '{{count}} min',
    settingShuffleIntervalValue_other: '{{count}} min',
    settingShuffleNow: 'Mezclar ahora',
    toastSuggested: '{{user}} sugirió "{{title}}"',
    toastSuggestedMany: '{{count}} nuevas sugerencias en la cola',
    toastShuffled: 'Cola mezclada',
    toastJoined: 'Te has unido a la sesión',
    toastLoginFirst: 'Inicia sesión antes de unirte a una sesión',
    toastSwitchServer: 'Cambia primero a {{url}}, luego pega de nuevo',
    toastNoAccountForServer: 'No tienes acceso a {{url}}. Pide al anfitrión una invitación.',
    toastSwitchFailed: 'No se pudo cambiar a {{url}}',
    accountPickerTitle: '¿Qué cuenta?',
    accountPickerSub: 'Tienes más de una cuenta para {{url}}. Elige con cuál unirte a la sesión.',
    toastJoinFail: 'No se pudo unir a la sesión',
    joinErrNotFound: 'Sesión no encontrada',
    joinErrEnded: 'La sesión ha terminado',
    joinErrFull: 'La sesión está llena',
    joinErrKicked: 'No puedes volver a unirte a esta sesión',
    joinErrNoUser: 'Sin servidor activo',
    joinErrServerError: 'No se pudo unir',
    ctxAddToSession: 'Añadir a la sesión Orbit',
    ctxSuggestedToast: 'Sugerido a la sesión',
    ctxSuggestFailed: 'No se pudo sugerir — no unido',
    ctxAddToSessionHost: 'Añadir a la sesión Orbit',
    ctxAddedHostToast: 'Añadido a la sesión',
    ctxAddHostFailed: 'No se pudo añadir a la sesión',
    bulkConfirmTitle: '¿Añadir todo esto a la cola Orbit?',
    bulkConfirmBody: 'Esto lanzaría {{count}} canciones a la cola compartida de una vez. Es mucho para tus invitados. ¿Continuar?',
    bulkConfirmYes: 'Añadir todas',
    bulkConfirmNo: 'Cancelar',
    guestLive: 'En vivo',
    guestPlaying: 'Reproduciendo ahora',
    guestPaused: 'En pausa',
    guestLoading: 'Cargando…',
    guestSuggestions: 'Sugerencias',
    guestUpNext: 'A continuación',
    guestUpNextEmpty: 'Nada en cola. Abre el menú contextual de una canción y elige "Añadir a la sesión Orbit" para sugerir una.',
    guestPendingTitle: 'Esperando al anfitrión',
    guestPendingHint: 'Sugerido — aparecerá en la cola cuando el anfitrión lo acepte.',
    approvalTitle: 'Pendiente de aprobación',
    approvalFrom: 'Sugerido por {{user}}',
    approvalAccept: 'Aceptar',
    approvalDecline: 'Rechazar',
    guestUpNextMore: '+ {{count}} más en la cola del anfitrión',
    guestSubmitter: 'de {{user}}',
    queueAddedByHost: 'Añadido por el anfitrión',
    queueAddedByYou: 'Añadido por ti',
    queueAddedByUser: 'Añadido por {{user}}',
    guestEmpty: 'Aún no hay sugerencias. Abre el menú contextual de una canción y elige "Añadir a la sesión Orbit".',
    guestFooter: 'El anfitrión controla la reproducción — no puedes cambiar la lista.',
    exitKickedTitle: 'Has sido baneado de la sesión',
    exitRemovedTitle: 'Has sido quitado de la sesión',
    exitEndedTitle: 'El anfitrión ha terminado la sesión',
    exitHostTimeoutTitle: 'Anfitrión en silencio',
    exitHostTimeoutBody: '{{host}} no ha enviado una actualización durante un rato, así que "{{name}}" se cerró en tu lado. Puedes volver a unirte en cualquier momento con el enlace de invitación.',
    exitKickedBody: '{{host}} te ha baneado de "{{name}}". No puedes volver a unirte.',
    exitRemovedBody: '{{host}} te ha quitado de "{{name}}". Puedes volver a unirte en cualquier momento por el enlace.',
    exitEndedBody: '"{{name}}" ha terminado. Espero que te hayas divertido.',
    exitOk: 'OK',
  },
  tray: {
    playPause: 'Reproducir / Pausa',
    nextTrack: 'Pista siguiente',
    previousTrack: 'Pista anterior',
    showHide: 'Mostrar / Ocultar',
    exitPsysonic: 'Salir de Psysonic',
    nothingPlaying: 'Nada en reproducción',
  },
  licenses: {
    title: 'Licencias de Código Abierto',
    intro: 'Psysonic se basa en software de código abierto. La lista siguiente muestra cada dependencia incluida con la aplicación, con su versión, licencia y el texto completo de la licencia.',
    highlights: 'Dependencias principales',
    searchPlaceholder: 'Buscar por nombre, versión o licencia…',
    noResults: 'Sin resultados.',
    loading: 'Cargando licencias…',
    loadError: 'No se pudieron cargar los datos de licencia.',
    noLicenseText: 'No hay texto de licencia incluido para esta dependencia.',
    viewSource: 'Ver fuente',
    totalLine: '{{total}} dependencias — {{cargo}} cargo, {{npm}} npm',
    generatedAt: 'Última generación {{date}}',
  },
};
