diff --git a/apps/web/src/App.vue b/apps/web/src/App.vue index 60e02dc..7e2f28f 100644 --- a/apps/web/src/App.vue +++ b/apps/web/src/App.vue @@ -182,12 +182,16 @@ main.shellLogin { display: none; } .mobile-tabbar { - position: sticky; - top: 49px; - z-index: 9; + position: fixed; + left: 0; + right: 0; + bottom: 0; + z-index: 12; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; + padding-bottom: env(safe-area-inset-bottom); + border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: rgba(7, 9, 15, 0.94); backdrop-filter: blur(6px); @@ -215,7 +219,10 @@ main.shellLogin { box-shadow: inset 0 -1px 0 var(--neon-cyan), var(--shadow-cyan); } main { - padding: 16px; + padding: 16px 16px calc(76px + env(safe-area-inset-bottom)); + } + .footbar { + padding-bottom: calc(76px + env(safe-area-inset-bottom)); } } diff --git a/apps/web/src/components/ChatDrawer.vue b/apps/web/src/components/ChatDrawer.vue index fb42fcb..92f1564 100644 --- a/apps/web/src/components/ChatDrawer.vue +++ b/apps/web/src/components/ChatDrawer.vue @@ -103,6 +103,9 @@ async function sendContent(content: string): Promise { await loadMissingProfiles(); await scrollBottom(); } catch (e) { + if (e instanceof Error && /connect|signer|auth|missing remote|aborted/i.test(e.message)) { + await auth.restoreSavedSigner(); + } error.value = e instanceof Error ? e.message : "Could not send"; } } @@ -144,8 +147,8 @@ async function scrollBottom(): Promise { Logged in, but the signer is not active in this tab. Reading works; sending needs a restored signer. -
{{ error }}
@@ -171,18 +174,31 @@ async function scrollBottom(): Promise { +
+
+
+
+
stickers
+ {{ CHAT_STICKERS.length }} signed insults +
+ +
+
+ +
+
+
+
-
- -