Masking with -webkit-text-security didn't help: Chrome on Android flags
those fields as custom passwords and still hides Copy. Key fields are
back to type=password with the type toggle, and each key label now has
an inline copy icon that copies the value straight from the field,
masked or not. The eye icon fix stays.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chrome keeps treating an input that was ever type=password as a password
field, so after tapping the eye the selection menu still hid Copy. Key
fields are now plain text inputs masked with -webkit-text-security, and
the eye toggles the mask instead of the type.
Also fixes the eye icon never switching: lucide swaps <i> for <svg>, so
querySelector('i') was null and the handler threw.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The provider is Anthropic; Claude is its model family. Models now take
the ant: prefix (e.g. ant:claude-opus-5-5), the provider value sent to
the proxy is "anthropic", and the key lives in anthropic_api_key /
USER.apiKeyAnthropic. No fallback for the old names.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Thread Sync now shows Upload to GitHub / Download from GitHub in a popover,
like sunes sync, so it can be dismissed instead of forcing a choice. It
closes on an outside click, resize, the sidebar overlay, or picking an
option. The push and pull code is unchanged, and the readme's sync steps
now name the popover options.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clicking the attach button or pasting files now appends instead of
resetting. Long-press (touch) or right-click opens a popover with
"Clear all attachments".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>