ui: forward dialog avatars, poll TDS, delivery icon, caption focus, boot hint

ForwardMessageDialog:
- Room list now shows small avatars (48px crop) + DM label beneath room name
- Forward is now async: spinner overlay while in-flight, '✓ Forwarded' only
  shown after sendEvent resolves; error clears sending state so user can retry
- Search bar hidden in success state for cleaner confirmation view

DeliveryStatus:
- QUEUED state used  emoji breaking the ASCII/terminal aesthetic; changed
  to ⟳ matching the SENDING/ENCRYPTING icon

PollContent:
- Added data-poll-content + data-poll-answer + data-selected attributes so
  TDS CSS can override inline styles without JS branching
- Added data-poll-content-label on the ◉ Poll header
- TDS dark: answers get cyan dim bg/border, selected gets orange highlight
  with subtle box-shadow; hover brightens border; label uses cyan glow
- TDS light: equivalent blue/orange variants

Caption input:
- Marked with data-caption-input; focus-visible ring added in index.css
  (blue for default, dark-theme dark blue) and lotus-terminal.css.ts
  (orange glow for TDS dark, orange for TDS light)

Boot sequence:
- Added '[ ESC ] skip' hint at bottom-right of overlay so users know
  they can dismiss it without waiting

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 23:01:13 -04:00
parent fc5f808cf9
commit 2146dac833
7 changed files with 202 additions and 30 deletions
@@ -216,6 +216,7 @@ export function PollContent({
return (
<Box
data-poll-content
direction="Column"
gap="200"
style={{ maxWidth: '340px', paddingTop: '2px', paddingBottom: '4px' }}
@@ -223,6 +224,7 @@ export function PollContent({
<Box
alignItems="Center"
gap="100"
data-poll-content-label
style={{
fontSize: '0.68rem',
fontWeight: 700,
@@ -251,6 +253,8 @@ export function PollContent({
<button
key={id}
type="button"
data-poll-answer
data-selected={selected}
onClick={canVote ? () => handleVote(id) : undefined}
style={{
padding: '7px 12px',