Updated
Button
Button performs an action. Its weight tells people which action on the screen matters most.
Updated
On this page
Preview
Brand, filled, large. The icon slots hold the component's default circle placeholder.
Type and style
Type carries the meaning and Style carries the weight. The two axes give twelve combinations on the same geometry.
Brand
Neutral
Error
How tall is a Button?
Button is 36, 44 or 56 high (sm, md, lg), and all three clear the 44 pt target once the tap area is applied. The heights are fixed so buttons line up with fields and list rows on the same screen.
sm
36 px, pad 12, 14/20, icon 16
md
44 px, pad 12, 16/24, icon 18
lg
56 px, pad 16, 18/28, icon 20
Which states does Button have?
Button has five states: Default, Pressed, Focused, Loading and Disabled, on every combination of type and style. A finger does not hover, so the set has no Hover state; with a pointer, a hover moves a specimen toward its Pressed fill.
Default
Pressed
Focused
Loading
Disabled
Neutral pressed
Neutral focused
Error focused
Focused is the focusRing/brand effect style, a 2 pt gap in the surface color and then a 2 pt ring in brand/base; Type Error uses focusRing/error. The ring sits on the button shape, and a Link button also takes its pressed fill under the ring.
Loading keeps the container of Default and swaps the label for a ring spinner. The spinner is a 24 box with a 20 ring of 2 pt and an arc of about 109 degrees that turns once every 1.2 seconds.
Pressed keeps each style recognizable: Outline fills with brand/alpha-10 and keeps its stroke, Weak deepens to brand/alpha-16, Link gets brand/alpha-10, and Filled steps to brand/pressed. Disabled paints Filled and Weak bg/soft-100, leaves Outline white inside a border/soft-100 line, and gives Link no fill.
The other button components on the page carry their own states, described with each one below.
The white label measures 3.76 to 1 on Brand Filled in Dark and 3.81 to 1 on Error Filled in both modes, under the 4.5 to 1 asked of text at this size. Error Filled Pressed takes state/error/dark-700, which turns light in Dark, and its label falls to 1.92 to 1 there. A real button keeps the 2 plus 2 focus ring for keyboard focus, and size sm still needs a 44 pt hit area in code.
360 variants: Type by Style by Size by State by Icon Only, no holes. Read from Button 53:4429 of the Figma file on October 2, 2026.
Icon only
Set Icon Only to True and the label wrapper is dropped. The button becomes a circle at the same height.
sm
md
lg
Properties
The Figma component properties, named exactly as the right hand panel names them.
| Property | Type | Default |
|---|---|---|
Type | Brand, Neutral, Error | Brand |
Style | Filled, Outline, Weak, Link | Filled |
Size | sm, md, lg | sm |
State | Default, Pressed, Loading, Disabled, Focused | Default |
Icon Only | True, False | False |
Icon Left | Boolean | true |
Icon Right | Boolean | true |
Icon Left Swap | Instance swap | circle |
Icon Right Swap | Instance swap | circle |
Icon Swap | Instance swap, used when Icon Only is True | circle |
Text | Text | Button |
Tokens
Every value the component reads, resolved through its aliases to the primitive underneath. Change one and it changes in Figma, the CSS, and all three native outputs.
| Token | Light | Dark | Applied to |
|---|---|---|---|
brand/base | #155DFC | #2B7FFF | Brand filled fill, Brand outline stroke, Brand quiet labels, focus ring |
brand/pressed | #193CB8 | #155DFC | Brand filled pressed |
brand/alpha-10 | #2B7FFF at 10% | #2B7FFF at 10% | Brand weak fill, Brand outline and link pressed |
brand/alpha-16 | #2B7FFF at 16% | #2B7FFF at 16% | Brand weak pressed |
static/static-white-0 | #FFFFFF | #FFFFFF | Label on Brand and Error filled |
static/static-facebook-blue | #1877F2 | #1877F2 | Social Button, Facebook Filled fill |
static/static-facebook-blue-pressed | #106BE1 | #106BE1 | Social Button, Facebook Filled fill while pressed |
bg/white-0 | #FFFFFF | #0E0E0F | Outline fill, and the gap in the focus ring |
bg/strong-950 | #0E0E0F | #FFFFFF | Neutral filled fill |
text/white-0 | #FFFFFF | #0E0E0F | Label on Neutral filled |
bg/surface-800 | #2F2F31 | #D1D1D6 | Neutral filled pressed |
bg/weak-50 | #F4F5F5 | #242427 | Neutral weak fill, Neutral outline and link pressed |
bg/soft-100 | #E9E9EA | #48484A | Neutral weak pressed, disabled fill |
border/soft-100 | #E9E9EA | #2F2F31 | Neutral outline stroke, disabled outline stroke |
text/sub-700 | #48484A | #C7C7CC | Neutral outline, weak and link label |
text/strong-950 | #0E0E0F | #FFFFFF | Neutral label while pressed or loading |
state/error/base-500 | #FB2C36 | #FB2C36 | Error filled fill, Error stroke and label, error ring |
state/error/dark-700 | #C10007 | #FFA2A2 | Error filled pressed |
colors/alpha/red/alpha-10 | #FB2C36 at 10% | #FB2C36 at 10% | Error weak fill, Error outline and link pressed |
colors/alpha/red/alpha-16 | #FB2C36 at 16% | #FB2C36 at 16% | Error weak pressed |
text/disabled-400 | #AEAEB2 | #8E8E93 | Disabled label |
dimensions/radius/full | 9999 | 9999 | Corner radius, every size |
brand/pressed is a semantic alias, so the Pressed fill moves with the brand: colors/blue/700 in Light and colors/blue/500 in Dark, two steps darker than brand/base in Light and one in Dark. static/static-white-0 is white in both modes, so a label on a brand fill stays white on a dark screen.
The focus ring is the focusRing/brand and focusRing/error effect styles: two drop shadows at blur 0, spread 2 in bg/white-0 and spread 4 in brand/base or state/error/base-500.
How does Button differ on iOS and Material 3?
Appetite UI Button is one component for both platforms: a capsule at three heights with Filled, Outline, Weak and Link styles. iOS and Material 3 each have their own button sets in the file, with their own sizes and styles.
| Appetite UI | iOS counterpart | Material 3 counterpart | What differs |
|---|---|---|---|
| Button | iOS / Button: Size Small, Medium and Large by Style Borderless, Bordered and Bordered - Prominent, with Destructive and Icon Only. Liquid Glass Text and Symbol sets add Glass and Glass Prominent. | M3 / Button in five sets (filled, tonal, outline, elevated, text), each Type Round or Square by Size XSmall to XLarge by State Enabled, Hovered, Focused, Pressed, Disabled | The iOS set starts at 28 high where Appetite UI sm is 36. Material 3 has five sizes and a real Hovered state. Appetite UI has three sizes, an Error type and a Loading state that neither native set draws. |
| Compact Button | iOS / Button - Liquid Glass - Symbol, a 50 circle | M3 / Icon Button, 40 by 40, Standard, Filled, Tonal and Outlined | Appetite UI is a 32 circle with three shells. |
| Floating Action Button | None. On iOS use a toolbar action. | M3 / FAB and M3 / Extended FAB | Appetite UI draws one 56 circle with an Open stack. Material 3 FAB comes in 40, 56 and 96. |
| Social Button | None | None | Neither platform ships a sign-in button; the brand rules of each provider apply. |
The minimum touch target is 44 pt on iOS and 48 dp on Material 3, set by platform/min-touch-target in the Platform collection. Size sm is 36 high, so give it a 44 pt hit area on iOS and 48 dp on Android in code.
When should I use a filled Button?
Use one filled Button per screen, for the action that matters most, and pair it with a link for the way out.
Do
One filled button per screen. Pair it with a link so the destination of the eye is never in doubt.
Don't
Reserve Error for destructive actions. A filled Error on the safe choice makes two filled buttons, so the safe path and the risky one are equally loud.
The same Figma page ships five more button components, documented below: Quick Action Button, Social Button at 128 variants, Compact Button, Button / Overlay and the Floating Action Button.
Quick Action Button
A circle icon with a label under it, in five semantic colors and three states, for shortcut grids and the action row on a wallet or banking screen. Use Button for the main action of a screen.
Type moves the container fill and the icon together and leaves the label on text/strong-950 in all five. Pressed steps each tint up one stop, lighter to light, and leaves the icon color alone.
Disabled flattens the axis: every color lands on bg/weak-50 with the icon in fg/disabled-400 and the label in text/disabled-400. The five colors are the only thing an instance cannot override, because icon and label are both properties.
Compact Button
An icon-only control at 32, for toolbars, image overlays and anywhere a full button would crowd the row. Three shells, four states.
Pressed paints all three styles bg/soft-100, and Disabled paints Outline and White bg/weak-50 while Transparent stays clear. Only Outline has a border, border/soft-100 at 1 pt in Default, Pressed and Disabled.
Focused keeps each style's own fill under a 1 pt brand/base stroke drawn outside the edge, then the focus ring. Transparent has no fill, so its ring follows the stroke alone.
At 32 the circle is smaller than a finger, so give it a 44 pt hit area on iOS and 48 dp on Android in code.
Button / Overlay
A circular icon button for use on top of photography. A scrim and a background blur keep the glyph legible on any image, in both modes.
The fill is bg/scrim at 42 percent, and 58 percent while pressed, over the backdropBlur/md style, a 16 background blur. The glyph is static/static-white-0 in both modes and swaps with Icon Swap.
The set has State Default and Pressed only, with no Focused, Disabled or Loading. Give a live one the 2 plus 2 focus ring in code.
Floating Action Button
One screen-level primary action, pinned above the content, with an expanded stack behind it. It is Android-native, so on iOS use a toolbar action instead.
Close is one 56 circle. Open turns that circle Neutral Weak with an x and hangs four expanded actions above it, each a 56 brand circle with its label to the left.
Both main circles sit under dropShadow/lg. A label is a 40 tall pill at radius 12 in bg/strong-950 with text/white-0, so the pill and its text invert in Dark.
The stack sits outside the component's own 56 by 56 frame, which does not clip, so an instance measures 56 and paints 201 by 332. State is the only property, so the four actions carry a placeholder circle and the words New post, Upload photo, Scan code and Message until you override each one.
The set has no Focused state, so give a live one the 2 plus 2 focus ring in code.
Social Button
Third-party sign-in for four providers, at one fixed height, so the stack under a login form stays even whichever set you ship. Never recolor the brand marks.
Style changes the shell and the mark stays put. Google keeps its four colors in every style, Facebook stays on its own blue until Filled paints the mark white, and Apple and X flip between fg/white-0 and fg/strong-950.
Facebook Filled uses static/static-facebook-blue, and static/static-facebook-blue-pressed while pressed, so it holds the same value in both modes, and its label, mark and loading arc take static/static-white-0 for the same reason. Every style is 56 tall with 16 of padding, Link included.
The label defaults to Continue, so name the provider on every real instance, for example Continue with Google.