# Plan de estructura del frontend Plan derivado de la revisión de estructura del `web-player` (2026-09-24), hecha después de cerrar `frontend-audit-plan.md` (P0–P12). Cada parte es un PR independiente que deja `npm run check` y `npm run lint` en verde y no cambia el comportamiento visible. Antes de empezar una parte, mira el **Registro** del final. Leyenda de tamaño: **S** (< 1 h) · **M** (medio día) · **L** (1 día o más). ## Orden y dependencias ``` E1 Layout del grupo (app) └─ E2 Carpeta shell └─ E3 Frontera de ui/ ─ E6 Explorar en componentes E4 Ubicación de estados (independiente) E5 Capa de servidor (independiente) E7 Acento fuera del reproductor (después de E1) E9 Tests (antes o junto con E1 y E5) E8 Documentación (al final) ``` E1 → E2 → E3 van en orden porque tocan los mismos imports. E4 y E5 se pueden hacer en cualquier momento. Conviene hacer E9 primero, o al menos sus puntos 1 y 2, para que E1 y E5 muevan el código de sesión con tests que detecten si algo se rompe. --- ## E1 · Layout del grupo `(app)` (M) Problema: el grupo `(app)` no tiene `+layout`. El shell y las cargas de la app están en la raíz, que distingue la pantalla de login a mano (`isAuthPage` en `+layout.svelte`, `PUBLIC_PATHS` en `+layout.server.ts`). Por eso `/auth` también consulta `playbackConfig`, y `+error.svelte` se pinta fuera del shell (un 404 dentro de la app pierde la barra lateral y el reproductor). 1. **`routes/+layout.svelte`** se queda con lo global: fuentes, `theme.css`, `layout.css`, favicon, el `