# TASK-249 - Wire map images and Steam brand icon ## Summary This task connects the new local map images to current match and historical match detail using a shared frontend resolver, and wires the new Steam brand icon into the external profile buttons. No map or brand asset files were modified. ## Files Read First - `frontend/partida-actual.html` - `frontend/assets/js/partida-actual.js` - `frontend/historico-partida.html` - `frontend/assets/js/historico-partida.js` - `frontend/assets/css/historico.css` - `frontend/assets/img/maps/` - `frontend/assets/img/brands/` ## Problem The frontend was still using narrow map-name heuristics and did not know how to resolve the new map image naming pattern consistently across: - current match - historical match detail The Steam external profile button also had no brand icon wired even though the asset already existed locally. ## Decision Create one shared client-side resolver instead of duplicating ad hoc logic in each page. Rules: - normalize map ids, layer ids and pretty names aggressively - resolve to local assets using the `mapid-environment.webp` pattern when possible - keep a safe fallback image path - do not modify physical assets ## Asset Coverage Detected Detected local coverage in `frontend/assets/img/maps/`: - `carentan`: day, dusk, night, rain - `driel`: dawn, day, night - `elalamein`: day, dusk - `elsenbornridge`: dawn, day, dusk, night - `foy`: day, night - `hill400`: day, dusk, night - `hurtgenforest`: day, night - `junobeach`: dawn, day, night - `kharkov`: day, night - `kursk`: day, night - `mortain`: day, dusk, night, overcast - `omahabeach`: day, dusk - `purpleheartlane`: dawn, day, night, rain - `remagen`: day, night - `smolensk`: day, dusk, night - `stalingrad`: day, dusk, night, overcast - `stmariedumont`: day, night, rain - `stmereeglise`: dawn, day, night - `tobruk`: dawn, day, dusk - `utahbeach`: day, night - fallback assets: `unknown-day.webp`, `unknown.webp` ## Implementation ### Shared map resolver Added `frontend/assets/js/map-image-resolver.js` with: - canonical map aliases - environment aliases - compact normalization of layer ids and display names - deterministic fallback selection Examples resolved correctly: - `junobeachwarfare` -> `./assets/img/maps/junobeach-day.webp` - `Juno Beach Warfare` -> `./assets/img/maps/junobeach-day.webp` - `utahbeach` -> `./assets/img/maps/utahbeach-day.webp` - `Driel` -> `./assets/img/maps/driel-day.webp` - `st marie du mont warfare` -> `./assets/img/maps/stmariedumont-day.webp` ### Current match - `partida-actual.html` now loads the shared resolver before the page script. - `partida-actual.js` now resolves map assets from layer id, map id and pretty names instead of a short hardcoded map list. ### Historical match detail - `historico-partida.html` now loads the shared resolver. - `historico-partida.js` now resolves map images from `match_id`, `map.id`, `map.name` and `map.pretty_name`. - It keeps the existing fallback behavior if no match is found. ### Steam brand icon - Wired the Steam profile button to `./assets/img/brands/steam.png`. - Added `onerror="this.remove();"` to brand icons so a missing file does not leave a broken image. ## Validation Executed: - `node --check frontend/assets/js/map-image-resolver.js` - `node --check frontend/assets/js/partida-actual.js` - `node --check frontend/assets/js/historico-partida.js` Static/runtime validation performed: - confirmed `historico-partida.html` does not load `current-match-weapon-icons.js` - confirmed `partida-actual.html` still loads `current-match-weapon-icons.js` - confirmed resolver maps `junobeachwarfare` to `junobeach-day.webp` - confirmed resolver maps `utahbeach`, `driel` and `st marie du mont warfare` to existing local assets - confirmed Steam button now points to the brand icon asset when present ## Notes - No backend changes were required for this task. - No asset files were moved, renamed or modified. - No weapon or clan asset path was touched.