# AGENTS.md — Convenciones del repositorio de la web

Guía para agentes de IA (y humanos) que trabajen en este repositorio: ruidovisualab.com, la web del colectivo Ruido Visual Lab.

## Qué es esto

Sitio 100% estático (HTML + CSS + JS puros), sin dependencias de construcción ni frameworks. Funciona offline. El contenido visible se lee de `data/*.json` y se renderiza con `script_optimizado.js`.

## Reglas de oro

1. **El contenido va en `data/*.json`, no en el HTML.** Títulos, descripciones, eventos, herramientas, canales de directo, medios y entradas del blog se editan en JSON. El HTML solo define la estructura y los contenedores con `id`.
2. **Sin dependencias externas.** No añadas CDNs, ni librerías, ni builds. Todo debe funcionar copiando los archivos a un servidor estático (la única excepción es el `@import` de Share Tech Mono, preexistente).
3. **No toques `tools/Ruido_Visual_Web-VJ_Project/`.** Es el proyecto VJ, se despliega y mantiene en su propio repositorio (`blinge/Ruido_Visual_Web-VJ_Project`) y está excluido con `.gitignore`. Aquí solo se enlaza (ver `index.html` y el tour).
4. **Mantén los `id` de sección estables** (`#portada`, `#clips`, `#loops`, `#musica`, `#tools`, `#eventos`, `#directos`, `#live-coding`, `#contacto`): son enlaces profundos públicos.
5. **La fuente Hacked solo cubre latín básico** (ver `unicode-range` en `styles_optimizado.css`). Los acentos y caracteres especiales se renderizan con las fuentes del sistema de la pila `--fuente`. Escribe el texto en español con sus acentos normales; no los retires.
6. **Escapa cualquier texto que venga de JSON** con `esc()` antes de insertarlo en el HTML (XSS).
7. **Idioma:** código y contenido en español. `id` y clases en kebab-case; funciones en camelCase.
8. **Licencia GPLv3.** No añadas código con licencias incompatibles.
9. **Documenta cada iteración.** En cada commit relevante, añade o actualiza la entrada de la sesión en `CHANGELOG.md` (fecha, horas y resumen de cambios).

## Estructura

```
index.html              Portada y secciones (router por hash con pushState)
script_optimizado.js    Router + render desde data/*.json
styles_optimizado.css   Estilos compartidos (también los usa el blog)
data/*.json             Contenido (herramientas, eventos, directos, media, recursos, blog, tour)
CHANGELOG.md            Registro de sesiones de trabajo (por iteración)
blog/                   Blog estático (VJlog)
tour/                   Tour didáctico y de auditoría del VJ Project
tools/                  Aplicaciones autocontenidas (GPLv3)
videos/, fonts/, images/  Contenido no versionado (se copia en el despliegue)
```

## Cómo añadir contenido (resumen)

- **Herramienta nueva** → entrada en `data/herramientas.json` (`"destacada": true` para el bloque principal del grid).
- **Evento** → entrada en `data/eventos.json` (fecha ISO; con hora usa `2026-09-12T21:00:00`). La portada muestra el próximo evento futuro automáticamente.
- **Directo** → canal en `data/directos.json`. Ver el campo `_documentacion` del propio archivo: estados, `url` (HLS `.m3u8` autogestionado) o `url_embed` (iframe PeerTube). **No se usan plataformas privativas (nada de Twitch/YouTube embeds)**. La reproducción se activa con `"activo": true` y un canal `en-emision`.
- **Blog** → entrada estática en `blog/` + referencia en `data/blog.json`.

## Tour del Código (mantenimiento)

El tour (`tour/`) es un subproducto del desarrollo del VJ Project, no un documento paralelo:

- `data/tour.json` es la **capa para agentes**: metadatos de los módulos (propósito, patrón, dependencias, API, guía de contribución). Cuando el VJ Project cambie de versión grande, actualiza este JSON y el tour se regenera solo.
- El código fuente del VJ Project lleva comentarios estructurados (`@tour:`, `@audit:`) que alimentan las fichas. En este repo no editamos ese código: actualizamos `data/tour.json` para reflejarlo.
- No inventes rutas de documentación del VJ Project (`documentation.md`, `user_manual.md`): verifícalas antes de enlazarlas.

## Despliegue

Se copian los archivos a un servidor estático. Los contenidos de `videos/`, `fonts/` e `images/` no están versionados: hay que copiarlos aparte en el despliegue (el vídeo de portada vive en `videos/video_portada.mp4`).
