# Experiencias y escenas · versión 05

## Archivos y responsabilidades

- `js/experiencias.js`: recorridos, favoritos, archivos JSON, enlaces y composición PNG.
- `css/experiencias.css`: aspecto de los recorridos y la biblioteca.
- `tests/experiencias.cjs`: pruebas de datos, almacenamiento y carreras entre acciones asíncronas.
- El adaptador `SolarStateBridge` del punto de entrada controla la fecha, el observador y las cámaras. Valida todo el estado antes de aplicarlo.

El módulo se inicializa con `new SolarExperiences({tourContainer, libraryContainer}, adapter)`. El adaptador expone `snapshot()`, `restore(scene, {pause})`, `applyStep(patch)` y `capture()`.

## Recorridos

Los tres recorridos tienen cuatro pasos cada uno. No ejecutan temporizadores ni adelantan el tiempo por sí mismos. Al entrar se conserva el estado anterior; «Salir y volver» restaura también el modo del reloj. «Seguir explorando» conserva el último paso. Cada paso usa un instante histórico y Granada como observador, indicado en la interfaz. Una cola de operaciones asegura que salir durante la carga de una escena termine restaurando la escena anterior, sin que una carga pendiente la sustituya después.

Las fechas de las cuatro fases se obtuvieron con Astronomy Engine, la misma biblioteca local que utiliza el proyecto: 29 de enero, 5 de febrero, 12 de febrero y 20 de febrero de 2025. Son instantes de fase, no promesas de visibilidad local. Por eso el texto diferencia fase y horizonte.

El eclipse del 14 de marzo de 2025 emplea cuatro instantes de ejemplo: 04:00, 05:40, 06:58:42 y 08:30 UTC. El máximo procede del motor local (`SearchLunarEclipse`). No se presenta como una tabla oficial de contactos. La fecha y la naturaleza total se contrastaron con el [catálogo NASA/GSFC de eclipses lunares 2021–2030](https://eclipse.gsfc.nasa.gov/LEdecade/LEdecade2021.html). Ese catálogo ofrece su columna del máximo en tiempo dinámico; no debe copiarse como si fuera UTC. El color rojizo es ilustrativo y la visibilidad de Granada depende del horizonte.

La explicación sobre las sombras cerca del terminador está apoyada por [NASA: cráteres y sombras en el terminador lunar](https://apod.nasa.gov/apod/ap180522.html). Solo se ha utilizado la explicación científica; no se ha copiado su fotografía ni otros recursos con derechos específicos.

## Favoritos y archivos

Los favoritos guardan pequeños estados JSON, sin copiar las texturas. Límite: 20 escenas. Los nombres se muestran como texto, nunca como HTML. `localStorage` se intenta leer y escribir dentro de bloques protegidos: si no está disponible en una apertura `file://` o se llena, la biblioteca permanece en memoria y la interfaz explica que se debe exportar JSON antes de cerrar. El almacenamiento pertenece al navegador y al origen: mover la carpeta o abrirla con otro navegador puede mostrar una biblioteca distinta. JSON sirve de copia portable.

Formato: `{format: 'sol-tierra-luna', version: 1, title, scene}`. Límite por archivo: 64 KB; límite del estado: 24.000 caracteres. Se rechazan estructuras demasiado profundas, números no finitos, versiones desconocidas y claves `__proto__`, `constructor` o `prototype`. La validación física y el listado de campos aceptados corresponden al adaptador.

Importar abre la escena en pausa. No se guarda como favorita automáticamente: el usuario decide si añade esa escena con «Guardar escena». Los enlaces de escena también se abren en pausa. Los enlaces solo se ofrecen desde HTTPS; una dirección `file://` o un servidor local no constituye una dirección compartible. Mientras se trabaja localmente, se puede entregar el JSON junto con otra copia de la simulación.

El enlace usa el fragmento `#escena=` con JSON codificado en URL y un máximo de 12.000 caracteres. El fragmento contiene el lugar, la fecha, la cámara y las capas de la escena. No se carga ningún archivo remoto al importar un estado. El botón de copiar usa el portapapeles si está disponible y, si no, ofrece el enlace en un campo seleccionable.

## Imagen descargable y créditos

«Descargar imagen» solicita al adaptador una copia inmediata de cada lienzo visible. Compone hasta tres paneles, conserva sus proporciones y añade fecha, lugar, tipo de vista y todos los créditos facilitados por el proyecto. Exporta un PNG mediante un enlace de descarga local. No publica la captura ni la envía a servicios externos.

Las fuentes gráficas siguen sus licencias originales. Los créditos de la captura deben incluir NASA/GSFC/SVS para la cartografía lunar y los recursos NASA utilizados, HYG 4.1 / David Nash / CC BY-SA 4.0 para estrellas y d3-celestial / Olaf Frohn / BSD-3-Clause para los trazos de constelaciones cuando corresponda; los detalles permanecen en las referencias de assets. Este módulo no descarga imágenes nuevas ni añade dependencias o bibliotecas.
