Buttons
Three variants × three sizes. Primary (green #2ECE78) for affirmative actions, secondary for alternatives, ghost for lower emphasis.
Variants
Primary · Secondary · Ghost
- Primary BG
- #2ECE78
- Primary Color
- #FFFFFF · fw:700
- Secondary Border
- 2px solid #C8CDD5
- Ghost Border
- 2px solid transparent
- Radius
- 10–14px
- Icon size
- 18px · arrow-right / arrow-left
Sizes
sm · md · lg
- sm height
- 44px
- sm padding
- 0 20px
- sm font
- 14px / r:10
- md height
- 52px
- md padding
- 0 28px
- md font
- 16px / r:12
- lg height
- 60px
- lg padding
- 0 36px
- lg font
- 18px / r:14
Usage
---
import CTAButton from '@/components/kiosk/CTAButton.astro';
import KioskIcon from '@/components/icons/KioskIcon.astro';
---
{/* Variants — primary / secondary / ghost */}
<CTAButton variant="primary" size="lg">
Continue
<KioskIcon slot="trailing" name="arrow-right" size={18} />
</CTAButton>
<CTAButton variant="secondary" size="lg">
<KioskIcon slot="leading" name="arrow-left" size={18} />
Back
</CTAButton>
<CTAButton variant="ghost" size="lg">Cancel</CTAButton>
{/* Sizes — sm (44) · md (52) · lg (60) */}
<CTAButton variant="primary" size="sm">Small</CTAButton>
<CTAButton variant="primary" size="md">Medium</CTAButton>
<CTAButton variant="primary" size="lg">Large</CTAButton>
{/* Stretch to container */}
<CTAButton variant="primary" size="lg" fullWidth>
Confirm payment
</CTAButton> Props
| Prop | Type | Default | Description |
|---|---|---|---|
variant | 'primary' | 'secondary' | 'ghost' | 'primary' | Visual treatment — primary (green fill), secondary (outlined), ghost (text-only). |
size | 'sm' | 'md' | 'lg' | 'md' | Height + padding + text scale (44 / 52 / 60). |
type | 'button' | 'submit' | 'reset' | 'button' | Native button `type` attribute. |
label | string | — | Accessible label for icon-only or ambiguous buttons (maps to `aria-label`). |
fullWidth | boolean | false | Stretches the button to container width (mirrors the app `fullWidth` prop). |
class | string | — | Extra classes appended to the root element. |
slot: leading
slot
| — | — | Leading icon slot. |
slot: (default)
slot
| — | — | Button label / children. |
slot: trailing
slot
| — | — | Trailing icon slot. |
-
variant- Type
'primary' | 'secondary' | 'ghost'- Default
'primary'- Desc
- Visual treatment — primary (green fill), secondary (outlined), ghost (text-only).
-
size- Type
'sm' | 'md' | 'lg'- Default
'md'- Desc
- Height + padding + text scale (44 / 52 / 60).
-
type- Type
'button' | 'submit' | 'reset'- Default
'button'- Desc
- Native button `type` attribute.
-
label- Type
string- Default
—- Desc
- Accessible label for icon-only or ambiguous buttons (maps to `aria-label`).
-
fullWidth- Type
boolean- Default
false- Desc
- Stretches the button to container width (mirrors the app `fullWidth` prop).
-
class- Type
string- Default
—- Desc
- Extra classes appended to the root element.
-
slot: leadingslot- Type
—- Default
—- Desc
- Leading icon slot.
-
slot: (default)slot- Type
—- Default
—- Desc
- Button label / children.
-
slot: trailingslot- Type
—- Default
—- Desc
- Trailing icon slot.