The AnimatedContent gate on the composer's send button required inputFieldValue.text.isNotBlank() in addition to canSend, so attaching an image or file with an empty input hid the button entirely — the attachment could never be sent on its own. ChatInputPolicy.canSend already allowed attachment-only sends and ChatViewModel.sendMessage already accepted blank text with pending attachments, but the button never rendered to trigger it. Drop the stale text gate so the send affordance tracks canSend (non-empty text OR pending attachments, plus connection). The backend handles image-only turns natively: prompt.submit with empty text + queued images routes through build_native_content_parts, which wraps the pixels with an [Image attached at: ...] hint. Add a Compose UI regression test asserting the send button is displayed with a pending image attachment and an empty input. Co-authored-by: M57 <hy4ri@users.noreply.github.com>