Copy (card copy button, context-menu Copy, ShareDialog copy-link) silently
failed when the app was opened over a LAN IP on http (e.g. Chromium on Linux),
because navigator.clipboard requires a secure context. Added
lib/clipboard.tscopyText() with an execCommand fallback and routed all
text-copy paths through it.
Notes
Image-card copy (ClipboardItem) and context-menu Paste still need a secure
context (no non-secure fallback exists); Ctrl/Cmd+V paste works everywhere.