feat(mobile): Wave 4 — RegisterPage responsive + TransferIndicator on settings + MessageInput sheets

- RegisterPage: scroll envelope, iOS-zoom-safe inputs, ≥44px tap targets, mobile-friendly invite chip + swatch row
- TransferIndicator: mounted via MobileScreenHeader.rightActions across every settings/instance screen and inline in MobileChatScreen; touch-close listener; viewport-safe panel width
- MessageInput popovers (emoji/GIF/mention) now route through new InputPopover wrapper — desktop popover, mobile bottom-sheet
- EmojiPicker mobile branch: dynamicWidth + scoped CSS (.emoji-picker-wrapper--mobile) so the <em-emoji-picker> custom element fills the sheet; bigger touch targets (perLine 8, button 40, emoji 28); desktop unchanged
- MessageInput trigger row: mobile-first sizing with md: desktop overrides (40×40 buttons + gap on mobile, 34×34 unchanged on desktop)
- Spec updates: docs/systems/auth.md (RegisterPage responsive contract), docs/systems/uploads.md (TransferIndicator mobile surfaces)
This commit is contained in:
Jannis Braun
2026-05-07 22:58:57 +02:00
parent 8544f83225
commit fb9fe326c4
13 changed files with 439 additions and 135 deletions
+13
View File
@@ -320,6 +320,19 @@
max-height: 400px;
}
/* Mobile bottom-sheet variant: stretch the custom element to fill the
sheet's width (so `dynamicWidth: true` can recompute the grid against
the real container). Height is left to emoji-mart's own layout — the
picker manages its internal scroll region against its measured height
and forcing `height: 100%` here would collapse its category nav off-
screen because the custom element doesn't propagate flex sizing into
its shadow root. The 400px desktop cap is fine for mobile too; the
sheet's `max-height: min(60dvh, 60vh)` gives us ~440-500px to play
with on common phone viewports. */
.emoji-picker-wrapper--mobile em-emoji-picker {
width: 100%;
}
/* Animations */
@keyframes fadeIn {
from { opacity: 0; }