From f274611d239897cb6a22044a92161b6cd044aeb8 Mon Sep 17 00:00:00 2001 From: Jake Date: Thu, 7 May 2026 09:04:10 +0100 Subject: [PATCH] fix(app): scope user-select:none to chrome elements only Body had user-select:none globally so users could not copy error strings, model paths, profile names, transcripts, status messages, or any text into search or another tool. The brand essence is "clarity without friction" and this was friction. Body now defaults to user-select:text (the standard for text content), and the chrome elements that should never be drag-selected (button, summary, role=button|switch|tab|menuitem, data-no-select) opt out. Verified live: body=text, button=none, paragraph=text (inherited). --- src/app.css | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app.css b/src/app.css index 7786dd9..45e9649 100644 --- a/src/app.css +++ b/src/app.css @@ -200,6 +200,22 @@ html, body { letter-spacing: var(--letter-spacing-body); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + /* Selection allowed on content by default. Users need to copy error + strings, model paths, profile names, transcripts, etc. Chrome + elements opt out below. */ + user-select: text; +} + +/* Chrome elements opt out of selection so a click on a button label + doesn't drag-select. data-no-select is an escape hatch for app + surfaces (titlebar, drag handles) that should never select. */ +button, +summary, +[role="button"], +[role="switch"], +[role="tab"], +[role="menuitem"], +[data-no-select] { user-select: none; }