@@ -135,8 +135,10 @@ module App =
135135 Profile = None
136136 FlushingOutbox = false
137137 PollRetries = 0
138− KeyboardHeight = 0. },
139− [ CmdLoadState; CmdSubscribeKeyboard ]
138+ KeyboardHeight = 0.
139+ SafeAreaTop = 0.
140+ SafeAreaBottom = 0. },
141+ [ CmdLoadState; CmdSubscribeKeyboard; CmdSubscribeSafeArea ]
140142
141143 // ── Update ──
142144
@@ -367,6 +369,7 @@ module App =
367369 | Search _ -> model, []
368370
369371 | KeyboardHeightChanged h -> { model with KeyboardHeight = h }, []
372+ | SafeAreaChanged(top, bottom) -> { model with SafeAreaTop = top; SafeAreaBottom = bottom }, []
370373
371374 | DoScanQR -> model, [ CmdScanQR ]
372375
@@ -698,6 +701,9 @@ module App =
698701 | CmdSubscribeKeyboard ->
699702 Cmd.ofEffect (fun dispatch -> Keyboard.heightChanged.Add(fun h -> dispatch (KeyboardHeightChanged h)))
700703
704+ | CmdSubscribeSafeArea ->
705+ Cmd.ofEffect (fun dispatch -> SafeArea.insetsChanged.Add(fun (t, b) -> dispatch (SafeAreaChanged(t, b))))
706+
701707 // ── View ──
702708
703709 let private pageContent model =
@@ -712,7 +718,7 @@ module App =
712718
713719 Border(page)
714720 .background(SolidColorBrush(Colors.White))
715− .padding (Avalonia.Thickness(0., 0., 0., model.KeyboardHeight))
721+ .padding (Avalonia.Thickness(0., model.SafeAreaTop, 0., model.KeyboardHeight))
716722
717723 let view model =
718724#if MOBILE