diff --git a/frontend/DESIGN.md b/frontend/DESIGN.md index 3584eab5..f45d45b1 100644 --- a/frontend/DESIGN.md +++ b/frontend/DESIGN.md @@ -91,6 +91,8 @@ One tint scale, by purpose: - Neutral hover: solid `bg-accent` in both themes (ghost buttons, combobox, SelectTrigger, Card `interactive`, Dropzone, every list-row highlight). - Quiet panel inside a page or card: `bg-muted`, not `bg-muted/40` or `/60`. + It is a small box inside a panel (a well, a guardrail stage), never a + page-sized panel around cards (see Card surfaces). - Dividers: `border-border`, not `border-border/60`. Patterns: @@ -242,10 +244,11 @@ rounded-3xl`) are `variant="sidebar-item"`: left-aligned, full-radius, normal justify-start` and `aria-expanded`: a lucide `ChevronRight` first (`rotate-90` while open) in primary, then the foreground title, with a primary underline on hover. The button draws no focus ring; the panel does, - so keyboard focus outlines the whole white block: - `has-[[data-variant=section-toggle]:focus-visible]:ring-3 …:ring-ring/50 -…:ring-inset` on the panel `
` (inset, because a scrolling column clips - an outset ring). Status badges go beside the button, not inside it, or the + so keyboard focus outlines the whole panel. The panel is a `Card` (a place, + `subtle lg`), and every Card carries that ring + (`has-[[data-variant=section-toggle]:focus-visible]:ring-3 … ring-inset`, + inset because a scrolling column clips an outset ring), so pages pass + nothing for it. Status badges go beside the button, not inside it, or the hover underline runs under them. - Drop `text-white` on default and destructive buttons; the foreground token already provides it. Drop `disabled:cursor-not-allowed` on buttons; the @@ -267,28 +270,68 @@ justify-start` and `aria-expanded`: a lucide `ChevronRight` first ### Card (`ui/card.tsx`) -| Prop | Values | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `variant` | `outline` (border + card surface, the default), `filled` (muted fill, no border, for tiles on a card-coloured page), `subtle` (border on the page background) | -| `tone` | `default`, `destructive` (the status soft fill and border, `border-destructive/50 bg-destructive/10`, over any variant) | -| `padding` | `none`, `sm` (p-3, row boxes and code blocks), `default` (p-4), `lg` (p-6, tiles, chart panels and stat tiles) | -| `interactive` | whole card is the target: hover, focus ring and `selected` highlight; pair with `asChild` around a `