fix(controls): say what is clickable

A `<button>` defaults to `cursor: default`, so most of this app read as
text until you clicked it and found out otherwise — the headline
deadline, the daily chips, the settings pills. Sixty-five controls on the
checklist view alone, two of which had picked up a `cursor-pointer` at
some point because somebody noticed them.

So it is a base-layer rule rather than a class per call site: an
affordance that has to be remembered is one that goes missing. Utilities
still win over it, which is what keeps `cursor-not-allowed` on a disabled
zoom step and `cursor-default` on a checklist day that cannot be ticked
yet saying what they mean.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Lucas Winther
2026-08-19 05:37:29 +02:00
co-authored by Claude Opus 5
parent 74a50f8dca
commit f336e8d8a4
+24
View File
@@ -121,6 +121,30 @@ body {
background-attachment: fixed; background-attachment: fixed;
} }
/*
* Anything you can act on says so under the pointer.
*
* A `<button>` defaults to `cursor: default`, so the app's own controls — a
* daily chip, the headline deadline, a settings pill — read as text until you
* click one and discover otherwise. Sixty-odd of them, which is why this is a
* rule rather than a class added at each call site: the ones that got it were
* the ones somebody noticed, and the point of an affordance is that it holds
* everywhere without being noticed.
*
* In `@layer base` on purpose. Utilities beat it, so a control that means
* something else by the pointer keeps saying it: `cursor-not-allowed` on a
* disabled zoom step, `cursor-default` on a day the checklist cannot tick yet.
* `:not(:disabled)` covers the same ground for anything that never bothered.
*/
@layer base {
button:not(:disabled),
[role="tab"],
input[type="checkbox"]:not(:disabled),
label:has(> input[type="checkbox"]:not(:disabled)) {
cursor: pointer;
}
}
/* Countdowns tick. Tabular figures keep them from reflowing every second. */ /* Countdowns tick. Tabular figures keep them from reflowing every second. */
.tnum { .tnum {
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;