Button Lab

Tune a shared two-layer button—stationary chassis, moving face, and directional press/release motion—then define only the semantic paint differences for each type. Every adjustable value is locked to an approved design token.

Experimental proposals stay scoped to this page. Nothing here changes the production Button or SMARTprint navigation until the foundation is approved.

Shared foundation

One physical contract

Every tactile button now has a stationary chassis and an independently moving face. Tune that shared construction here; type cards only change semantic paint and whether they participate in depth.

Saved locally

Physical anatomy

Face over chassis

The dark chassis stays fixed. The painted face rises above it, lifts farther on hover, and travels down toward the chassis while pressed.

Up
4px
Hover
8px
Down
0px
Up
Hold to press
Down

The visible side wall is the Primary type’s Base / side surface.

Tactile depth

Moving face + stationary chassis

Press & release motion

Fast down, expressive return

Shape & content

Inherited by every type

Motion replay

Watch a state change animate

Replay press and hover on the live foundation instead of chasing them with the pointer. Real time answers “is it fast enough?”; slow-mo shows what the curve is doing at the landing. Loop it while you drag the motion sliders above.

Primary
Secondary · icon

Tooltip

Reveal timing

The real product tooltip over tactile specimens. Tune the hover delay and placement; the chip’s in/out motion already runs on motion tokens.

Delay
Side

Chip motion already runs on motion tokens (base-decelerate in, fast-accelerate out). The 200 ms delay ships as a constant in ui/tooltip.tsx — not a token yet. Hover across the row: after the first chip opens, its neighbors open with no delay.

Selected

Latched — the face stays down

A selected tactile button holds its Down position: the pressed physics become the selected paint, and hover cannot lift a latched face. Click to latch and release.

Independent toggles
Exclusive group — one always stays down

Target specimen

SMARTprint navigation icon buttons

This specimen inherits Secondary + Icon-only. It has no navigation-only visual override, so tuning the neutral recipe improves every toolbar action coherently.

Up
Down
Live

Print actions

01

Primary

Foundation + semantic overrides

Highest-emphasis action. Semantic brand treatment on the shared physical foundation.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation
02

Secondary

Foundation + semantic overrides

Neutral supporting action. This is the proposed recipe for navigation icon buttons.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation
02A

Outline

Compatibility alias → secondary

Compatibility alias of Secondary. It is shown explicitly, but cannot drift into a separate recipe.

Rest · Up
Hover
Focus
Pressed · Down
Disabled

Outline is retained by the code API as a compatibility alias. It always follows Secondary and has no independent overrides.

03

Secondary Danger

Foundation + semantic overrides

Neutral at rest; danger appears only when the user approaches the destructive action.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation
04

Danger

Foundation + semantic overrides

High-emphasis destructive action. It shares mechanics with Primary and changes only tone.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation
05

Ghost

Foundation + semantic overrides

Low-emphasis action. It inherits geometry and motion but intentionally opts out of depth.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation
06

Text

Foundation + semantic overrides

Compact translucent action. It keeps the shared shape but stays visually flat.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation
07

Link

Foundation + semantic overrides

Navigation action in a button API. It inherits accessibility and typography, not a control surface.

Rest · Up
Hover
Focus
Pressed · Down
Disabled
Type overridesOnly the differences from the shared foundation

Up the stack

What changes—and what does not

Foundation
Face/chassis anatomy, lift positions, geometry, focus, and motion.
Visual type
Face paint, chassis tone, foreground, rim, and tactile participation.
Content mode
Label, icon-only, or split composition. It does not create a new skin.
Context
Navigation and toolbars arrange buttons; they do not restyle them.