iRaffe Gestor de Contrasenas — Registro de cambios
====================================================

## 1.3.6 — 2026-09-18
- Reemplazado el modal nativo de insercion de imagenes de Summernote por un selector directo de archivos desde el boton Imagen del WYSIWYG.
- Eliminado el overlay gris bloqueante que podia quedar activo al abrir/cancelar el dialogo nativo de imagenes.
- Las imagenes seleccionadas se suben al almacen cifrado existente y se insertan directamente en el editor, sin URL ni ventana intermedia.
- El selector de imagenes acepta multiples archivos y limita la seleccion a tipos image/*; tambien valida el MIME antes de subir.
- Depuracion ampliada para imagenes WYSIWYG con eventos IMAGE_PICKER_OPEN, IMAGE_SELECTED, UPLOAD_START, UPLOAD_OK, UPLOAD_ERROR e IMAGE_INSERTED.
- Se mantiene intacto el almacenamiento de produccion: config.php, gestor_key.php y data/ no forman parte del paquete de actualizacion.

## 1.3.5
- CORREGIDO: `aHtml is not defined` ya no interrumpe la apertura de fichas ni
  el editor de registros con contenido enriquecido.
- CORREGIDO: la apertura de tarjetas en modo Ver queda instrumentada y validada;
  un clic sobre una zona libre de la tarjeta abre la ficha, mientras los botones
  Ver, Editar y Eliminar conservan sus acciones independientes.
- DEBUG AMPLIADO: captura cronologica de clic, doble clic, menu contextual,
  submit, change, input, teclado, foco, copiar/cortar/pegar, drag/drop,
  seleccion, scroll, resize, visibilidad, fullscreen, conectividad, navegacion,
  consola, errores JavaScript, promesas rechazadas, requests y acciones API.
- DEBUG SEMANTICO: registra apertura/cierre de fichas y editores, altas,
  guardados, eliminaciones, filtros, busqueda, ordenamiento, configuracion y
  actualizaciones, incluyendo categoria e ID cuando corresponde.
- DEBUG SERVIDOR: cada POST funcional deja traza de la accion recibida y el
  backend mantiene los eventos PHP, DATA y CRUD ya existentes.
- SEGURIDAD DEL LOG: no se registran valores de contrasenas, claves, cookies,
  sesiones, CSRF, tokens ni Authorization. En inputs se registra la accion y
  longitud, no el contenido escrito.
- La retencion del log aumenta a 5000 eventos para reconstruir sesiones de
  diagnostico mas largas. Copiar/descargar conserva el historial disponible.
- Se mantiene el sistema de actualizaciones desde repositorio y el paquete
  sigue excluyendo `config.php`, `gestor_key.php` y `data/`.
- Actualizado el registro de cambios de la version.

## 1.3.4
- CORREGIDO: `aTexto is not defined` ya no interrumpe el renderizado de las
  fichas. Los registros cifrados que el servidor entrega correctamente vuelven
  a mostrarse en pantalla en lugar de caer en el estado "Datos no disponibles".
- NUEVO: Modo depuracion activable desde Configuracion > Sistema, apagado por
  defecto y persistente en el servidor.
- NUEVO: panel flotante de depuracion visible cuando el modo esta encendido,
  con opciones para minimizar, ampliar, copiar todo, descargar el JSON y
  limpiar el registro.
- NUEVO: captura de solicitudes/respuestas HTTP, acciones API, carga y conteo
  de datos, errores JavaScript, promesas rechazadas, lecturas/escrituras del
  almacen, operaciones CRUD y errores PHP controlados.
- SEGURIDAD: contrasenas, CSRF, tokens, cookies, cabeceras Authorization,
  sesiones y claves se enmascaran antes de escribir el log.
- El log se guarda en `data/debug/debug_log.json`, con rotacion automatica de
  hasta 1000 eventos. La carpeta crea proteccion HTTP y el log solo se descarga
  desde una sesion autenticada.
- Se mantiene el flujo de actualizacion desde repositorio y la proteccion de
  `config.php`, `gestor_key.php` y `data/`.
- Actualizado el registro de cambios de la version.

## 1.3.3
- CORREGIDO: el boton "Agregar nuevo registro" vuelve a habilitarse
  automaticamente despues de una carga valida. Un fallo previo de lectura ya
  no puede dejar el boton bloqueado con el cursor de prohibido.
- RECUPERACION SEGURA: al actualizar especificamente de 1.3.2 a 1.3.3, si el
  almacen actual aparece con 0 registros pero existe una copia de datos valida
  con registros, la aplicacion recupera automaticamente la copia valida mas
  reciente. Antes crea otra copia del estado actual.
- La recuperacion anterior es de una sola ejecucion, solo se activa cuando
  existe la huella real del actualizador 1.3.2 -> 1.3.3 y nunca restaura ni
  reemplaza config.php ni gestor_key.php.
- Tras recuperar, se verifica en disco que el archivo cifrado contiene la misma
  cantidad de registros antes de darlo por valido.
- Se mantiene el flujo normal de actualizaciones desde el repositorio y la
  proteccion de config.php, gestor_key.php y data/.
- Actualizado el registro de cambios de la version.

## 1.3.2
- CORREGIDO: un fallo al leer o descifrar los datos ya no se interpreta
  como una base vacia. La aplicacion muestra el error y bloquea las
  escrituras para impedir que un archivo valido sea sobrescrito.
- El guardado valida ahora el resultado real de la escritura atomica;
  la API ya no responde ok si el archivo no pudo persistirse.
- Compatibilidad con instalaciones sin la extension PHP mbstring.
- La clave externa y APP_KEY se validan como alternativas, conservando
  compatibilidad con instalaciones que usan solo gestor_key.php.
- CORREGIDO: al buscar, Notas sigue siendo pulsable aunque tenga 0
  coincidencias; al seleccionarla se muestran unicamente sus resultados.
- El selector para crear registros incluye Nota y la accion principal
  pasa a llamarse "Agregar nuevo registro".
- Los archivos de una Nota se adjuntan desde un boton pequeno dentro de
  la barra del editor WYSIWYG. Se elimina el bloque independiente de
  adjuntos del formulario, manteniendo los adjuntos existentes.
- La restauracion de copias coloca gestor_key.php externo en su ubicacion
  correcta, un nivel por encima de la aplicacion.
- El paquete de actualizacion sigue excluyendo config.php, gestor_key.php
  y data/ para proteger configuracion, claves y registros de produccion.

## 1.3.1
- CORREGIDO: el formulario de nueva nota no guardaba. El dialogo de
  imagen de Summernote inserta su propio campo de archivo dentro del
  formulario y eso rompia el guardado, sin aviso en pantalla.
- El campo Notas de cPanel, Cuentas, Correos y Clientes tambien usa
  ahora el editor con formato, no solo la categoria Notas.
- Si falta el titulo al guardar, se indica en el formulario en lugar
  de no hacer nada.

## 1.3.0
- El editor de las notas pasa a ser Summernote 0.8.20, el mismo que
  usa Tracking Pedidos: estilos, fuente, tamano, color de texto y de
  fondo, alineacion, listas, tablas, enlaces, linea, imagen, vista de
  codigo y pantalla completa.
- La libreria viaja dentro del paquete (Summernote y jQuery en
  assets/lib). No se carga nada desde internet: la aplicacion
  funciona igual sin conexion y ningun tercero ve la instalacion.
- Las imagenes que se insertan en una nota no se incrustan en la
  nota: se guardan cifradas en el almacen de adjuntos y se enlazan.
  Asi el archivo de datos no crece ni se ralentiza la aplicacion.
- El filtro del servidor acepta ahora lo que produce Summernote
  (color, tamano, alineacion, tablas, imagenes propias) validando
  cada propiedad CSS una por una.

## 1.2.0
- Las notas tienen editor con formato: negrita, cursiva, subrayado,
  tachado, listas, titulos, citas y enlaces.
- Las notas admiten archivos adjuntos, arrastrandolos al recuadro o
  eligiendolos. Hasta 10 MB por archivo.
- Los adjuntos se guardan cifrados con la misma clave que el resto
  de los datos y solo se descargan con la sesion iniciada. No se
  aceptan archivos ejecutables en el servidor.
- Al borrar una nota se borran tambien sus adjuntos.
- Las notas antiguas en texto plano se siguen viendo y editando con
  normalidad.

## 1.1.2
- Las fichas se abren pulsando sobre la tarjeta, no solo desde el
  boton de editar. Se abren en modo lectura, con todos los campos,
  copia rapida y contrasenas ocultas hasta pulsar el ojo.
- Cada tarjeta tiene ahora tres botones: ver, editar y eliminar.
- Eliminar pide confirmacion dos veces y la segunda indica el
  nombre exacto del registro que se va a borrar.

## 1.1.1
- Nueva categoria Notas, para seriales, licencias y apuntes
  sueltos que no encajan en las demas fichas.
- Al buscar, cada boton de categoria muestra cuantas coincidencias
  tiene, incluido 0, y al pulsarlo se ven unicamente los resultados
  de esa categoria. El boton Todos indica el total encontrado, no el
  total de registros.
- Nueva pestana Apariencia en Configuracion: agranda o reduce toda
  la tipografia, del 80% al 160%. Se guarda en el navegador.
- Al aplicar una actualizacion la aplicacion se recarga sola y por
  completo, sin necesidad de pulsar F5 ni Ctrl+F5.
- El registro de cambios viaja dentro del propio paquete y se
  consulta desde Configuracion.
- La aplicacion pasa a llamarse iRaffe Gestor de Contrasenas.
- La sesion ya no caduca por inactividad: permanece abierta hasta
  que se pulsa Salir.
- AVISO: al aplicar esta actualizacion hay que iniciar sesion una
  vez mas. Las sesiones pasan a guardarse dentro de la aplicacion,
  asi que la anterior deja de ser valida. Solo ocurre esta vez.

## 1.0.1
- El boton de configuracion pierde el recuadro y ahora gira
  unicamente la rueda dentada al pasar el cursor.
- Copias de seguridad de los datos y la configuracion: se crean
  solas antes de cada actualizacion y de cada restauracion, se
  pueden descargar y se pueden restaurar.
- El instalador ignora e informa si un paquete intenta sobreescribir
  config.php, gestor_key.php o la carpeta data/.

## 1.0.0
- Primera version con sistema de actualizaciones.
- Rueda dentada con la ventana de Configuracion.
- Actualizacion desde repositorio remoto, con verificacion sha256,
  copia de seguridad previa y restauracion de versiones anteriores.
- Las contrasenas se guardan tal cual se escriben, sin alterar
  ningun caracter especial.
- Los datos se guardan cifrados en un archivo protegido frente a
  accesos directos por HTTP.
