From 3df8b61e52836e08f2af340d93272024b912ee30 Mon Sep 17 00:00:00 2001 From: Robin Kutesa Date: Fri, 22 May 2026 03:35:38 +0300 Subject: [PATCH] fix(backup): hard-lock status area to 66pt on all pages for consistent stat alignment Replace opacity(0) approach with a ZStack(.frame(height:66)) container. ZStack is empty on pages 1/2 but still allocates exactly 66pt, so the page indicator and stats strip sit at the same absolute Y on every page. Co-Authored-By: Kutesir Co-Authored-By: Sentry --- Features/Backup/BackupView.swift | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Features/Backup/BackupView.swift b/Features/Backup/BackupView.swift index eb3dc81..8246264 100644 --- a/Features/Backup/BackupView.swift +++ b/Features/Backup/BackupView.swift @@ -681,15 +681,20 @@ struct BackupView: View { } .padding(.bottom, 4) - cascadingArrows - .frame(height: 16) - .padding(.bottom, 8) - .opacity(ringPage == 0 ? 1 : 0) - - circleStatusRow - .padding(.horizontal, AppTheme.hPad) - .padding(.bottom, 10) - .opacity(ringPage == 0 ? 1 : 0) + // Fixed-height container — guarantees identical Y for all pages + ZStack(alignment: .top) { + if ringPage == 0 { + VStack(spacing: 0) { + cascadingArrows + .frame(height: 16) + .padding(.bottom, 8) + circleStatusRow + .padding(.horizontal, AppTheme.hPad) + .padding(.bottom, 10) + } + } + } + .frame(height: 66) } // Pull zone floats above the ring on all pages .overlay(alignment: .top) {