diff --git a/app/public/app.js b/app/public/app.js
index b667fbf..0e242c0 100644
--- a/app/public/app.js
+++ b/app/public/app.js
@@ -125,13 +125,13 @@ async function flyToHurricane(storm) {
const map = mapsOverview.map;
if (!map) return;
+ if (!map.loaded()) await new Promise(resolve => map.once('load', resolve));
- await renderHurricaneOverlay(map);
map.flyTo({ center: [lon, lat], zoom: 4, duration: 900 });
+ const cat = (storm.classification || '').toUpperCase();
+ const label = cat === 'HU' ? 'Hurricane' : cat === 'TS' ? 'Tropical Storm' : 'Tropical Depression';
setTimeout(() => {
- const cat = (storm.classification || '').toUpperCase();
- const label = cat === 'HU' ? 'Hurricane' : cat === 'TS' ? 'Tropical Storm' : 'Tropical Depression';
new maplibregl.Popup({ closeButton: true, maxWidth: '240px' })
.setLngLat([lon, lat])
.setHTML(`${storm.name || 'Storm'}
${label}
Winds: ${storm.intensity || '--'} mph${storm.movement ? '
Moving ' + storm.movement : ''}`)
@@ -173,7 +173,6 @@ async function flyToHurricane(storm) {
'circle-stroke-width': 2, 'circle-stroke-color': '#fff',
} });
- // Fit map to show full track
const allCoords = pts.features.map(f => f.geometry.coordinates);
if (allCoords.length > 1) {
const lons = allCoords.map(c => c[0]);
@@ -199,6 +198,9 @@ async function flyToHurricane(storm) {
}
} catch {}
}
+
+ // Render overlay last so storm circles sit on top of the track layers
+ await renderHurricaneOverlay(map);
}
function renderPrecipChart(h, startIdx) {