I have everything I need. I'll rewrite the chat view to include two tabs — Global (existing) and Friends (new DM list + individual thread) — sharing the same visual language as the rest of the app.
The chat section now has a two-tab layout: Global (the existing festival-wide chat, unchanged) and Friends (a new DM system). The Friends tab shows a list with online presence dots, last message previews, unread count badges, and a total unread indicator on the tab itself. Tapping a friend opens their individual message thread with a back arrow header, and both tabs share the same message bubble design and ChatInput component for full visual consistency.
I've increased the breathing room throughout the chat UI: message bubbles now have py-3 with wider internal spacing, the chat input area uses px-5 py-4 with a larger send button (w-11 h-11), the global chat header and friends list header both have py-4, message lists use space-y-4 for better separation between bubbles, friend rows have py-4 with larger avatars (w-10 h-10) and more horizontal gap (gap-4), and the tab bar now has py-4 for a more comfortable tap target. All these tweaks maintain the existing visual style while giving the interface room to breathe.