# Arsenal Nexora V2 — Fase 1

Versión del plugin: 1.1.0

## Objetivo

Escalar el catálogo sin convertir Arsenal en una tienda pesada ni alterar el núcleo transaccional de entrega.

## Cambios incluidos

- Un único token de intención por carga del catálogo, en lugar de un token por cada card.
- Token ligado al reino activo, con expiración de 15 minutos y consumo único.
- Límite de tokens de sesión reducido a 12 porque ya no crece con el número de productos.
- Filtros por categoría y búsqueda local con JavaScript vanilla, cargado solo en `/shop/`.
- Confirmación de compra antes del POST con reino, valor, saldo y saldo posterior.
- Bloqueo visual de compra cuando el saldo conocido es insuficiente; backend sigue siendo la autoridad final.
- Cards reorganizadas para exponer categoría, disponibilidad, valor y destino de entrega.
- Estado de Arsenal y reino más visibles en cabecera.
- Inferencia de dimensiones del baúl endurecida: solo se acepta una imagen como fallback si ancho y alto son múltiplos exactos de 32. No se redondean dimensiones ambiguas.
- `img/itemshop/` añadido a `writable.paths.json`.
- CSS/JS de Arsenal versionados como `v=2` para invalidación de caché.

## Rendimiento

No se añadieron frameworks, consultas SQL adicionales por card ni peticiones de red externas. El filtrado opera sobre el DOM ya renderizado y usa un debounce de 90 ms para búsqueda.

## Compatibilidad y seguridad

La función `purchase()` y su transacción SQL no fueron modificadas. Las validaciones de saldo, stock, cuenta offline, límite por cuenta, serial, espacio de baúl y auditoría continúan ejecutándose en backend.
