diff --git a/Actualización.md b/Actualización.md
new file mode 100644
index 0000000..0ae2528
--- /dev/null
+++ b/Actualización.md
@@ -0,0 +1,442 @@
+# Actualización
+
+Guía para mantener Heimdall actualizado con las últimas versiones de LinuxServer.io.
+
+## 🔄 Proceso de Actualización
+
+Heimdall usa la imagen `lscr.io/linuxserver/heimdall:latest` que se actualiza regularmente.
+
+### Método 1: Actualización Manual (Recomendado)
+
+El método más seguro con control total.
+
+#### Desde CLI
+
+```bash
+# 1. Hacer backup (recomendado)
+docker run --rm \
+ -v heimdall_config:/config \
+ -v ~/backups/heimdall:/backup \
+ alpine tar czf /backup/heimdall-pre-update-$(date +%Y%m%d).tar.gz -C /config .
+
+# 2. Descargar nueva imagen
+docker compose pull
+
+# 3. Recrear contenedor
+docker compose up -d
+
+# 4. Verificar logs
+docker logs -f heimdall
+```
+
+#### Desde Portainer
+
+**Stacks** → `heimdall` → **Pull and redeploy**
+
+1. ✅ **Pull latest image versions**
+2. ✅ **Re-deploy stack**
+3. Click en **Update**
+
+Verificar:
+- **Containers** → `heimdall` → **Logs**
+
+#### PowerShell (Windows)
+
+```powershell
+# Backup
+docker run --rm `
+ -v heimdall_config:/config `
+ -v ${HOME}\backups\heimdall:/backup `
+ alpine tar czf /backup/heimdall-pre-update-$(Get-Date -Format "yyyyMMdd").tar.gz -C /config .
+
+# Actualizar
+docker compose pull
+docker compose up -d
+
+# Ver logs
+docker logs -f heimdall
+```
+
+### Método 2: Watchtower (Automático)
+
+Usa **Watchtower** del repositorio [groales/watchtower](https://git.ictiberia.com/groales/watchtower) para auto-actualizar.
+
+#### Configuración
+
+Watchtower ya está configurado para monitorear todos los contenedores.
+
+**Etiquetar para actualización automática**:
+
+En `docker-compose.yml` o override:
+```yaml
+services:
+ heimdall:
+ labels:
+ - "com.centurylinklabs.watchtower.enable=true"
+```
+
+**Excluir de auto-actualización**:
+```yaml
+services:
+ heimdall:
+ labels:
+ - "com.centurylinklabs.watchtower.enable=false"
+```
+
+#### Verificar Watchtower
+
+```bash
+# Ver logs de Watchtower
+docker logs watchtower
+
+# Debe mostrar:
+# Checking heimdall
+# Found new lscr.io/linuxserver/heimdall:latest image
+# Stopping heimdall
+# Removing heimdall
+# Creating heimdall
+```
+
+### Método 3: Actualización Programada
+
+Crear script de actualización automática.
+
+#### Script Bash (Linux)
+
+`~/scripts/update-heimdall.sh`:
+```bash
+#!/bin/bash
+
+BACKUP_DIR=~/backups/heimdall
+DATE=$(date +%Y%m%d-%H%M%S)
+
+# Función de log
+log() {
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
+}
+
+log "Iniciando actualización de Heimdall"
+
+# Backup
+log "Creando backup..."
+docker run --rm \
+ -v heimdall_config:/config \
+ -v $BACKUP_DIR:/backup \
+ alpine tar czf /backup/heimdall-pre-update-$DATE.tar.gz -C /config . || {
+ log "ERROR: Falló el backup. Abortando actualización."
+ exit 1
+}
+
+log "Backup creado: heimdall-pre-update-$DATE.tar.gz"
+
+# Actualizar
+log "Descargando nueva imagen..."
+cd ~/heimdall
+docker compose pull || {
+ log "ERROR: Falló la descarga de la imagen."
+ exit 1
+}
+
+log "Recreando contenedor..."
+docker compose up -d || {
+ log "ERROR: Falló la recreación del contenedor."
+ log "Restaurando desde backup..."
+ docker run --rm \
+ -v heimdall_config:/config \
+ -v $BACKUP_DIR:/backup \
+ alpine tar xzf /backup/heimdall-pre-update-$DATE.tar.gz -C /config
+ docker compose up -d
+ exit 1
+}
+
+# Verificar salud
+log "Esperando 10 segundos para verificar salud..."
+sleep 10
+
+if docker ps | grep -q heimdall; then
+ log "✓ Heimdall actualizado correctamente"
+
+ # Limpiar backups antiguos (30 días)
+ find $BACKUP_DIR -name "heimdall-pre-update-*.tar.gz" -mtime +30 -delete
+ log "✓ Backups antiguos limpiados"
+else
+ log "ERROR: Heimdall no está corriendo. Revisa los logs:"
+ docker logs heimdall
+ exit 1
+fi
+```
+
+Hacer ejecutable:
+```bash
+chmod +x ~/scripts/update-heimdall.sh
+```
+
+#### Automatizar con Cron
+
+```bash
+crontab -e
+
+# Actualizar semanalmente (domingos a las 3 AM)
+0 3 * * 0 ~/scripts/update-heimdall.sh >> ~/logs/heimdall-updates.log 2>&1
+```
+
+#### PowerShell Script (Windows)
+
+`C:\Scripts\Update-Heimdall.ps1`:
+```powershell
+$BackupPath = "$HOME\backups\heimdall"
+$Date = Get-Date -Format "yyyyMMdd-HHmmss"
+$LogFile = "$HOME\logs\heimdall-updates.log"
+
+function Write-Log {
+ param($Message)
+ $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
+ "$Timestamp - $Message" | Tee-Object -FilePath $LogFile -Append
+}
+
+Write-Log "Iniciando actualización de Heimdall"
+
+# Backup
+Write-Log "Creando backup..."
+docker run --rm `
+ -v heimdall_config:/config `
+ -v ${BackupPath}:/backup `
+ alpine tar czf /backup/heimdall-pre-update-$Date.tar.gz -C /config .
+
+if ($LASTEXITCODE -ne 0) {
+ Write-Log "ERROR: Falló el backup. Abortando."
+ exit 1
+}
+
+Write-Log "Backup creado: heimdall-pre-update-$Date.tar.gz"
+
+# Actualizar
+Write-Log "Descargando nueva imagen..."
+Set-Location "$HOME\repos\heimdall"
+docker compose pull
+
+if ($LASTEXITCODE -ne 0) {
+ Write-Log "ERROR: Falló la descarga."
+ exit 1
+}
+
+Write-Log "Recreando contenedor..."
+docker compose up -d
+
+if ($LASTEXITCODE -ne 0) {
+ Write-Log "ERROR: Falló la recreación."
+ Write-Log "Restaurando desde backup..."
+ docker run --rm `
+ -v heimdall_config:/config `
+ -v ${BackupPath}:/backup `
+ alpine tar xzf /backup/heimdall-pre-update-$Date.tar.gz -C /config
+ docker compose up -d
+ exit 1
+}
+
+# Verificar
+Start-Sleep -Seconds 10
+
+if (docker ps | Select-String "heimdall") {
+ Write-Log "✓ Heimdall actualizado correctamente"
+
+ # Limpiar backups antiguos (30 días)
+ Get-ChildItem -Path $BackupPath -Filter "heimdall-pre-update-*.tar.gz" |
+ Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
+ Remove-Item
+ Write-Log "✓ Backups antiguos limpiados"
+} else {
+ Write-Log "ERROR: Heimdall no está corriendo"
+ docker logs heimdall | Out-File -Append $LogFile
+ exit 1
+}
+```
+
+Automatizar con Tarea Programada:
+```powershell
+$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\Update-Heimdall.ps1"
+$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 3am
+Register-ScheduledTask -TaskName "Heimdall Update" -Action $Action -Trigger $Trigger
+```
+
+## 🔍 Verificar Versión
+
+### Ver versión actual
+
+```bash
+docker inspect heimdall | grep -A 5 Labels | grep build_version
+
+# O ver logs al iniciar:
+docker logs heimdall | grep "Version:"
+```
+
+Salida ejemplo:
+```
+Version: 2.5.8-ls234 Built: 2024-12-01
+```
+
+### Ver versión disponible
+
+```bash
+# Comparar con registro remoto
+docker pull lscr.io/linuxserver/heimdall:latest
+docker inspect lscr.io/linuxserver/heimdall:latest | grep build_version
+```
+
+### Desde Portainer
+
+**Containers** → `heimdall` → **Details** → **Labels**
+
+Buscar: `org.opencontainers.image.version`
+
+## 📋 Changelog
+
+Ver cambios en nuevas versiones:
+
+- **GitHub**: [Heimdall Releases](https://github.com/linuxserver/Heimdall/releases)
+- **LinuxServer.io**: [Blog](https://www.linuxserver.io/blog)
+- **Docker Hub**: [Tags](https://hub.docker.com/r/linuxserver/heimdall/tags)
+
+## 🔔 Notificaciones de Actualizaciones
+
+### Con Diun
+
+Usar **Diun** (Docker Image Update Notifier):
+
+```yaml
+# docker-compose.yml de Diun
+services:
+ diun:
+ image: crazymax/diun:latest
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ environment:
+ - DIUN_WATCH_WORKERS=5
+ - DIUN_NOTIF_MAIL_HOST=smtp.gmail.com
+ - DIUN_NOTIF_MAIL_PORT=587
+ - DIUN_NOTIF_MAIL_FROM=tu@gmail.com
+ - DIUN_NOTIF_MAIL_TO=tu@gmail.com
+```
+
+### Con Watchtower (solo notificaciones)
+
+```yaml
+# Watchtower en modo notificación (no actualiza)
+services:
+ watchtower:
+ command:
+ - --monitor-only
+ - --notifications
+ - email
+ environment:
+ - WATCHTOWER_NOTIFICATION_EMAIL_TO=tu@email.com
+```
+
+## 🐛 Solución de Problemas
+
+### Actualización falla
+
+```bash
+# Ver logs detallados
+docker logs heimdall
+
+# Errores comunes:
+# 1. Permisos: Verificar PUID/PGID
+# 2. Volumen corrupto: Restaurar desde backup
+# 3. Red: Verificar conectividad a Docker Hub
+```
+
+### Contenedor no inicia tras actualización
+
+```bash
+# Revertir a versión anterior
+docker compose down
+docker pull lscr.io/linuxserver/heimdall:2.5.8 # Versión específica
+# Editar docker-compose.yml: image: lscr.io/linuxserver/heimdall:2.5.8
+docker compose up -d
+
+# O restaurar desde backup
+docker run --rm \
+ -v heimdall_config:/config \
+ -v ~/backups/heimdall:/backup \
+ alpine tar xzf /backup/heimdall-pre-update-20251203.tar.gz -C /config
+docker start heimdall
+```
+
+### Configuración perdida tras actualización
+
+**Esto NO debería ocurrir** (el volumen persiste). Si ocurre:
+
+```bash
+# Verificar volumen
+docker volume inspect heimdall_config
+
+# Verificar montaje
+docker inspect heimdall | grep -A 10 Mounts
+
+# Restaurar desde backup
+# Ver guía: [[Backup y Restauración]]
+```
+
+### Actualizaciones muy frecuentes
+
+LinuxServer.io actualiza regularmente. Para estabilidad:
+
+**Usar tag específico**:
+```yaml
+services:
+ heimdall:
+ image: lscr.io/linuxserver/heimdall:2.5.8
+```
+
+**Actualizar manualmente** cada 1-2 meses en lugar de `:latest`.
+
+## 📊 Mejores Prácticas
+
+1. ✅ **Backup antes de actualizar** (siempre)
+2. ✅ **Actualizar en horario de bajo uso** (madrugada)
+3. ✅ **Verificar changelog** antes de actualizar
+4. ✅ **Probar en desarrollo** si tienes entorno test
+5. ✅ **Mantener 2-3 backups** recientes
+6. ✅ **Monitorear logs** tras actualización
+7. ❌ **NO actualizar en producción** sin backup
+
+## 🔄 Frecuencia Recomendada
+
+| Entorno | Frecuencia | Método |
+|---------|-----------|--------|
+| **Producción** | Mensual | Manual con backup |
+| **Personal** | Semanal | Watchtower o manual |
+| **Testing** | Diario | Watchtower |
+
+## 🚀 Actualización con Downtime Cero
+
+Para entornos críticos:
+
+1. Despliega segunda instancia con nueva versión
+2. Configura balanceo en proxy (NPM/Traefik)
+3. Cambia tráfico a nueva instancia
+4. Verifica funcionamiento
+5. Detiene instancia antigua
+
+**Con Traefik**:
+```yaml
+services:
+ heimdall-blue:
+ # Versión actual
+
+ heimdall-green:
+ # Nueva versión
+
+# Traefik balancea entre ambas
+# Cambiar peso gradualmente
+```
+
+## 📚 Siguiente Paso
+
+- [[Backup y Restauración]] - Protege tu configuración
+- [[Solución de Problemas]] - Resolver errores
+
+---
+
+**Repositorio**: [groales/heimdall](https://git.ictiberia.com/groales/heimdall)
diff --git a/Backup-y-Restauración.md b/Backup-y-Restauración.md
new file mode 100644
index 0000000..057990a
--- /dev/null
+++ b/Backup-y-Restauración.md
@@ -0,0 +1,423 @@
+# Backup y Restauración
+
+Guía completa para hacer backup de tu configuración de Heimdall y restaurarla en caso de desastre.
+
+## 📦 ¿Qué se Guarda?
+
+Heimdall almacena toda la configuración en el volumen `heimdall_config`:
+
+```
+/config/
+├── www/
+│ ├── app.sqlite ← Base de datos (apps, settings)
+│ ├── icons/ ← Iconos subidos
+│ └── backgrounds/ ← Imágenes de fondo subidas
+├── log/ ← Logs de la aplicación
+└── nginx/ ← Configuración NGINX
+```
+
+**Importante**: Solo necesitas backup de `/config/www/` para recuperar tus aplicaciones y personalización.
+
+## 💾 Métodos de Backup
+
+### Método 1: Backup Completo del Volumen (Recomendado)
+
+Este método guarda TODO el volumen.
+
+#### Desde CLI
+
+```bash
+# Crear directorio de backups
+mkdir -p ~/backups/heimdall
+
+# Backup completo
+docker run --rm \
+ -v heimdall_config:/config \
+ -v ~/backups/heimdall:/backup \
+ alpine tar czf /backup/heimdall-config-$(date +%Y%m%d-%H%M%S).tar.gz -C /config .
+
+# Ejemplo de resultado:
+# heimdall-config-20251203-143022.tar.gz
+```
+
+#### Desde PowerShell (Windows)
+
+```powershell
+# Crear directorio de backups
+New-Item -ItemType Directory -Force -Path "$HOME\backups\heimdall"
+
+# Backup completo
+docker run --rm `
+ -v heimdall_config:/config `
+ -v ${HOME}\backups\heimdall:/backup `
+ alpine tar czf /backup/heimdall-config-$(Get-Date -Format "yyyyMMdd-HHmmss").tar.gz -C /config .
+```
+
+#### Automatizar con Cron (Linux)
+
+```bash
+# Editar crontab
+crontab -e
+
+# Añadir backup diario a las 3 AM
+0 3 * * * docker run --rm -v heimdall_config:/config -v ~/backups/heimdall:/backup alpine tar czf /backup/heimdall-config-$(date +\%Y\%m\%d).tar.gz -C /config .
+
+# Limpiar backups antiguos (mantener 30 días)
+0 4 * * * find ~/backups/heimdall -name "heimdall-config-*.tar.gz" -mtime +30 -delete
+```
+
+#### Automatizar con Tarea Programada (Windows)
+
+**PowerShell script** (`heimdall-backup.ps1`):
+```powershell
+$BackupPath = "$HOME\backups\heimdall"
+$Date = Get-Date -Format "yyyyMMdd-HHmmss"
+$BackupFile = "heimdall-config-$Date.tar.gz"
+
+docker run --rm `
+ -v heimdall_config:/config `
+ -v ${BackupPath}:/backup `
+ alpine tar czf /backup/$BackupFile -C /config .
+
+# Limpiar backups antiguos (30 días)
+Get-ChildItem -Path $BackupPath -Filter "heimdall-config-*.tar.gz" |
+ Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
+ Remove-Item
+```
+
+**Crear tarea**:
+```powershell
+$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\heimdall-backup.ps1"
+$Trigger = New-ScheduledTaskTrigger -Daily -At 3am
+Register-ScheduledTask -TaskName "Heimdall Backup" -Action $Action -Trigger $Trigger
+```
+
+### Método 2: Backup Solo de Base de Datos
+
+Más rápido, solo guarda configuración (no iconos/fondos subidos).
+
+```bash
+# Backup de SQLite
+docker exec heimdall cat /config/www/app.sqlite > ~/backups/heimdall-$(date +%Y%m%d).sqlite
+
+# Verificar
+file ~/backups/heimdall-$(date +%Y%m%d).sqlite
+# Debe decir: SQLite 3.x database
+```
+
+### Método 3: Backup con docker-compose
+
+Si usas `docker-compose`:
+
+```yaml
+# Añadir servicio de backup en docker-compose.override.yml
+services:
+ heimdall-backup:
+ image: alpine:latest
+ volumes:
+ - heimdall_config:/config:ro
+ - ./backups:/backup
+ command: >
+ sh -c "tar czf /backup/heimdall-config-$$(date +%Y%m%d-%H%M%S).tar.gz -C /config . &&
+ find /backup -name 'heimdall-config-*.tar.gz' -mtime +30 -delete"
+ profiles:
+ - backup
+```
+
+Ejecutar manualmente:
+```bash
+docker compose --profile backup run --rm heimdall-backup
+```
+
+### Método 4: Backup Remoto (Nextcloud/NAS)
+
+#### A Nextcloud
+
+```bash
+# Backup + subida a Nextcloud
+BACKUP_FILE="heimdall-config-$(date +%Y%m%d).tar.gz"
+
+docker run --rm \
+ -v heimdall_config:/config \
+ -v /tmp:/backup \
+ alpine tar czf /backup/$BACKUP_FILE -C /config .
+
+# Subir a Nextcloud con curl
+curl -u "usuario:password" \
+ -T /tmp/$BACKUP_FILE \
+ "https://nextcloud.tudominio.com/remote.php/dav/files/usuario/Backups/$BACKUP_FILE"
+
+rm /tmp/$BACKUP_FILE
+```
+
+#### A NAS (SMB/CIFS)
+
+```bash
+# Montar carpeta NAS
+sudo mount -t cifs //nas.local/backups /mnt/nas -o username=user,password=pass
+
+# Backup directo a NAS
+docker run --rm \
+ -v heimdall_config:/config \
+ -v /mnt/nas/heimdall:/backup \
+ alpine tar czf /backup/heimdall-config-$(date +%Y%m%d).tar.gz -C /config .
+```
+
+## 🔄 Restauración
+
+### Restaurar Backup Completo
+
+```bash
+# Detener Heimdall
+docker stop heimdall
+
+# Restaurar
+docker run --rm \
+ -v heimdall_config:/config \
+ -v ~/backups/heimdall:/backup \
+ alpine tar xzf /backup/heimdall-config-20251203-143022.tar.gz -C /config
+
+# Iniciar Heimdall
+docker start heimdall
+```
+
+#### PowerShell (Windows)
+
+```powershell
+# Detener Heimdall
+docker stop heimdall
+
+# Restaurar (ajustar nombre de archivo)
+docker run --rm `
+ -v heimdall_config:/config `
+ -v ${HOME}\backups\heimdall:/backup `
+ alpine tar xzf /backup/heimdall-config-20251203-143022.tar.gz -C /config
+
+# Iniciar Heimdall
+docker start heimdall
+```
+
+### Restaurar Solo Base de Datos
+
+```bash
+# Detener Heimdall
+docker stop heimdall
+
+# Restaurar SQLite
+cat ~/backups/heimdall-20251203.sqlite | docker exec -i heimdall tee /config/www/app.sqlite > /dev/null
+
+# Iniciar Heimdall
+docker start heimdall
+```
+
+### Restaurar en Nuevo Servidor
+
+```bash
+# 1. Clonar repositorio
+git clone https://git.ictiberia.com/groales/heimdall
+cd heimdall
+
+# 2. Desplegar Heimdall (sin configuración)
+docker compose up -d
+
+# 3. Detener para restaurar
+docker stop heimdall
+
+# 4. Copiar backup al servidor
+scp ~/backups/heimdall-config-20251203.tar.gz user@nuevo-servidor:/tmp/
+
+# 5. Restaurar (en nuevo servidor)
+docker run --rm \
+ -v heimdall_config:/config \
+ -v /tmp:/backup \
+ alpine tar xzf /backup/heimdall-config-20251203.tar.gz -C /config
+
+# 6. Iniciar
+docker start heimdall
+```
+
+## 🔁 Migración entre Modos
+
+### De Standalone a NPM/Traefik
+
+La configuración de Heimdall es independiente del proxy. Solo necesitas:
+
+1. Hacer backup del volumen
+2. Cambiar override file
+3. Restaurar backup
+
+```bash
+# Backup actual
+docker run --rm -v heimdall_config:/config -v /tmp:/backup \
+ alpine tar czf /backup/heimdall-migrate.tar.gz -C /config .
+
+# Detener stack actual
+docker compose down
+
+# Cambiar override
+cp docker-compose.override.npm.yml.example docker-compose.override.yml
+
+# Desplegar con nuevo override
+docker compose up -d
+
+# Restaurar configuración (si es nueva instalación)
+docker stop heimdall
+docker run --rm -v heimdall_config:/config -v /tmp:/backup \
+ alpine tar xzf /backup/heimdall-migrate.tar.gz -C /config
+docker start heimdall
+```
+
+## 🗄️ Backup con Watchtower
+
+Si usas **Watchtower** para auto-actualizar, configura backup previo:
+
+```yaml
+# docker-compose.yml de Heimdall
+services:
+ heimdall:
+ labels:
+ - "com.centurylinklabs.watchtower.lifecycle.pre-update=/backup.sh"
+```
+
+Crear script `/backup.sh` en contenedor:
+```bash
+#!/bin/sh
+tar czf /backup/heimdall-pre-update-$(date +%Y%m%d-%H%M%S).tar.gz -C /config .
+```
+
+## 📊 Verificar Backup
+
+```bash
+# Listar contenido sin extraer
+tar tzf ~/backups/heimdall-config-20251203.tar.gz
+
+# Debe mostrar:
+# www/app.sqlite
+# www/icons/
+# www/backgrounds/
+# log/
+# nginx/
+```
+
+## 🐛 Solución de Problemas
+
+### Backup corrupto
+
+```bash
+# Verificar integridad
+tar tzf ~/backups/heimdall-config-20251203.tar.gz > /dev/null
+
+# Si falla:
+# tar: Error is not recoverable: exiting now
+# → Backup corrupto, usar backup anterior
+```
+
+### Permisos incorrectos tras restaurar
+
+```bash
+# Ajustar permisos (PUID/PGID del docker-compose.yml)
+docker exec heimdall chown -R 1000:1000 /config
+```
+
+### Base de datos bloqueada
+
+```bash
+# Detener Heimdall antes de backup/restauración
+docker stop heimdall
+
+# Si persiste:
+docker exec heimdall fuser /config/www/app.sqlite
+# Matar proceso si es necesario
+```
+
+## ☁️ Backup en la Nube
+
+### Rclone (recomendado)
+
+Soporta Google Drive, Dropbox, OneDrive, S3, etc.
+
+```bash
+# Instalar rclone
+curl https://rclone.org/install.sh | sudo bash
+
+# Configurar (seguir wizard)
+rclone config
+
+# Backup a Google Drive
+BACKUP_FILE="heimdall-config-$(date +%Y%m%d).tar.gz"
+
+docker run --rm \
+ -v heimdall_config:/config \
+ -v /tmp:/backup \
+ alpine tar czf /backup/$BACKUP_FILE -C /config .
+
+rclone copy /tmp/$BACKUP_FILE gdrive:Backups/Heimdall/
+rm /tmp/$BACKUP_FILE
+```
+
+### Restic (con encriptación)
+
+```bash
+# Instalar restic
+sudo apt install restic
+
+# Inicializar repositorio
+restic -r /mnt/backups/heimdall init
+
+# Backup encriptado
+docker run --rm \
+ -v heimdall_config:/config \
+ -v /tmp:/backup \
+ alpine tar czf /backup/heimdall-latest.tar.gz -C /config .
+
+restic -r /mnt/backups/heimdall backup /tmp/heimdall-latest.tar.gz
+
+# Restaurar
+restic -r /mnt/backups/heimdall restore latest --target /tmp/restore
+```
+
+## 📅 Estrategia de Backup Recomendada
+
+```
+Diario: Backup completo (retener 7 días)
+Semanal: Backup completo (retener 4 semanas)
+Mensual: Backup completo (retener 12 meses)
+```
+
+Script completo:
+```bash
+#!/bin/bash
+BACKUP_DIR=~/backups/heimdall
+DATE=$(date +%Y%m%d)
+BACKUP_FILE="heimdall-config-$DATE.tar.gz"
+
+# Crear backup
+docker run --rm \
+ -v heimdall_config:/config \
+ -v $BACKUP_DIR:/backup \
+ alpine tar czf /backup/$BACKUP_FILE -C /config .
+
+# Copiar a semanales (si es domingo)
+if [ $(date +%u) -eq 7 ]; then
+ cp $BACKUP_DIR/$BACKUP_FILE $BACKUP_DIR/weekly/
+fi
+
+# Copiar a mensuales (si es día 1)
+if [ $(date +%d) -eq 01 ]; then
+ cp $BACKUP_DIR/$BACKUP_FILE $BACKUP_DIR/monthly/
+fi
+
+# Limpiar antiguos
+find $BACKUP_DIR -maxdepth 1 -name "heimdall-config-*.tar.gz" -mtime +7 -delete
+find $BACKUP_DIR/weekly -name "heimdall-config-*.tar.gz" -mtime +28 -delete
+find $BACKUP_DIR/monthly -name "heimdall-config-*.tar.gz" -mtime +365 -delete
+```
+
+## 🚀 Siguiente Paso
+
+- [[Actualización]] - Mantén Heimdall al día
+- [[Solución de Problemas]] - Resolver errores comunes
+
+---
+
+**Repositorio**: [groales/heimdall](https://git.ictiberia.com/groales/heimdall)
diff --git a/Configuración-Inicial.md b/Configuración-Inicial.md
new file mode 100644
index 0000000..a873ca3
--- /dev/null
+++ b/Configuración-Inicial.md
@@ -0,0 +1,330 @@
+# Configuración Inicial
+
+Guía para configurar Heimdall tras el primer despliegue, independientemente del modo usado ([[Traefik]], [[NPM]], o [[Standalone]]).
+
+## 🎯 Primer Acceso
+
+Al abrir Heimdall por primera vez verás una interfaz vacía con mensaje de bienvenida.
+
+### Activar Modo Edición
+
+1. Click en el **icono de llave inglesa** 🔧 (esquina superior derecha)
+2. La interfaz cambia a modo edición (fondo con cuadrícula)
+
+## ➕ Añadir Primera Aplicación
+
+### Ejemplo: Añadir Portainer
+
+1. Click en **Add Application** (botón grande en el centro)
+2. Rellenar formulario:
+
+**Campos básicos**:
+- **Application name**: `Portainer`
+- **Colour**: `#13bef9` (azul Portainer)
+- **Icon**: Buscar `portainer` en el selector
+- **URL**: `https://portainer.tudominio.com` (o IP:puerto si standalone)
+- **Description**: `Gestión de contenedores Docker`
+
+**Opciones adicionales (opcional)**:
+- **Pinned**: ✅ (mantiene la app al inicio)
+- **Open in new window**: ✅ (abre en nueva pestaña)
+
+3. Click en **Save** 💾
+
+La aplicación aparece como tarjeta en el dashboard.
+
+## 🎨 Añadir Más Aplicaciones
+
+### Aplicaciones Comunes
+
+#### Proxmox
+```
+Name: Proxmox
+Colour: #E57000
+Icon: proxmox
+URL: https://proxmox.tudominio.com:8006
+Description: Virtualización y contenedores
+```
+
+#### Jellyfin
+```
+Name: Jellyfin
+Colour: #00A4DC
+Icon: jellyfin
+URL: https://jellyfin.tudominio.com
+Description: Servidor multimedia
+```
+
+#### Home Assistant
+```
+Name: Home Assistant
+Colour: #41BDF5
+Icon: home-assistant
+URL: https://homeassistant.tudominio.com
+Description: Domótica
+```
+
+#### Pi-hole
+```
+Name: Pi-hole
+Colour: #96060C
+Icon: pi-hole
+URL: https://pihole.tudominio.com/admin
+Description: Bloqueador DNS
+```
+
+#### qBittorrent
+```
+Name: qBittorrent
+Colour: #3889CE
+Icon: qbittorrent
+URL: https://qbittorrent.tudominio.com
+Description: Cliente torrent
+```
+
+## 🔌 Enhanced Apps - Widgets Especiales
+
+Heimdall soporta widgets avanzados para apps populares que muestran información en tiempo real.
+
+### Configurar Enhanced App
+
+#### Ejemplo: Sonarr
+
+1. Click en **engranaje** ⚙️ de la aplicación
+2. **Enable**: ✅ Marcar checkbox
+3. **Application type**: Seleccionar `Sonarr`
+4. **Enhanced options** (se expande):
+ - **API Key**: Ir a Sonarr → Settings → General → API Key (copiar)
+ - Pegar en Heimdall
+5. **Save**
+
+El widget ahora muestra:
+- Próximos episodios
+- Series monitorizadas
+- Actividad de descargas
+
+### Enhanced Apps Disponibles
+
+| Aplicación | Muestra |
+|-----------|---------|
+| **Plex** | Streams activos, películas/series |
+| **Sonarr** | Próximos episodios, series |
+| **Radarr** | Próximas películas, biblioteca |
+| **Lidarr** | Próximos lanzamientos, artistas |
+| **SABnzbd** | Cola de descargas, velocidad |
+| **NZBGet** | Cola, historial |
+| **Deluge** | Torrents activos, velocidad |
+| **qBittorrent** | Torrents, ratio |
+| **Pi-hole** | Consultas bloqueadas, % bloqueo |
+| **Nextcloud** | Notificaciones |
+| **pfSense** | Tráfico, alertas |
+
+### Obtener API Keys
+
+**Sonarr/Radarr/Lidarr**:
+```
+Settings → General → Security → API Key
+```
+
+**SABnzbd**:
+```
+Config → General → Security → API Key
+```
+
+**NZBGet**:
+```
+Settings → Security → ControlPassword (usar como API Key)
+```
+
+**qBittorrent**:
+```
+# No requiere API Key, usa usuario/password en enhanced options
+```
+
+**Pi-hole**:
+```
+# API Token desde la UI o:
+sudo cat /etc/pihole/setupVars.conf | grep WEBPASSWORD
+```
+
+## 🏷️ Organizar con Tags
+
+Los **tags** permiten agrupar aplicaciones por categorías.
+
+### Crear Tags
+
+1. Al añadir/editar app, campo **Tags**: `media, streaming`
+2. Separar múltiples tags con comas
+3. **Save**
+
+### Filtrar por Tags
+
+- Los tags aparecen como botones en la parte superior
+- Click en un tag para filtrar aplicaciones
+
+### Tags Sugeridos
+
+```
+media - Jellyfin, Plex, Emby
+automation - Sonarr, Radarr, Lidarr
+downloads - SABnzbd, qBittorrent, Deluge
+infrastructure- Portainer, Proxmox, Traefik
+monitoring - Grafana, Prometheus, Uptime Kuma
+security - Pi-hole, pfSense, Vaultwarden
+productivity - Nextcloud, Bookstack, Wiki.js
+```
+
+## 🎨 Personalización Visual
+
+### Cambiar Tema
+
+1. **Modo edición** → **Settings** (icono engranaje arriba)
+2. **Theme**: Seleccionar tema
+ - Classic (claro)
+ - Dark (oscuro)
+ - Nord
+ - Gruvbox
+ - Custom (personalizado)
+3. **Save**
+
+### Cambiar Fondo
+
+#### Opción 1: URL de Imagen
+1. **Settings** → **Background image**
+2. URL: `https://example.com/imagen.jpg`
+3. **Save**
+
+#### Opción 2: Subir Imagen
+1. **Settings** → **Background image**
+2. Click en **Upload**
+3. Seleccionar imagen local
+4. **Save**
+
+#### Opción 3: Unsplash Aleatoria
+URL de Unsplash con keywords:
+```
+https://source.unsplash.com/1920x1080/?nature,landscape
+```
+
+### Ajustar Búsqueda
+
+**Settings** → **Search Settings**:
+- **Enable search**: ✅
+- **Search provider**:
+ - Google
+ - DuckDuckGo
+ - Bing
+ - StartPage
+ - Custom
+
+**Custom search URL**:
+```
+https://duckduckgo.com/?q=
+```
+
+## 📐 Organizar Dashboard
+
+### Reordenar Aplicaciones
+
+En **modo edición**:
+1. **Drag & drop** las tarjetas
+2. Soltar donde quieras
+3. Salir de modo edición → Se guarda automáticamente
+
+### Crear Secciones
+
+Usa **tags** + orden para crear secciones visuales:
+1. Agrupa apps similares con mismo tag
+2. Reordena para que queden juntas
+3. Ejemplo:
+ ```
+ [Media] [Media] [Media]
+ [Downloads] [Downloads]
+ [Admin] [Admin]
+ ```
+
+### Aplicaciones Destacadas
+
+Marca **Pinned** ✅ en aplicaciones importantes para mantenerlas arriba.
+
+## ⚙️ Configuración Avanzada
+
+### Multi-usuario (con proxy)
+
+Heimdall no tiene autenticación nativa. Usa:
+
+**Con NPM**:
+- Access List con usuario/password (ver [[NPM]])
+
+**Con Traefik**:
+- Middleware BasicAuth (ver [[Traefik]])
+
+### Dashboard Público vs Privado
+
+**Privado** (recomendado):
+- Heimdall detrás de VPN
+- Access List limitada a red local
+- Autenticación en proxy
+
+**Público** (con precaución):
+- Solo enlaces a servicios públicos
+- No incluir IPs internas
+- No incluir admin panels
+
+### Configurar Idioma
+
+Heimdall actualmente solo soporta inglés en UI. Los **nombres y descripciones** de apps pueden ser en español.
+
+## 🔧 Ajustes del Sistema
+
+### Variables de Entorno
+
+Editar en **Portainer** → Stack Editor o en `docker-compose.yml`:
+
+```yaml
+environment:
+ PUID: 1000 # ID de usuario (tu UID)
+ PGID: 1000 # ID de grupo (tu GID)
+ TZ: Europe/Madrid # Zona horaria
+```
+
+**Obtener tu UID/GID**:
+```bash
+id
+```
+
+### Reiniciar Heimdall
+
+```bash
+docker restart heimdall
+```
+
+O desde Portainer:
+**Containers** → `heimdall` → **Restart**
+
+## 📱 Acceso Móvil
+
+Heimdall es completamente responsive.
+
+### Añadir a Pantalla de Inicio (iOS/Android)
+
+**iOS**:
+1. Safari → `https://heimdall.tudominio.com`
+2. Icono compartir → **Añadir a pantalla de inicio**
+3. Nombrar: `Dashboard`
+
+**Android**:
+1. Chrome → `https://heimdall.tudominio.com`
+2. Menú → **Añadir a pantalla de inicio**
+
+Ahora funciona como una app.
+
+## 🚀 Siguiente Paso
+
+- [[Personalización]] - Temas, fondos, búsqueda avanzada
+- [[Backup y Restauración]] - Protege tu configuración
+- [[Actualización]] - Mantén Heimdall al día
+
+---
+
+**Repositorio**: [groales/heimdall](https://git.ictiberia.com/groales/heimdall)
diff --git a/Home.md b/Home.md
index 0ab951d..3b4be0d 100644
--- a/Home.md
+++ b/Home.md
@@ -1 +1,38 @@
-¡Bienvenidos a la Wiki!
\ No newline at end of file
+# Wiki: Heimdall Application Dashboard
+
+Bienvenido a la documentación de **Heimdall**, un dashboard elegante para organizar todos tus servicios web.
+
+## 📋 Índice
+
+### Información General
+- [[Home]] - Esta página
+- [[Configuración Inicial]] - Primeros pasos tras el despliegue
+- [[Personalización]] - Temas, fondos y organización
+
+### Modos de Despliegue
+- [[Traefik]] - Integración con Traefik (proxy reverso)
+- [[NPM]] - Integración con NGINX Proxy Manager
+- [[Standalone]] - Acceso directo sin proxy (IP:puerto)
+
+### Administración
+- [[Backup y Restauración]] - Gestión de configuraciones
+- [[Actualización]] - Mantener Heimdall al día
+- [[Solución de Problemas]] - Errores comunes y soluciones
+
+## 🎯 ¿Qué modo usar?
+
+| Modo | Cuándo usarlo | Ventajas |
+|------|---------------|----------|
+| **[[Traefik]]** | Infraestructura con Traefik | SSL automático, routing avanzado |
+| **[[NPM]]** | Infraestructura con NPM | UI gráfica, SSL Let's Encrypt |
+| **[[Standalone]]** | Testing, entornos sin proxy | Simple, acceso directo |
+
+## 🔒 Recomendación de Seguridad
+
+**En producción**: Usa siempre **[[Traefik]]** o **[[NPM]]** con SSL. El modo **[[Standalone]]** es solo para testing o redes internas confiables.
+
+## 🔗 Recursos Oficiales
+
+- [Documentación LinuxServer.io](https://docs.linuxserver.io/images/docker-heimdall)
+- [GitHub - Heimdall](https://github.com/linuxserver/Heimdall)
+- [Docker Hub](https://hub.docker.com/r/linuxserver/heimdall)
\ No newline at end of file
diff --git a/NPM.md b/NPM.md
new file mode 100644
index 0000000..ec06249
--- /dev/null
+++ b/NPM.md
@@ -0,0 +1,262 @@
+# Integración con NGINX Proxy Manager
+
+Esta guía explica cómo desplegar Heimdall con **NPM (NGINX Proxy Manager)** del repositorio [groales/npm](https://git.ictiberia.com/groales/npm).
+
+## 📋 Requisitos Previos
+
+- ✅ NPM desplegado y funcionando ([groales/npm](https://git.ictiberia.com/groales/npm))
+- ✅ Red Docker `proxy` creada (NPM la crea automáticamente)
+- ✅ DNS configurado apuntando a tu servidor (ej: `heimdall.tudominio.com`)
+- ✅ Acceso a la UI de NPM (puerto 81)
+
+## 🚀 Despliegue desde Portainer
+
+### 1. Crear Stack en Portainer
+
+**Stacks** → **Add stack**
+
+**Configuración**:
+- **Name**: `heimdall`
+- **Build method**: **Git Repository**
+ - **Repository URL**: `https://git.ictiberia.com/groales/heimdall`
+ - **Repository reference**: `refs/heads/main`
+ - **Compose path**: `docker-compose.yml`
+ - **Additional paths**: `docker-compose.override.npm.yml.example`
+- **Deploy the stack**
+
+### 2. Verificar Despliegue
+
+**Stacks** → `heimdall` → Ver contenedor
+
+Estado debe ser **running** ✅
+
+```bash
+docker logs heimdall
+```
+
+Deberías ver:
+```
+[services.d] starting services
+[services.d] done.
+```
+
+### 3. Configurar Proxy Host en NPM
+
+Accede a NPM: `http://IP-del-servidor:81`
+
+**Dashboard** → **Proxy Hosts** → **Add Proxy Host**
+
+#### Pestaña Details
+
+- **Domain Names**: `heimdall.tudominio.com`
+- **Scheme**: `http` ⚠️ (importante: HTTP, no HTTPS)
+- **Forward Hostname / IP**: `heimdall` (nombre del contenedor)
+- **Forward Port**: `80`
+- **Cache Assets**: ✅ (opcional, mejora rendimiento)
+- **Block Common Exploits**: ✅ (recomendado)
+- **Websockets Support**: ❌ (no necesario para Heimdall)
+
+#### Pestaña SSL
+
+- ✅ **Request a new SSL Certificate**
+- ✅ **Force SSL** (redirige HTTP → HTTPS)
+- ✅ **HTTP/2 Support**
+- **Email Address**: `tu@email.com`
+- ✅ **I Agree to the Let's Encrypt Terms of Service**
+
+**Save** 💾
+
+### 4. Acceder
+
+Abre tu navegador en: `https://heimdall.tudominio.com` 🎉
+
+NPM gestiona automáticamente el certificado SSL con Let's Encrypt.
+
+## 🛠️ Despliegue desde CLI
+
+### 1. Clonar repositorio
+
+```bash
+git clone https://git.ictiberia.com/groales/heimdall
+cd heimdall
+```
+
+### 2. Copiar override
+
+```bash
+cp docker-compose.override.npm.yml.example docker-compose.override.yml
+```
+
+### 3. Desplegar
+
+```bash
+docker compose up -d
+```
+
+### 4. Configurar en NPM
+
+Sigue el **paso 3** de la sección anterior (Configurar Proxy Host en NPM).
+
+## 📝 Configuración Completa del Override
+
+El archivo `docker-compose.override.npm.yml.example` es muy simple:
+
+```yaml
+services:
+ heimdall:
+ networks:
+ - proxy
+
+networks:
+ proxy:
+ external: true
+```
+
+**¿Por qué tan simple?**
+
+Porque NPM no usa labels de Docker. Toda la configuración (dominio, SSL, headers) se hace desde la UI de NPM.
+
+## 🔒 Seguridad Adicional con Access Lists
+
+NPM permite restringir acceso por IP mediante Access Lists.
+
+### Crear Access List
+
+**Dashboard** → **Access Lists** → **Add Access List**
+
+**Details**:
+- **Name**: `Red Local`
+- **Satisfy Any**: ❌ (desmarcado = todas las reglas deben cumplirse)
+
+**Authorization**:
+- Añadir usuario/password (opcional)
+
+**Access**:
+- **Allow**: `192.168.1.0/24` (tu red local)
+- **Allow**: `10.0.0.0/8` (si usas VPN)
+- **Deny**: `0.0.0.0/0` (denegar todo lo demás)
+
+**Save**
+
+### Aplicar Access List a Heimdall
+
+**Proxy Hosts** → Editar `heimdall.tudominio.com`
+
+**Pestaña Details**:
+- **Access List**: Seleccionar `Red Local`
+
+**Save**
+
+Ahora solo IPs de tu red local pueden acceder a Heimdall.
+
+## 🔐 Protección con Usuario/Contraseña
+
+En la Access List, pestaña **Authorization**:
+
+**Añadir usuario**:
+- **Username**: `admin`
+- **Password**: `contraseña_segura`
+- **Add**
+
+**Save**
+
+Ahora NPM pedirá usuario/contraseña antes de acceder a Heimdall.
+
+## 🌐 Configuración Avanzada
+
+### Headers de Seguridad Personalizados
+
+**Proxy Hosts** → Editar `heimdall.tudominio.com` → **Pestaña Advanced**
+
+```nginx
+# Security Headers
+add_header X-Frame-Options "SAMEORIGIN" always;
+add_header X-Content-Type-Options "nosniff" always;
+add_header X-XSS-Protection "1; mode=block" always;
+add_header Referrer-Policy "strict-origin-when-cross-origin" always;
+
+# Opcional: Content Security Policy
+add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;
+```
+
+### Rate Limiting
+
+Limitar peticiones por IP:
+
+```nginx
+# Limitar a 10 peticiones por segundo
+limit_req_zone $binary_remote_addr zone=heimdall_limit:10m rate=10r/s;
+limit_req zone=heimdall_limit burst=20 nodelay;
+```
+
+## 🔄 Actualización
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+La configuración en NPM se mantiene automáticamente.
+
+## 🐛 Solución de Problemas
+
+### Error 502 Bad Gateway
+
+**Verificar que Heimdall está corriendo**:
+```bash
+docker ps | grep heimdall
+```
+
+**Verificar red proxy**:
+```bash
+docker network inspect proxy
+```
+
+Tanto NPM como Heimdall deben aparecer en la red.
+
+**Verificar en NPM**:
+- **Forward Hostname**: Debe ser `heimdall` (nombre del contenedor), no IP
+- **Forward Port**: Debe ser `80`
+- **Scheme**: Debe ser `http`
+
+### SSL no se genera
+
+**Verificar DNS**:
+```bash
+nslookup heimdall.tudominio.com
+```
+
+Debe resolver a la IP pública de tu servidor.
+
+**Verificar puertos**:
+- Puerto 80 (HTTP) debe estar accesible desde Internet (Let's Encrypt lo necesita)
+- Puerto 443 (HTTPS) debe estar accesible
+
+**Ver logs de NPM**:
+```bash
+docker logs npm
+```
+
+### Heimdall no aparece en la red proxy
+
+**Recrear stack**:
+```bash
+docker compose down
+docker compose up -d
+```
+
+**Verificar override**:
+```bash
+docker compose config
+```
+
+Debe mostrar la red `proxy` con `external: true`.
+
+## 📚 Siguiente Paso
+
+Ve a [[Configuración Inicial]] para configurar Heimdall.
+
+---
+
+**Repositorio**: [groales/heimdall](https://git.ictiberia.com/groales/heimdall)
+**NPM**: [groales/npm](https://git.ictiberia.com/groales/npm)
diff --git a/Personalización.md b/Personalización.md
new file mode 100644
index 0000000..96def1a
--- /dev/null
+++ b/Personalización.md
@@ -0,0 +1,539 @@
+# Personalización
+
+Guía completa para personalizar Heimdall: temas, fondos, iconos, búsqueda y configuraciones avanzadas.
+
+## 🎨 Temas
+
+Heimdall incluye varios temas predefinidos.
+
+### Cambiar Tema
+
+1. **Modo edición** (icono llave 🔧)
+2. **Settings** (engranaje arriba)
+3. **Theme**: Seleccionar tema
+4. **Save**
+
+### Temas Disponibles
+
+#### Classic (Claro)
+```
+Fondo: Blanco
+Tarjetas: Blancas con sombra
+Texto: Negro
+Ideal: Uso diurno
+```
+
+#### Dark (Oscuro)
+```
+Fondo: Gris oscuro (#1a1a1a)
+Tarjetas: Gris medio (#2d2d2d)
+Texto: Blanco
+Ideal: Uso nocturno, menos fatiga visual
+```
+
+#### Nord
+```
+Basado en paleta Nord
+Tonos azules fríos
+Aspecto: Moderno y minimalista
+```
+
+#### Gruvbox
+```
+Basado en esquema Gruvbox
+Tonos cálidos tierra
+Aspecto: Retro y acogedor
+```
+
+#### Custom (Personalizado)
+Permite definir colores propios mediante CSS.
+
+### Crear Tema Custom
+
+1. **Settings** → **Theme**: `Custom`
+2. **Custom CSS** (se habilita):
+
+```css
+/* Fondo principal */
+body {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+}
+
+/* Tarjetas de aplicaciones */
+.item {
+ background: rgba(255, 255, 255, 0.1);
+ backdrop-filter: blur(10px);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+/* Texto */
+.item-title {
+ color: #ffffff;
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
+}
+```
+
+3. **Save**
+
+### Ejemplos de CSS Custom
+
+#### Glassmorphism
+```css
+body {
+ background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
+}
+
+.item {
+ background: rgba(255, 255, 255, 0.15);
+ backdrop-filter: blur(15px);
+ border-radius: 15px;
+ border: 1px solid rgba(255, 255, 255, 0.3);
+ box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
+}
+```
+
+#### Matrix Theme
+```css
+body {
+ background: #000000;
+}
+
+.item {
+ background: #001a00;
+ border: 1px solid #00ff00;
+ box-shadow: 0 0 10px #00ff00;
+}
+
+.item-title {
+ color: #00ff00;
+ font-family: 'Courier New', monospace;
+}
+```
+
+#### Dracula Theme
+```css
+body {
+ background: #282a36;
+}
+
+.item {
+ background: #44475a;
+ border: 1px solid #6272a4;
+}
+
+.item-title {
+ color: #f8f8f2;
+}
+
+.item-description {
+ color: #6272a4;
+}
+```
+
+## 🖼️ Fondos
+
+### Tipos de Fondos
+
+#### 1. URL de Imagen
+
+**Settings** → **Background image**:
+```
+https://images.unsplash.com/photo-1579546929518-9e396f3cc809
+```
+
+#### 2. Subir Imagen Local
+
+1. **Settings** → **Background image**
+2. Click en **Upload**
+3. Seleccionar archivo (JPG, PNG)
+4. Max: 5MB recomendado
+
+#### 3. Unsplash Aleatoria
+
+URL dinámica que cambia cada vez:
+```
+https://source.unsplash.com/1920x1080/?landscape,nature
+```
+
+Categorías populares:
+```
+?landscape - Paisajes
+?space - Espacio
+?city,night - Ciudad nocturna
+?nature,forest - Bosque
+?mountain - Montañas
+?abstract - Abstracto
+?technology - Tecnología
+```
+
+#### 4. Gradientes CSS
+
+En **Custom CSS**:
+```css
+body {
+ background: linear-gradient(45deg, #FF6B6B, #4ECDC4);
+}
+```
+
+Gradientes populares:
+```css
+/* Sunset */
+background: linear-gradient(to right, #fa709a 0%, #fee140 100%);
+
+/* Ocean */
+background: linear-gradient(to right, #2E3192 0%, #1BFFFF 100%);
+
+/* Purple Dream */
+background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+
+/* Dark Ocean */
+background: linear-gradient(to top, #0f2027, #203a43, #2c5364);
+```
+
+#### 5. Animaciones
+
+Fondo animado con CSS:
+```css
+@keyframes gradient {
+ 0% { background-position: 0% 50%; }
+ 50% { background-position: 100% 50%; }
+ 100% { background-position: 0% 50%; }
+}
+
+body {
+ background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
+ background-size: 400% 400%;
+ animation: gradient 15s ease infinite;
+}
+```
+
+### Ajustes de Fondo
+
+```css
+/* Fondo fijo (no scroll) */
+body {
+ background-attachment: fixed;
+}
+
+/* Cubrir toda la pantalla */
+body {
+ background-size: cover;
+ background-position: center;
+}
+
+/* Oscurecer fondo */
+body::before {
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: -1;
+}
+```
+
+## 🔍 Búsqueda
+
+### Configurar Motor de Búsqueda
+
+**Settings** → **Search Settings**:
+
+#### Motores Predefinidos
+
+- **Google**: `https://www.google.com/search?q=`
+- **DuckDuckGo**: `https://duckduckgo.com/?q=`
+- **Bing**: `https://www.bing.com/search?q=`
+- **StartPage**: `https://www.startpage.com/do/search?q=`
+
+#### Motores Custom
+
+**Brave**:
+```
+https://search.brave.com/search?q=
+```
+
+**Ecosia**:
+```
+https://www.ecosia.org/search?q=
+```
+
+**Qwant**:
+```
+https://www.qwant.com/?q=
+```
+
+**SearX** (autohosteado):
+```
+https://searx.tudominio.com/search?q=
+```
+
+### Abrir en Nueva Pestaña
+
+```css
+/* Force search to open in new tab */
+.search-form {
+ target: _blank;
+}
+```
+
+## 🎯 Iconos
+
+### Opciones de Iconos
+
+#### 1. Iconos Predefinidos
+
+Heimdall incluye cientos de iconos. Al añadir app:
+
+**Icon**: Buscar nombre (ej: `portainer`, `plex`, `jellyfin`)
+
+#### 2. URL de Icono Custom
+
+**Icon**: Pegar URL directa:
+```
+https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/portainer.png
+```
+
+#### 3. Font Awesome
+
+```html
+
+```
+
+#### 4. Emoji
+
+Simplemente usa el emoji:
+```
+📊 Grafana
+🐳 Portainer
+🎬 Jellyfin
+```
+
+### Repositorios de Iconos
+
+#### Dashboard Icons (recomendado)
+```
+https://github.com/walkxcode/dashboard-icons
+```
+
+Usar vía jsDelivr:
+```
+https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/[nombre].png
+```
+
+#### Home Assistant Icons
+```
+https://github.com/home-assistant/brands/tree/master/core_integrations
+```
+
+#### Simple Icons
+```
+https://simpleicons.org/
+```
+
+### Crear Iconos Custom
+
+**Online**:
+1. [Favicon.io](https://favicon.io/) - Generador de favicons
+2. [Flaticon](https://www.flaticon.com/) - Miles de iconos
+3. Redimensionar a 128x128px o 256x256px
+
+**Local**:
+```bash
+# Convertir y redimensionar con ImageMagick
+convert icono.png -resize 128x128 icono-128.png
+```
+
+Subir a:
+- Repositorio Git
+- CDN (Cloudflare R2, AWS S3)
+- Nextcloud/servidor propio
+
+## 🎨 Colores de Aplicaciones
+
+### Colores por Marca
+
+```yaml
+Portainer: #13bef9
+Jellyfin: #00A4DC
+Plex: #E5A00D
+Sonarr: #35C5F4
+Radarr: #FFC230
+Lidarr: #159552
+qBittorrent: #3889CE
+Nextcloud: #0082C9
+Pi-hole: #96060C
+Proxmox: #E57000
+Grafana: #F46800
+Home Assistant: #41BDF5
+Vaultwarden: #175DDC
+```
+
+### Herramientas de Color
+
+**Obtener color de logo**:
+1. [ImageColorPicker.com](https://imagecolorpicker.com/)
+2. Subir logo
+3. Click en color principal
+4. Copiar HEX
+
+**Generar paletas**:
+- [Coolors.co](https://coolors.co/)
+- [Adobe Color](https://color.adobe.com/)
+
+## 📐 Layout y Organización
+
+### Tamaño de Tarjetas
+
+```css
+/* Tarjetas más grandes */
+.item {
+ width: 300px;
+ height: 200px;
+}
+
+/* Tarjetas más pequeñas (más apps visibles) */
+.item {
+ width: 150px;
+ height: 120px;
+}
+
+/* Tarjetas rectangulares */
+.item {
+ width: 350px;
+ height: 180px;
+}
+```
+
+### Grid Layout
+
+```css
+/* 3 columnas en desktop */
+.items {
+ grid-template-columns: repeat(3, 1fr);
+}
+
+/* 5 columnas en pantallas grandes */
+.items {
+ grid-template-columns: repeat(5, 1fr);
+}
+
+/* Auto-ajustar según espacio */
+.items {
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
+}
+```
+
+### Espaciado
+
+```css
+/* Más espacio entre tarjetas */
+.items {
+ gap: 30px;
+}
+
+/* Menos espacio */
+.items {
+ gap: 10px;
+}
+```
+
+## 🔤 Tipografía
+
+### Cambiar Fuente
+
+```css
+/* Google Fonts */
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+body, .item-title {
+ font-family: 'Roboto', sans-serif;
+}
+```
+
+Fuentes populares:
+```css
+/* Moderna */
+font-family: 'Inter', sans-serif;
+
+/* Mono espaciada (tech) */
+font-family: 'JetBrains Mono', monospace;
+
+/* Elegante */
+font-family: 'Playfair Display', serif;
+```
+
+### Tamaño de Texto
+
+```css
+/* Títulos más grandes */
+.item-title {
+ font-size: 20px;
+ font-weight: 700;
+}
+
+/* Descripción más pequeña */
+.item-description {
+ font-size: 12px;
+}
+```
+
+## 🌙 Modo Oscuro Automático
+
+Cambiar tema según hora del día:
+
+```javascript
+// Añadir en Custom CSS como