Building a tactile Claude action button
A tactile action button with metallic rim, gradient bevel, debossed icon, and realistic press interaction. Pure SVG and CSS β no libraries.
A tactile action button with metallic rim, gradient bevel, debossed icon, and realistic press interaction. Pure SVG and CSS β no libraries.
The challenge
Flat design solved a lot of problems, but it also erased tactile feedback. A Claude action button is one of the most common interactions in an AI interface β what if it actually felt like pressing a physical button?
Key decisions
Layered construction
The button is built from concentric rings, each serving a purpose:
- Outer rim β a dark-to-light vertical gradient that mimics brushed metal catching light from above
- Border ring β a thin dark stroke separating the rim from the face, grounding the depth
- Bevel stroke β a three-stop gradient (light, dark, light) creating the illusion of a beveled edge
- Face β the pressable surface with a subtle drop shadow
Debossed icon
The Claude logo uses an SVG inner shadow filter β the highlight sits above the icon, the shadow below. This creates the impression of the icon being stamped into the metal surface rather than printed on top.
Press interaction
When pressed, the drop shadow swaps to an inset shadow and the icon turns orange. The outer rim stays fixed β itβs the housing, not the moving part. No CSS transforms on SVG elements, which would break the userSpaceOnUse gradients.
What I learned
SVG filters are powerful but finicky. userSpaceOnUse gradients donβt move with CSS transforms β theyβre anchored to the coordinate space. The solution was to avoid transforms entirely and simulate the press through shadow and fill changes, which is actually more physically accurate anyway.