@@ -127,8 +127,9 @@ module App =
127127 PollCursor = 0L
128128 Profile = None
129129 FlushingOutbox = false
130− PollRetries = 0 },
131− [ CmdLoadState ]
130+ PollRetries = 0
131+ KeyboardHeight = 0. },
132+ [ CmdLoadState; CmdSubscribeKeyboard ]
132133
133134 // ── Update ──
134135
@@ -333,6 +334,8 @@ module App =
333334 []
334335 | StateLoaded(None, _, _) -> model, []
335336
337+ | KeyboardHeightChanged h -> { model with KeyboardHeight = h }, []
338+
336339 // ── mapCmd ──
337340
338341 let private log msg = eprintfn $"[skrepka] {msg}"
@@ -594,6 +597,10 @@ module App =
594597
595598 | CmdSaveProfile profile -> Cmd.ofEffect (fun _ -> Store.saveProfile profile |> Async.Start)
596599
600+ | CmdSubscribeKeyboard ->
601+ Cmd.ofEffect (fun dispatch ->
602+ Keyboard.heightChanged.Add(fun h -> dispatch (KeyboardHeightChanged h)))
603+
597604 // ── View ──
598605
599606 let private pageContent model =
@@ -606,7 +613,9 @@ module App =
606613 | AddContact(pk, nn) -> AnyView(viewAddContact model pk nn)
607614 | EditProfile(displayName, bio, photo) -> AnyView(viewEditProfile model displayName bio photo)
608615
609− Border(page).background (SolidColorBrush(Colors.White))
616+ Border(page)
617+ .background(SolidColorBrush(Colors.White))
618+ .padding(Avalonia.Thickness(0., 0., 0., model.KeyboardHeight))
610619
611620 let view model =
612621#if MOBILE