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).
This commit is contained in:
2026-05-07 09:04:10 +01:00
parent fdeda6c642
commit f274611d23

View File

@@ -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;
}