Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/frontend/packages/shared/src/badge/Badge.css
iris 3e4ffa9312 badge: mix accent color into --fg for a contrast floor on any theme
Badge.css's colored-value classes (positive/warning/negative/accent)
used the raw semantic accent color directly on --purple-dim, same class
of bug already fixed by hand for the bundled Latte palette (see
colors.css's comment on --latte-base08..0F) but never applied to an
arbitrary stylix-fed scheme. Blend each accent 60/40 with --fg via
color-mix() instead of using it bare -- --fg is the one color the
base16 contract already guarantees legible on every surface, so mixing
toward it gives every accent a contrast floor without trying to
compute/fix an operator's own theme.
2026-08-28 23:54:25 +02:00

70 lines
2.4 KiB
CSS

/* <Badge> — pill-shaped status/control chip. Same touch-target floor as
the rest of the shared control set (2.75em ≈ 44px, WCAG 2.5.5) when
interactive; a plain display badge (no `onClick`) stays compact since
it's not a tap target at all. Colours are the shared base16-derived
vars (../theme.css) — `--bg-elev` is the same slot dropdowns/popovers
use, so an open Badge and the Dropdown it triggers read as one surface. */
.ui-badge {
display: inline-flex;
align-items: center;
gap: 0.35em;
padding: 0.15em 0.6em;
border-radius: 1em;
font: inherit;
font-size: 0.85em;
line-height: 1.4;
background: var(--purple-dim);
color: var(--fg);
border: none;
white-space: nowrap;
}
.ui-badge-interactive {
cursor: pointer;
min-height: 2.75em;
padding-inline: 0.8em;
}
.ui-badge-interactive:hover {
background: var(--border);
}
.ui-badge-interactive:disabled {
opacity: 0.6;
cursor: default;
}
.ui-badge-interactive[aria-expanded='true'] {
background: var(--bg-elev);
outline: 1px solid var(--purple);
}
.ui-badge-label {
color: var(--muted);
}
.ui-badge-value {
color: var(--fg);
}
.ui-badge-caret {
font-size: 0.75em;
color: var(--muted);
}
/* Blended with `--fg`, not the raw accent — a stylix-fed scheme can pick
any hue/lightness for `--green`/`--amber`/etc., and nothing guarantees
an arbitrary accent clears 4.5:1 against `--purple-dim` the way the two
bundled palettes were hand-tuned to (see colors.css's comment above
`--latte-base08..0F`). `--fg` is the one color the base16 contract
already guarantees is legible on every surface in the theme, so mixing
toward it gives every accent a contrast floor without trying to
compute/fix an operator's own theme (mara, on the low-contrast-badges
report: "we cant fix a broken theme ... we need to follow base16
conventions or css mix new colors" — this is that; stock mocha/latte
keep their existing look, since both accents already sit close to
`--fg` in contrast terms). */
.ui-badge-positive .ui-badge-value {
color: color-mix(in srgb, var(--green) 60%, var(--fg));
}
.ui-badge-warning .ui-badge-value {
color: color-mix(in srgb, var(--amber) 60%, var(--fg));
}
.ui-badge-negative .ui-badge-value {
color: color-mix(in srgb, var(--red) 60%, var(--fg));
}
.ui-badge-accent .ui-badge-value {
color: color-mix(in srgb, var(--purple) 60%, var(--fg));
}