polish(ui): tighter header gap, stronger row hover, readable tag chips (R13 S3)

- Channel-manager tab row: pt-4 -> pt-2, closing the too-wide gap under the
  fixed header.
- Row hover was barely visible (--card sits close to --bg in dark schemes). New
  shared --hover token (a 9% foreground mix, clear in every scheme + theme,
  auto-adapting via --fg); the .selectable recipe and the DataTable row both use
  it, so every hoverable row app-wide (tables, nav rail, menu rows) reads.
- Channel tag chips: text-3xs -> text-2xs + font-medium, so the tiny labels stay
  legible on the accent fill across all colour schemes.

Self-E2E'd: tighter gap, a table-row hover now clearly visible. gate green
(tsc/eslint-0/vitest 147/knip/prettier/build).
This commit is contained in:
2026-08-15 03:40:35 +02:00
parent 6de6dece03
commit b52c87b336
4 changed files with 10 additions and 4 deletions
+2 -1
View File
@@ -22,7 +22,8 @@ interface TagChipProps {
}
function TagChip({ tag, onClick, title }: TagChipProps) {
const cls = "chip-solid shrink-0 text-3xs px-1.5 py-0.5 rounded-full max-w-36 truncate";
const cls =
"chip-solid shrink-0 text-2xs font-medium px-1.5 py-0.5 rounded-full max-w-36 truncate";
return onClick ? (
<button
type="button"
+1 -1
View File
@@ -397,7 +397,7 @@ export default function Channels() {
[t],
);
const tabs = (
<div className="px-4 pt-4 max-w-384 mx-auto flex items-center justify-between gap-4 flex-wrap">
<div className="px-4 pt-2 max-w-384 mx-auto flex items-center justify-between gap-4 flex-wrap">
<Tabs
tabs={viewTabs}
active={view}
+1 -1
View File
@@ -236,7 +236,7 @@ export default function DataTable<T>({
{paged.map((row) => (
<tr
key={rowKey(row)}
className={`border-b border-border/50 hover:bg-card/40 transition ${
className={`border-b border-border/50 hover:bg-(--hover) transition ${
rowClassName?.(row) ?? ""
}`}
>
+6 -1
View File
@@ -294,6 +294,11 @@ html {
jitter at DPR=1. round() keeps the font-scale feature but quantises to crisp integer metrics. */
font-size: round(calc(16px * var(--font-scale)), 1px);
background: var(--bg);
/* Shared interactive-row hover tint. `--card` reads faint in dark schemes (it sits close to `--bg`),
so hover was barely visible; a foreground-mix reads clearly in every scheme + theme (it lightens
on dark, darkens on light) and adapts automatically since --fg is per-scheme. One source for every
hoverable row (the .selectable recipe + DataTable rows). */
--hover: color-mix(in srgb, var(--fg) 9%, transparent);
}
body {
@@ -414,7 +419,7 @@ body {
color 0.15s ease;
}
.selectable:hover {
background-color: var(--card);
background-color: var(--hover);
}
.selectable:focus-visible {
/* outline (not a box-shadow ring) so it never fights a glass surface's box-shadow and never gets