Cumulative per-tile spinner/animation waits in take_tiled_screenshot() could
exceed the Celery task_time_limit on dashboards with many tiles, causing the
worker to be SIGKILLed mid-capture (SoftTimeLimitExceeded) instead of the
report failing cleanly. Track elapsed wall time across the operation, cap
each tile's wait at what remains of a fixed budget, and raise before the
budget runs out so the report errors and notifies owners rather than
silently degrading or crashing.
Co-Authored-By: Claude <noreply@anthropic.com>