9daca9e3fb
Row clicks called draw(), which rebuilt the whole tbody — so any attempt to drag-select text in the roster was wiped on mousedown. Selection was never blocked, just destroyed. Row clicks now call select(), which swaps the highlight class and repaints the SVG marks in place. Object names sit in a bare button with a dotted underline and cursor:copy; clicking copies the name and flashes "copied" beside it. Propagation is stopped so copying and row-selecting stay independent. Clipboard uses navigator.clipboard with a hidden-textarea fallback, since the vendored copy opens over file:// where the async API is often absent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6MpcBisZYhX45oDGRRJoz
WIP songs
Unless explicitly noticed in the file, the 'WIP' status applies to the whole song as a musical capsule.
This means however it might not seem like, a song has its lyrics completed if the file doesn't say otherwise. Yes.