cebb87205c
Each user and assistant message gets a copy button (⧉ → ✓) that puts the whole message on the clipboard. Assistant copies the raw markdown (its dataset.raw); user copies its text. - copyToClipboard uses the async Clipboard API when available and falls back to a hidden-textarea + execCommand with an explicit iOS selection range, so it works on the iPhone PWA over plain-HTTP LAN (no secure context). - Copy sits in the assistant rate-bar and in a right-aligned bar on user bubbles; tools stay visible on touch (@media hover:none) since there's no hover on iOS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>