From 113da76c3635659e936b5e36ff700f2d2ff79106 Mon Sep 17 00:00:00 2001 From: npeter83 Date: Fri, 25 Sep 2026 23:43:26 +0200 Subject: [PATCH] =?UTF-8?q?fix(design):=20a=20user=20row=20answers=20as=20?= =?UTF-8?q?a=20whole=20card=20=E2=80=94=20the=20hover=20layer=20under=20it?= =?UTF-8?q?s=20badges=20and=20buttons,=20a=20click=20anywhere=20opens=20th?= =?UTF-8?q?e=20account=20(E28)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The layer was the name button's own and ended at the row's first badge or button. The card now paints the B3 layer under its content (isolate + a new z-under level), the name button's hit layer spans the card, and the actions sit above it. --- docs/DESIGN.md | 7 ++++- frontend/eslint.config.js | 2 +- .../src/components/AdminUsers.dom.test.tsx | 18 +++++++++++++ frontend/src/components/AdminUsers.tsx | 26 ++++++++++++++++--- frontend/src/index.css | 3 +++ 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/docs/DESIGN.md b/docs/DESIGN.md index ca03b93e..e6106e80 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -100,6 +100,9 @@ style guide. `bg-card` hovers are violations (invisible on a light card). Selected stays the solid accent. The one exception is an edged pill (a chip, a toolbar or form trigger, a segment): its hover is the accent edge (`.pill:hover`, `glass-hover`), which reads on every surface too (owner decision F14). + A card that is one row with actions answers as a whole: the layer is the card's, under its badges and + buttons, and the row's open button spans the card beneath the actions (a hover that stopped at the first + badge read as broken; owner, E28 — `AdminUsers` user rows). - **Tokens as utilities:** the decided values live once in `index.css` — `--hover` / `--press`, `--edge-strong`, `--touch-target`, and the utilities `state-layer`, `state-filled`, `state-danger`, `edge-strong`, `fade-below`, `fade-below-panel`, `fade-above-panel`, `fade-edges-x`. A primitive or a lab @@ -109,7 +112,8 @@ style guide. - **Radius:** chips and segmented controls `rounded-full`; tabs `rounded-lg`. Buttons, icon buttons and form fields `rounded-lg`; toolbar triggers and search a pill (Controls). Surfaces: see Surfaces. - **Layers:** the fixed z-index scale in `index.css` (`base < menu < chrome < paneltab < panel < rail < -overlay < popover < tooltip`). No ad-hoc z-index. [maintainability] +overlay < popover < tooltip`), plus `under`, a surface's own layer under its content inside its `isolate`. + No ad-hoc z-index. [maintainability] ## Controls — _Decided_ (batches A and B) @@ -377,6 +381,7 @@ Wherever there is text, the user can select it and copy it, and no click action | 2026-09-25 | Edges and hovers (F14) | The ≥ 3:1 edge on the field family (fields, the form trigger); labelled pills keep the faint edge and the accent-edge hover | The ≥ 3:1 edge and a state-layer hover on every control | 1.4.11 asks an edge only where nothing else identifies the control; a heavy edge on every chip and tab weighs the whole UI down | | 2026-09-25 | Rating and live (F16) | Own tokens: `--rating` (theme-scoped gold), `--live`/`--live-fg`, `--rating-media`, `--media-chrome`; palette classes lint-refused | Map them to `--warn` / `--danger` | A gold star and a red LIVE are what the eye expects; as warn/danger they would read as a status. The old amber score was 2:1 on light | | 2026-09-25 | Fjord trial (B2 exception) | A fifth scheme, temporary: Midnight's neutrals, Playnite's steel accent (#337599 lifted to #5aa1cb) and steel rules; exit = fold into Midnight or remove | Retune Midnight straight away; borrow only the qualities | The owner wants to live with the calmer palette app-wide before it replaces the default; it breaks "own hue family" on purpose, and only until that call | +| 2026-09-25 | Whole-card row (owner) | A card row's B3 layer is the card's `::before` under its content; the open button's hit layer spans the card, the actions sit above it | The name button's own hover, ending at the first badge or button | A row that half-answers the pointer reads as broken; a badge click did nothing | | 2026-09-25 | Badge tones (F29) | `Badge tone` neutral / accent / warn at 6%; light `--warn` #b45309 → #a14a07; edged label spans lint-refused | Keep edged status pills (a private Badge in Users, Settings "Granted", the suggestions count) | Edged = pressable at a glance; amber-700 was 4.58:1 as text and fell under 4.5 on its own tint | | 2026-09-24 | Chip family | One `Chip` (filter / token / tag / suggest / ghost) + `DismissibleChip`; nothing under 24; the lint rule "no raw `