diff --git a/desktop-next/DESIGN.md b/desktop-next/DESIGN.md index 2e964b4ca0..27bc0632dc 100644 --- a/desktop-next/DESIGN.md +++ b/desktop-next/DESIGN.md @@ -58,6 +58,8 @@ Buzz is a place where people build together and bring their agents into the room ## Density and rhythm - **Dense data renders as rows with dividers, edge to edge.** Wrapping every list item in its own card is the most common way a functional surface becomes a marketing page. +- **Content that separates itself needs no divider, and no container.** A divider is for uniform rows where the eye needs a line to track along. When each entry already carries a visible difference — a colour swatch, a type specimen, an avatar — the content is the separator, and adding a rule or a card on top is redundant structure. Space alone is enough. +- **Never judge a value against a surface it will not be used on.** A swatch on a grey fill, or a type specimen in a tinted box, is being evaluated in a context the product will never reproduce. Samples sit on the page. The one exception is a value that needs a backdrop to exist at all — translucency needs something behind it, and a white surface swatch needs a hairline or it renders as nothing. - **Cards are for widgets, galleries, and settings groups.** A card is a bordered, padded region on the page, not a different depth. - **Pick the frame before the content.** Decide what the surface is — a list, a reading column, a workspace — before filling it. - **Whitespace is generous by default.** Crowding reads as a different product. diff --git a/desktop-next/src/features/design-system/ui/ColourPage.tsx b/desktop-next/src/features/design-system/ui/ColourPage.tsx index 05ab4037de..a410145a7d 100644 --- a/desktop-next/src/features/design-system/ui/ColourPage.tsx +++ b/desktop-next/src/features/design-system/ui/ColourPage.tsx @@ -7,9 +7,18 @@ import { import { Note, PageHeader, Section, Swatch } from "./primitives"; +/** + * A role, sitting directly on the page. + * + * No card and no divider: the swatch is its own separator, and a colour judged + * on a grey card is not being judged on the surface it will actually be used on. + * The hairline stays on the swatch itself — `bg-panel` is white on a white page, + * so without it the most-used role in the system renders as nothing. That is a + * genuine boundary rather than decoration. + */ function RoleRow({ role }: { role: Role }) { return ( -
{exception.name}
- +
{exception.name}
+ {exception.why}
- {role.mono ? "createChannel(name, members)" : "Bring your agents in"} -
-{role.token}
- {role.pointsAt}
-
- {role.size} / {role.lineHeight} / {role.tracking} / {role.weight}
-
- {role.use}
++ {role.mono ? "createChannel(name, members)" : "Bring your agents in"} +
+{role.token}
+ {role.pointsAt}
+
+ {role.size} / {role.lineHeight} / {role.tracking} / {role.weight}
+
{role.use}
+- {family.name} -
-{family.token}
- - {family.use} -
-+ {family.name} +
+{family.token}
+ + {family.use} +
+