banner: top-floating; fix offline-trigger cache; onboarding prompt timing

- Banner floats at the very top (over the nav/title area), never pushing the
  content below and staying clear of the list/pill.
- Offline banner now fires on refresh in airplane mode / no data: the mirror
  live chain bypassed the HTTP cache (+10s timeout) so an offline fetch really
  fails instead of silently re-serving a cached pointer+dump as a 'success'
  (which kept dataStatus .live and hid the banner).
- Onboarding permissions fire at the Continue/Allow tap BEFORE advancing, so
  the system prompt appears after the page is read and never covers the next
  page's animation (grant auto-advances).
This commit is contained in:
FuelBoard Contributor
2026-08-19 10:17:24 +01:00
parent 8936643e0e
commit cfd435d12a
4 changed files with 37 additions and 17 deletions
+5 -5
View File
@@ -486,12 +486,12 @@ struct ContentView: View {
ZStack(alignment: .top) {
rootTabView
if let banner = activeBanner {
// Floating just below the nav bar: overlays content (never
// pushes it) and stays clear of the iOS 26 nav/toolbar
// Liquid Glass chrome so a tap on the banner can't also
// trigger the control behind it.
// Floating near the top of the screen, over the nav area
// overlays content (never pushes it) and sits above the
// main content so it doesn't cover or block the list/pill
// beneath it.
floatingBanner(banner)
.padding(.top, geo.safeAreaInsets.top + 52)
.padding(.top, geo.safeAreaInsets.top + 10)
.transition(.asymmetric(
insertion: .move(edge: .top).combined(with: .opacity),
// Slide up + fade on dismiss/timeout (one style for all).