fix(design): an audit of the S3d claims — the float shadow, filter hints, one action size per row (E28 S3d)

- A glass role's shadow is one token (shadow-float); the header search's drop-shadow utility had
  replaced its top highlight, and the debug pill's shadow-lg did the same. The surface-role lint
  rule now refuses a shadow size beside a role.
- Plex: every value that filters carries a hint (genre, certificate, studio had none), and the facts
  panel's year and certificate filter like the header's. filterKeyword -> filterValue.
- Downloads: the row resized its buttons with a [&_button] override that the save link escaped
  (28px beside 32px); the size is the primitive's md rung now.
This commit is contained in:
2026-09-25 01:16:20 +02:00
parent 1615838f33
commit 1833f594cb
15 changed files with 160 additions and 29 deletions
@@ -140,4 +140,18 @@ describe("DownloadRow · keyboard", () => {
expect(screen.getByTitle("play").hasAttribute("data-nav-open")).toBe(true);
expect(screen.getByTitle("delete").hasAttribute("data-nav-open")).toBe(false);
});
// E28: the row once resized its actions with a `[&_button]:size-8` override, which a save LINK in the
// same row escaped (28px beside 32px buttons). The size is the primitive's own rung, set by IconBtn.
it("sizes its actions through the primitive's rung, not a descendant override", () => {
const { container } = render(
<DownloadRow job={baseJob}>
<IconBtn onClick={() => {}} title="play">
p
</IconBtn>
</DownloadRow>,
);
expect(screen.getByTitle("play").className).toContain("size-8");
expect(container.innerHTML).not.toContain("[&amp;_button]");
});
});