Polls the Flask backend on a fixed cadence and surfaces a reactive
snapshot of its reachability + the offline banner's user-controlled
dismissal state.
Lives as a hook (not inline in <OfflineBanner>) so the App shell
can branch its CSS grid template on the same offline boolean —
the banner steals a 28-px row at the top of the grid and the rest
of the layout shifts down by that amount.
Polls the Flask backend on a fixed cadence and surfaces a reactive snapshot of its reachability + the offline banner's user-controlled dismissal state.
Lives as a hook (not inline in
<OfflineBanner>) so the App shell can branch its CSS grid template on the sameofflineboolean — the banner steals a 28-px row at the top of the grid and the rest of the layout shifts down by that amount.