A tile that no offline source holds (SD folders, PMTiles, the tile cache) while
Wi-Fi is down used to leave the dark placeholder, so zooming in one level past
a pack showed nothing at all. renderMapTiles now cuts the covering square out of
the parent, grandparent or great-grandparent (z-1..z-3) and scales it 2x/4x/8x
into the slot. The ancestor is decoded into the slot's own pool buffer and
blown up from a crop copy of at most 32 KB, so the pool cap and the 2 MB V4's
PSRAM budget are unchanged. Absent ancestors go in a 16-entry miss ring (PSRAM)
cleared on every source change and finished download, so pans do not re-probe
the card. Online the map still waits for the real tile; a stand-in is dropped
as soon as Wi-Fi is back. The +/- buttons step up to three levels past the
deepest level on storage (one at a time on the way back out). App map views
(wada.map) get the same stand-ins. Pure geometry + scaling + ring in
MapOverzoom.h with test/test_map_overzoom.cpp. CAP_MAP_OVERZOOM (default 1).
V4: +1368 B flash, +8 B RAM.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>