frontend/js/map.js:
- Reemplaza merge exacto por merge de proximidad (~50m) en loadChartFeatures
para capturar pares LIGHTS/BOYLAT con coordenadas no exactamente iguales
- Guard null-canvas en encStyle con fallback visible + console.warn
- Mejora JS de debug: log layer/aidType cuando usa fallback
backend/services/chart_manager.py:
- Expande extraccion de light_desc a category buoy+beacon+landmark
(antes solo BOYLAT/BOYCAR; BCNLAT/BCNWTW/LNDMRK perdian LITCHR silenciosamente)
- _recomputeHiddenCells: solo considera celdas 'dominantes' que esten
dentro de su propio rango de zoom. Sin esto, band-5 (Harbour, min=10)
ocultaba band-4 (Approach) incluso a zoom 9.x donde band-5 es invisible
-> resultado: ninguna carta mostraba.
- toggle-seamap: despues del toggle llama _recomputeHiddenCells +
src.changed() en requestAnimationFrame para que el estado de celdas
ENC se recalcule y nunca quede stale.
- fallback BUOY_GENERIC: reemplaza el circulo 14x14 (vieja simbologia
minuscula) por _encBuoyCanvas con boyshp=4 (pillar) para que cualquier
boya sin boyshp explicito igual reciba icono 3D correcto.