- Add content-visibility:auto for native browser rendering optimization
on message bubbles and HTML cards
- Implement backend-powered in-thread search with Unicode-aware
case-insensitive matching (Go strings.ToLower handles Cyrillic/CJK)
- Add ListMessagesAroundID model + /around/{msgid} API endpoint for
windowed message loading around search matches
- Add message caching for instant thread switching without API calls
- Fix scroll position restoration on pagination using anchor element
tracking with double requestAnimationFrame
- Fix client-side thread list sorting by last message timestamp
- Remove FromName display from DM message bubbles (only in groups)
- Add Copy button to message context menu with toast feedback
- Replace JSON-based forwarding with plain text (RFC 5322 compatible)
- Strip Gmail/Outlook reply quotes from incoming messages
- Fix audio player sync: loadedTrackId vs playingTrackId separation
- Add viewport meta override to disable mobile zoom on all inputs
- Add user-select:none to prevent native text selection on long-press
- Resolve participant display names from message history for thread list
<!--
Before submitting:
- Target the `main` branch; release branches are for backports only.
- Use a Conventional Commits title, e.g. `fix(repo): handle empty branch names`.
- Read the contributing guidelines: https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
- Documentation changes go to https://gitea.com/gitea/docs
Describe your change below and link any issue it fixes.
-->Reviewed-on: #13
## messenger-style email with full backend integration
Implements M8SH Mail — a complete messenger UI for email built on top of the Gitea fork's integrated email server.
Features:
- All 17 endpoints (`/api/v1/mail/*`) — thread list with cursor pagination, message send/forward/delete, pin/unread, block list, group rename/members, attachment serving with Range support
- RFC 5322 parsing with multipart support, HTML detection/correction, reply quote stripping (Gmail/Outlook patterns), plain-text preview extraction via `golang.org/x/net/html`
- M8SH HTTP fast-path for same-domain, SMTP MX fallback for external recipients, DKIM signing, `From:` display name from Gitea Full Name
- Internal-domain users (`@m8sh.su`) auto-activated and get Chats tab; external users get activation email via integrated mail server (MX → SMTP)
- Vue 3 SPA with ThreadList (infinite scroll, context menu, delete confirmation), ChatPane (message bubbles, HTML cards, audio player, in-thread search, scroll-up pagination), avatar resolution pipeline (Gitea → Gravatar → favicon.ico → favicon.png → default)
- Plain text only — no JSON/ForwardedContent trees, fully RFC 5322 compatible
- Music player, video player, image viewer are integrated into chat UI and they make content easily downloadable
Reviewed-on: #12