Hairline Mono
Greyscale only, and every division is exactly one hairline wide.
Construction · Bordered
No depth at all, but every surface is contained by a drawn line — the border does the work a shadow would do elsewhere.
Every style renders this same screen, so the only thing changing between two of them is the style. The component above is the file below, running.
Prompt
Design this interface in the Hairline Mono style. No color at all and exactly one border weight everywhere. Hierarchy is carried by position and size alone. Build every surface the Bordered way: No depth at all, but
The numbers in this prompt are printed from the tokens below, so it cannot drift from what the specimen renders.
What carries the look
- greyscale only
- one border weight
- position over color
- no fills
What this style refuses
- color accents
- varying border weights
- shadows
- filled buttons
The refusals are the half that keeps generated interfaces from converging — a prompt that only says what to add gets the default look.
Tokens
Palette
#fcfcfc#0c0c0c#ffffff#121212#e2e2e2#282828#141414#f2f2f2#5c5c5c#9a9a9a#141414#f2f2f2#ffffff#0c0c0cShape and type
Measured contrast — body 17.96:1 light, 17.47:1 dark; secondary text 6.52:1 and 6.95:1. Every pair clears WCAG AA in both themes, checked on each build.
Specimen · Specimen.tsx
import type { CSSProperties } from "react";
/**
* Vibary · Hairline Mono
*
* Greyscale only, and every division is exactly one hairline wide.
*
* One complete product screen, rendered from the token object below —