ReadonlyattemptsFailure count, capped at 10. Resets on reconnect or manual retry.
ReadonlydismissHide the banner until the backend recovers + fails again.
ReadonlydismissedTrue once the user has dismissed the active outage.
ReadonlyofflineTrue while the backend is unreachable.
ReadonlyretryFire an immediate ping; resets the attempt counter to 1.
Reactive snapshot of the Flask backend's reachability + the banner's user-controlled visibility state.