Skip to content

No.60 · Buttons· New

Corner Bracket Button

A square button with no outline, only four L-shaped brackets sitting just outside its corners. On hover they close in on the corners and turn to the accent, the button washes with colour, and the label opens its letter-spacing.

The prompt

Copy this text

Automatic copying is unavailable. Copy the selected text using your device’s copy command.

Written for the variant you picked above: Light

Build a square instrument-panel button drawn only with corner brackets, in a faint-wash tone and a bare tone and three sizes (36px, 46px, 54px tall; 16, 24, 30px side padding). Type: a monospace stack at 600, uppercase, 0.08em tracking, 12 to 14.5px. An optional arrow icon after the label slides 3px on hover. Brackets: four L-shaped corners (1.5px lines, 10px arms, ink at 55%) sitting 5px outside the button's corners; the wash tone also gets a faint 7% ink fill. On hover or keyboard focus the brackets close onto the corners (0px outside) and grow to 14px arms in the accent, the button washes with the accent at 10%, and the label's tracking opens from 0.08em to 0.12em, all over 0.3s. Press moves it down 1px. Focus also shows a 2px accent outline 8px out. Palette (light / dark): ink #0d0d0e / #f1f1ef, page #efefec / #0b0b0c, accent signal orange #ff5a1f with near-black text / acid lime #c6ff3d with near-black text, accent wash at 10%. Focus: a 2px accent outline. Show a large 'Launch' with an arrow, a bare 'View specs' and a small 'Arm', centred on the page colour. Selected variant — Light (light): Palette for this theme (Light): --ccbk-accent #ff5a1f; --ccbk-focus #ff5a1f; --ccbk-ink #0d0d0e; --ccbk-wash rgb(255 90 31 / 0.1). Treat these as the root colour tokens, one value per role, and name them to suit your code. Select it with the theme option set to "light". Keep every dimension, spacing value, state and motion from the brief unchanged, and keep text at 4.5:1 contrast or better on these surfaces. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: A normal button: click, Enter or Space. Hover and keyboard focus show the same closing brackets. Motion: A 0.3s close-in of the brackets with the tracking opening, a 3px icon slide, a 1px press. Reduced motion makes them instant. Accessibility: Native button; the brackets are decorative; the label keeps 4.5:1 on the page and on the hover wash. Responsive behavior: Buttons keep their size and wrap in rows; the brackets sit outside the box, so leave 5px around the button. Touch: Nothing depends on hover; the press gives touch feedback. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.

Notes

Interaction
A normal button: click, Enter or Space. Hover and keyboard focus show the same closing brackets.
Motion
A 0.3s close-in of the brackets with the tracking opening, a 3px icon slide, a 1px press. Reduced motion makes them instant.
Accessibility
Native button; the brackets are decorative; the label keeps 4.5:1 on the page and on the hover wash.
Responsive
Buttons keep their size and wrap in rows; the brackets sit outside the box, so leave 5px around the button.
On touch
Nothing depends on hover; the press gives touch feedback.

Featured

425 components