# Prompt 4: Instalable en el teléfono, como una app (sin tienda)

Requiere el `index.html` del prompt 3 funcionando. El resultado es que tu panel
se agrega a la pantalla de inicio del teléfono y abre a pantalla completa, con
el último dato visible aunque no haya señal. Sin tienda, sin cuenta, sin
actualizaciones forzadas: es tu página, con icono.

---

Convierte mi dashboard de salud (`index.html` + `fitness.json`) en una PWA
mínima e instalable. Reglas:

1. **`manifest.webmanifest`**: nombre, nombre corto, `display: standalone`,
   `start_url: ./`, color de fondo y de tema tomados del CSS del panel, e
   iconos de 192 y 512 px (genera los PNG con un script de Python usando
   Pillow: un anillo sobre fondo oscuro basta; nada de servicios externos).

2. **`sw.js` (service worker) lo más simple que funcione**:
   - Precachea `index.html`, el manifest y los iconos en el `install`.
   - Para `fitness.json`: red primero, caché como respaldo. Así el panel
     abre sin señal con el último dato que sí llegó, y el indicador de
     "Live Link" que ya tengo dice qué tan viejo es. Sin señal, la verdad
     la dice la fecha del dato, no un spinner.
   - Para todo lo demás: caché primero.
   - Versiona el caché con una constante (`v1`) y limpia versiones viejas en
     `activate`. Sin esa limpieza, cada cambio deja un caché zombi.
   - `self.skipWaiting()` en `install` y `clients.claim()` en `activate`:
     sin eso, la versión nueva se queda "esperando" y los cambios no se ven
     hasta cerrar todas las pestañas.

3. **En `index.html`**: enlaza el manifest; agrega lo que iOS pide aparte
   (`apple-mobile-web-app-capable`, `apple-mobile-web-app-status-bar-style`
   y `<link rel="apple-touch-icon" href="icon-192.png">` — sin ese link,
   Safari usa una captura deforme como icono); y registra el service worker
   con ruta relativa (`./sw.js`) solo si `navigator.serviceWorker` existe,
   sin romper nada si no existe.

4. **Instrucciones al final, en un comentario del HTML**: cómo se instala en
   Android (menú → "Agregar a pantalla de inicio") y en iPhone (Safari →
   Compartir → "Agregar a inicio"; Safari es el único camino en iOS), y el
   requisito real: los service workers piden **HTTPS o localhost**. Si el
   panel vive en tu máquina, `python -m http.server` en localhost basta; si
   vive en tu servidor, ya tienes HTTPS.

5. **Lo que NO quiero**: notificaciones push, sincronización en segundo
   plano, analytics, ni ninguna librería. Es una página con icono, no una
   plataforma.

Entrégame los tres archivos (manifest, sw.js, el script de iconos) y el diff
exacto de `index.html`. Al final dime cómo comprobar que quedó instalable
(qué mirar en las herramientas del navegador) y cómo desinstalarla.
