diff --git a/src/client/components/Dailies.tsx b/src/client/components/Dailies.tsx index 97cf91d..828b93f 100644 --- a/src/client/components/Dailies.tsx +++ b/src/client/components/Dailies.tsx @@ -194,11 +194,11 @@ function TickChip({ aria-pressed={isDone} aria-label={`${ariaLabel}${isDone ? ", done today" : ", not done today"}`} title={title} - // Done-ness for the stylesheet: the chip's own colours are the game's - // hue and arrive inline, which no rule can override, so the hover has to - // be drawn from what inline does not own — see `.tick-chip`. - data-done={isDone} - className="tick-chip flex max-w-[15rem] items-center gap-2 rounded-full border px-3 py-1.5 text-xs font-medium" + // `.hue-chip` is the shared hover: the chip's own colours are the game's + // hue and arrive inline, which no rule can override, so it is drawn from + // what inline does not own. `--hue` below is the only thing it needs; + // pressed-ness it reads off `aria-pressed`, which is already up there. + className="hue-chip flex max-w-[15rem] items-center gap-2 rounded-full border px-3 py-1.5 text-xs font-medium" style={{ ["--hue" as string]: hue, borderColor: isDone ? hue : `color-mix(in srgb, ${hue} 20%, transparent)`, @@ -222,7 +222,7 @@ function TickChip({ opacity={isDone ? 1 : 0.25} /> - {label} + {label} {streak > 1 && ( {streak}d )} diff --git a/src/client/components/GameFocus.tsx b/src/client/components/GameFocus.tsx index 45484e8..b7cb064 100644 --- a/src/client/components/GameFocus.tsx +++ b/src/client/components/GameFocus.tsx @@ -61,7 +61,12 @@ export function GameFocus({
- {label} + {label} {count} ); diff --git a/src/client/styles.css b/src/client/styles.css index 0187d3f..07220eb 100644 --- a/src/client/styles.css +++ b/src/client/styles.css @@ -295,24 +295,25 @@ body { filter 130ms ease-out; } -/* ---- Today's dailies ---------------------------------------------------- */ +/* ---- Chips coloured by a game hue --------------------------------------- */ /* - * A daily chip is the fastest thing on the page to act on, and it was saying - * none of that: the pointer stayed an arrow and nothing happened under it, so a - * strip of tappable jobs read as a row of status badges. + * Today's dailies and the focus bar are the same object twice: a pill carrying + * a game's colour, pressed or not, that you tap. Both were saying none of that + * — the pointer stayed an arrow and nothing happened under it, so two strips of + * controls read as rows of status badges. * - * The hover is drawn from what the component does *not* own. A chip's border, - * ink and wash are mixed from the game's hue, which is data rather than a token - * and therefore arrives as an inline style — and no rule here can override one - * of those. So the cursor, a ring in the same hue, a one-pixel lift and the - * label coming up to full ink carry it instead. `--hue` and `data-done` are the - * two things the chip hands over for that. + * The hover has to be drawn from what the components do *not* own. A chip's + * border, ink and wash are mixed from the game's hue, which is data rather than + * a token and therefore arrives as an inline style — and no rule here can + * override one of those. So a ring in the same hue, a one-pixel lift and the + * label coming up to full ink carry it instead. `--hue` is the one thing a chip + * has to hand over; `aria-pressed` it was already saying out loud. * - * The label only brightens while the job is outstanding: on a finished chip the - * ink *is* the game's hue, and overriding it with `ink` would trade the one - * thing that says which game for a hover state. + * The label only brightens on a chip that is *not* pressed. On a pressed one + * the ink already *is* the game's hue, and overriding it with `ink` would trade + * the one thing saying which game for a hover state. */ -.tick-chip { +.hue-chip { transition: border-color 130ms ease-out, background-color 130ms ease-out, @@ -321,22 +322,22 @@ body { transform 120ms cubic-bezier(0.2, 0.7, 0.3, 1); } -.tick-label { +.hue-chip-label { transition: color 130ms ease-out; } @media (hover: hover) { - .tick-chip:hover { + .hue-chip:hover { transform: translateY(-1px); box-shadow: 0 0 0 1px color-mix(in srgb, var(--hue) 45%, transparent); } - .tick-chip[data-done="false"]:hover .tick-label { + .hue-chip[aria-pressed="false"]:hover .hue-chip-label { color: var(--color-ink); } } /* Press feedback on both mouse and touch, as the event row has. */ -.tick-chip:active { +.hue-chip:active { transform: scale(0.96); transition-duration: 60ms; } @@ -349,16 +350,16 @@ body { .row-summary, .row-check, .meter-tick, - .tick-chip, - .tick-label { + .hue-chip, + .hue-chip-label { transition: none; } .row-check:hover, .row-check:active, .event-row:hover .row-open, .event-row:hover .row-rail, - .tick-chip:hover, - .tick-chip:active { + .hue-chip:hover, + .hue-chip:active { transform: none; } }