UI reference

CSS variables

The browser package theme is primarily configured through --formie-* custom properties on .formie-form.

This page is exhaustive for the active root-level variable surface shipped in packages/formie-browser/src/css/theme/_tokens.css. Commented-out legacy variables are intentionally excluded.

Use these variables to restyle the shipped UI without changing browser behavior or replacing Formie's rendered markup.

Variable categories

The shipped root variable surface covers:

  • typography, spacing, radius, and border foundations
  • palette scales and semantic color aliases
  • form, message, button, navigation, progress, and loading layout
  • field-level sizing and specialized field surfaces such as summary, signature, repeater, and table

Foundations

VariableDefaultPurpose
--formie-font-family-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serifBase typeface
--formie-font-size-xs0.75remExtra-small text size
--formie-font-size-sm0.875remSmall text size
--formie-font-size-base1remDefault text size
--formie-font-size-lg1.125remLarge text size
--formie-font-size-xl1.375remExtra-large text size
--formie-font-size-2xl1.75remDisplay text size
--formie-font-weight-normal400Normal font weight
--formie-font-weight-medium500Medium font weight
--formie-font-weight-semibold600Semibold font weight
--formie-font-weight-bold700Bold font weight
--formie-line-height-tight1.25Tight line height
--formie-line-height-base1.5Default line height
--formie-line-height-relaxed1.4Relaxed meta/message line height
--formie-letter-spacing-tight-0.02emTight heading letter spacing
--formie-space-10.25remSpacing scale step
--formie-space-1-50.375remSpacing scale step
--formie-space-20.5remSpacing scale step
--formie-space-2-50.625remSpacing scale step
--formie-space-30.75remSpacing scale step
--formie-space-3-50.875remSpacing scale step
--formie-space-41remSpacing scale step
--formie-space-4-51.125remSpacing scale step
--formie-space-51.25remSpacing scale step
--formie-space-5-51.375remSpacing scale step
--formie-space-61.5remSpacing scale step
--formie-space-71.75remSpacing scale step
--formie-space-82remSpacing scale step
--formie-space-92.25remSpacing scale step
--formie-space-102.5remSpacing scale step
--formie-space-112.75remSpacing scale step
--formie-space-123remSpacing scale step
--formie-radius-sm0.25remSmall radius
--formie-radius-md0.375remMedium radius
--formie-radius-lg0.5remLarge radius
--formie-radius-full999pxFully rounded radius
--formie-border-width1pxDefault border width

Palette

VariableDefaultPurpose
--formie-black#000000Absolute black
--formie-white#ffffffAbsolute white
--formie-neutral-50#f8fafcNeutral scale 50
--formie-neutral-100#f1f5f9Neutral scale 100
--formie-neutral-200#e2e8f0Neutral scale 200
--formie-neutral-300#cbd5e1Neutral scale 300
--formie-neutral-400#94a3b8Neutral scale 400
--formie-neutral-500#64748bNeutral scale 500
--formie-neutral-600#475569Neutral scale 600
--formie-neutral-700#334155Neutral scale 700
--formie-neutral-800#1e293bNeutral scale 800
--formie-neutral-900#0f172aNeutral scale 900
--formie-neutral-950#020617Neutral scale 950
--formie-primary-50#e8ecfcPrimary scale 50
--formie-primary-100#d2d9f9Primary scale 100
--formie-primary-200#a4b3f4Primary scale 200
--formie-primary-300#778deePrimary scale 300
--formie-primary-400#4967e9Primary scale 400
--formie-primary-500#1c41e3Primary scale 500
--formie-primary-600#1634b6Primary scale 600
--formie-primary-700#112788Primary scale 700
--formie-primary-800#0b1a5bPrimary scale 800
--formie-primary-900#060d2dPrimary scale 900
--formie-primary-950#040920Primary scale 950
--formie-danger-50#fef2f2Danger scale 50
--formie-danger-100#fee2e2Danger scale 100
--formie-danger-200#fecacaDanger scale 200
--formie-danger-300#fca5a5Danger scale 300
--formie-danger-400#f87171Danger scale 400
--formie-danger-500#ef4444Danger scale 500
--formie-danger-600#dc2626Danger scale 600
--formie-danger-700#b91c1cDanger scale 700
--formie-danger-800#991b1bDanger scale 800
--formie-danger-900#7f1d1dDanger scale 900
--formie-danger-950#450a0aDanger scale 950
--formie-success-50#f0fdf4Success scale 50
--formie-success-100#dcfce7Success scale 100
--formie-success-200#bbf7d0Success scale 200
--formie-success-300#86efacSuccess scale 300
--formie-success-400#4ade80Success scale 400
--formie-success-500#22c55eSuccess scale 500
--formie-success-600#16a34aSuccess scale 600
--formie-success-700#15803dSuccess scale 700
--formie-success-800#166534Success scale 800
--formie-success-900#14532dSuccess scale 900
--formie-success-950#052e16Success scale 950

Semantic colors and focus

VariableDefaultPurpose
--formie-color-backgroundvar(--formie-white)Form background
--formie-color-surfacevar(--formie-white)Main component surface
--formie-color-surface-subtlevar(--formie-neutral-50)Subtle surface fill
--formie-color-surface-mutedvar(--formie-neutral-100)Muted surface fill
--formie-color-textvar(--formie-neutral-700)Default text color
--formie-color-text-mutedvar(--formie-neutral-500)Muted text color
--formie-color-headingvar(--formie-neutral-900)Heading/high-emphasis color
--formie-color-bordervar(--formie-neutral-300)Default border color
--formie-color-border-softvar(--formie-neutral-200)Soft border color
--formie-color-primaryvar(--formie-primary-400)Primary action color
--formie-color-primary-hovervar(--formie-primary-500)Hover primary color
--formie-color-primary-bordervar(--formie-primary-500)Primary border color
--formie-color-primary-softvar(--formie-primary-100)Soft primary tint
--formie-color-focus-ringvar(--formie-primary-300)Focus-ring color
--formie-color-dangervar(--formie-danger-500)Error/danger color
--formie-color-danger-softvar(--formie-danger-50)Soft danger tint
--formie-color-danger-darkvar(--formie-danger-900)Dark danger text/accent
--formie-color-successvar(--formie-success-500)Success color
--formie-color-success-softvar(--formie-success-50)Soft success tint
--formie-color-success-darkvar(--formie-success-900)Dark success text/accent
--formie-color-button-textvar(--formie-color-surface)High-contrast button text alias
--formie-focus-ring-border-colorvar(--formie-color-focus-ring)Focus border alias
--formie-shadow-focus0 0 0 3px rgba(119, 141, 238, 0.45)Default focus ring shadow
--formie-shadow-danger-focus0 0 0 3px rgba(248, 180, 180, 0.45)Error focus ring shadow

Form and messages

VariableDefaultPurpose
--formie-title-form-size1.4remForm title size
--formie-body-size0.9375remBase form body size
--formie-gap-form0Gap between top-level form regions
--formie-gap-form-headervar(--formie-space-4)Header spacing
--formie-gap-form-messagesvar(--formie-space-4)Message stack spacing
--formie-gap-form-navigationvar(--formie-space-4)Navigation spacing
--formie-gap-form-body0Body spacing
--formie-gap-form-footervar(--formie-space-4)Footer spacing
--formie-message-paddingvar(--formie-space-4)Message padding
--formie-message-margin-bottomvar(--formie-space-4)Message bottom margin
--formie-message-sizevar(--formie-font-size-sm)Message text size
--formie-message-line-heightvar(--formie-line-height-relaxed)Message line height

Buttons and icons

VariableDefaultPurpose
--formie-button-bordervar(--formie-border-width) solid var(--formie-color-border)Base button border
--formie-button-border-hovervar(--formie-button-secondary-border-hover)Base button hover border
--formie-button-border-radiusvar(--formie-radius-sm)Button radius
--formie-button-backgroundvar(--formie-neutral-100)Base button background
--formie-button-background-hovervar(--formie-neutral-200)Base button hover background
--formie-button-text-colorvar(--formie-color-heading)Base button text color
--formie-button-colorvar(--formie-button-text-color)Shared button current color
--formie-button-line-heightvar(--formie-line-height-tight)Button line height
--formie-button-font-weightvar(--formie-font-weight-medium)Button font weight
--formie-button-min-heightvar(--formie-space-10)Minimum button height
--formie-button-padding-yvar(--formie-space-2)Vertical button padding
--formie-button-padding-xvar(--formie-space-4)Horizontal button padding
--formie-button-font-sizevar(--formie-font-size-sm)Button font size
--formie-button-gapvar(--formie-space-2)Button content gap
--formie-button-icon-size0.9375remButton icon size
--formie-button-icon-button-size1.875remIcon-only button size
--formie-button-icon-border-radiusvar(--formie-radius-full)Icon button radius
--formie-button-icon-backgroundvar(--formie-neutral-100)Icon button background
--formie-button-icon-background-hovervar(--formie-neutral-200)Icon button hover background
--formie-button-icon-bordervar(--formie-border-width) solid var(--formie-neutral-300)Icon button border
--formie-button-icon-border-hovervar(--formie-border-width) solid var(--formie-neutral-400)Icon button hover border
--formie-button-icon-colorvar(--formie-neutral-950)Icon button color
--formie-button-opacity-disabled0.7Disabled button opacity
--formie-button-shadow-focus0 0 0 3px var(--formie-color-border-soft)Button focus shadow
--formie-icon-mask-plusurl(...)Add/plus icon mask
--formie-icon-mask-arrow-lefturl(...)Back arrow icon mask
--formie-icon-mask-arrow-righturl(...)Forward arrow icon mask
--formie-icon-mask-closeurl(...)Close/remove icon mask
--formie-button-primary-backgroundvar(--formie-color-primary)Primary button background
--formie-button-primary-background-hovervar(--formie-color-primary-hover)Primary button hover background
--formie-button-primary-text-colorvar(--formie-white)Primary button text color
--formie-button-primary-bordervar(--formie-border-width) solid transparentPrimary button border
--formie-button-primary-border-hovervar(--formie-border-width) solid var(--formie-color-primary-hover)Primary button hover border
--formie-button-primary-shadow-focus0 0 0 3px var(--formie-primary-300)Primary button focus shadow
--formie-button-secondary-bordervar(--formie-border-width) solid var(--formie-color-border)Secondary button border
--formie-button-secondary-border-hovervar(--formie-button-secondary-border)Secondary button hover border
--formie-button-secondary-backgroundvar(--formie-color-surface)Secondary button background
--formie-button-secondary-background-hovervar(--formie-neutral-100)Secondary button hover background
--formie-button-secondary-text-colorvar(--formie-color-heading)Secondary button text color
--formie-button-ghost-bordervar(--formie-border-width) solid transparentGhost button border
--formie-button-ghost-border-hovervar(--formie-button-ghost-border)Ghost button hover border
--formie-button-ghost-backgroundtransparentGhost button background
--formie-button-ghost-background-hovervar(--formie-neutral-100)Ghost button hover background
--formie-button-ghost-text-colorvar(--formie-color-heading)Ghost button text color
--formie-button-ghost-shadow-focusvar(--formie-button-shadow-focus)Ghost button focus shadow
--formie-button-link-text-colorvar(--formie-color-primary)Link-style button color
--formie-button-link-text-color-hovervar(--formie-color-primary-hover)Link-style button hover color
VariableDefaultPurpose
--formie-tab-padding-yvar(--formie-space-2)Page tab vertical padding
--formie-tab-padding-xvar(--formie-space-4)Page tab horizontal padding
--formie-tab-font-sizevar(--formie-font-size-sm)Page tab font size
--formie-gap-tabsvar(--formie-space-4)Gap below tab row
--formie-progress-height1.2remProgress bar height
--formie-progress-paddingvar(--formie-space-4)Progress wrapper padding
--formie-progress-size0.8remProgress text size
--formie-loading-sizevar(--formie-space-4)Spinner size
--formie-loading-margin-topcalc(var(--formie-loading-size) * -0.5)Spinner top offset
--formie-loading-margin-leftcalc(var(--formie-loading-size) * -0.5)Spinner left offset
--formie-loading-border-width2pxSpinner stroke width
--formie-loading-animationloading 0.5s infinite linearSpinner animation
--formie-loading-left50%Spinner horizontal anchor
--formie-loading-top50%Spinner vertical anchor
--formie-loading-z-index1Spinner stacking order
--formie-gap-pages0Gap between pages
--formie-gap-pagevar(--formie-space-4)Gap inside page wrapper
--formie-gap-page-container0Gap inside page container
--formie-gap-page-headervar(--formie-space-4)Page header gap
--formie-gap-page-bodyvar(--formie-space-4)Page body gap
--formie-gap-page-footervar(--formie-space-4)Page footer gap
--formie-gap-page-buttonsvar(--formie-space-4)Button group gap
--formie-title-page-sizevar(--formie-font-size-lg)Page title size

Rows, fields, and shared field surfaces

VariableDefaultPurpose
--formie-gap-rowsvar(--formie-space-4)Gap between row groups
--formie-gap-rowvar(--formie-space-4)Gap inside a row
--formie-gap-subfield-rowsvar(--formie-space-2)Gap between subfield rows
--formie-gap-subfield-rowvar(--formie-space-2)Gap inside a subfield row
--formie-gap-nested-field-rowsvar(--formie-space-2)Gap between nested field rows
--formie-gap-nested-field-rowvar(--formie-space-2)Gap inside a nested field row
--formie-subfield-row-column-min-width12remMinimum subfield column width
--formie-nested-field-row-column-min-width16remMinimum nested field column width
--formie-gap-errorsvar(--formie-space-2)Gap between form/page errors
--formie-gap-field-errorsvar(--formie-space-2)Gap between field errors
--formie-label-sizevar(--formie-font-size-sm)Field label size
--formie-meta-sizevar(--formie-font-size-sm)Meta/instructions size
--formie-control-height2.375remStandard control height
--formie-control-padding-yvar(--formie-space-2)Control vertical padding
--formie-control-padding-xvar(--formie-space-3)Control horizontal padding
--formie-control-font-sizevar(--formie-font-size-sm)Control font size
--formie-textarea-min-height9remTextarea minimum height
--formie-select-indicator-size1.4remSelect indicator size
--formie-list-indentvar(--formie-space-5)Indented list spacing
--formie-link-underline-offset0.15emLink underline offset
--formie-gap-fieldvar(--formie-space-2)Field wrapper gap
--formie-gap-field-layoutvar(--formie-space-2)Field layout gap
--formie-gap-field-contentvar(--formie-space-2)Field content gap
--formie-gap-field-controlvar(--formie-space-2)Field control gap
--formie-gap-optionsvar(--formie-space-2)Option list gap

Field-specific variables

VariableDefaultPurpose
--formie-summary-paddingvar(--formie-space-4)Summary block padding
--formie-gap-summaryvar(--formie-space-4)Gap inside summary blocks
--formie-file-summary-paddingvar(--formie-space-4)File summary padding
--formie-gap-file-summaryvar(--formie-space-3)Gap inside file summary
--formie-rich-text-min-height12remRich text editor minimum height
--formie-signature-width100%Signature canvas width
--formie-signature-height8remSignature canvas height
--formie-signature-backgroundvar(--formie-color-surface-subtle)Signature canvas background
--formie-signature-border1px solid var(--formie-color-border)Signature canvas border
--formie-signature-border-radiusvar(--formie-radius-sm)Signature canvas radius
--formie-signature-remove-button-top0Signature remove button top offset
--formie-signature-remove-button-right-14pxSignature remove button right offset
--formie-signature-remove-button-transformtranslate(0, -50%)Signature remove button transform
--formie-check-font-sizevar(--formie-font-size-sm)Checkbox/radio text size
--formie-check-line-heightvar(--formie-line-height-base)Checkbox/radio line height
--formie-check-margin-bottomvar(--formie-space-2)Checkbox/radio bottom margin
--formie-check-margin-rightvar(--formie-space-4)Checkbox/radio right margin
--formie-check-background-colorvar(--formie-color-surface-muted)Checkbox/radio control background
--formie-check-sizevar(--formie-space-4)Checkbox/radio control size
--formie-check-label-padding-leftvar(--formie-space-6)Checkbox/radio label left padding
--formie-check-label-line-heightvar(--formie-space-6)Checkbox/radio label line height
--formie-check-label-top0.3125remCheckbox/radio label top offset
--formie-check-label-transitionall 0.15s cubic-bezier(0.4, 0, 0.2, 1)Checkbox/radio label transition
--formie-check-label-background-colorvar(--formie-color-surface)Checkbox/radio label background
--formie-check-check-border-radius2pxCheckbox check radius
--formie-check-check-background-imageurl(...)Checkbox check icon
--formie-check-check-background-size8px autoCheckbox check icon size
--formie-check-radio-border-radius50%Radio indicator radius
--formie-check-radio-background-imageurl(...)Radio selected icon
--formie-check-radio-background-size8px autoRadio selected icon size
--formie-group-border1px solid var(--formie-color-border)Group field border
--formie-group-border-radiusvar(--formie-radius-sm)Group field radius
--formie-group-paddingvar(--formie-space-4)Group field padding
--formie-repeater-add-button-padding-leftvar(--formie-space-8)Repeater add button left padding
--formie-repeater-add-button-icon-maskvar(--formie-icon-mask-plus)Repeater add icon mask
--formie-repeater-add-button-height14pxRepeater add icon height
--formie-repeater-add-button-width14pxRepeater add icon width
--formie-repeater-add-button-leftvar(--formie-space-3)Repeater add icon left offset
--formie-repeater-remove-button-top0Repeater remove button top offset
--formie-repeater-remove-button-right-14pxRepeater remove button right offset
--formie-repeater-remove-button-transformtranslate(0, -50%)Repeater remove button transform
--formie-table-width100%Table width
--formie-table-margin-bottom1remTable bottom margin
--formie-table-border-collapsecollapseTable border-collapse mode
--formie-table-row-padding0.2remTable row cell padding
--formie-table-th-text-aligninheritTable heading alignment
--formie-table-th-font-size0.75remTable heading font size
--formie-table-th-font-weight600Table heading font weight
--formie-table-add-button-padding-leftvar(--formie-space-8)Table add button left padding
--formie-table-add-button-icon-maskvar(--formie-icon-mask-plus)Table add icon mask
--formie-table-add-button-height14pxTable add icon height
--formie-table-add-button-width14pxTable add icon width
--formie-table-add-button-leftvar(--formie-space-3)Table add icon left offset
--formie-table-remove-button-top0Table remove button top offset
--formie-table-remove-button-right-14pxTable remove button right offset
--formie-table-remove-button-transformtranslate(0, -50%)Table remove button transform

Override example

css
.marketing-signup .formie-form {
  --formie-color-primary: #0f766e;
  --formie-color-primary-hover: #115e59;
  --formie-color-heading: #0f172a;
  --formie-color-border: #cbd5e1;
  --formie-button-border-radius: 999px;
  --formie-loading-size: 1.25rem;
  --formie-textarea-min-height: 12rem;
}

Override guidance

  • Prefer CSS variable overrides before replacing component classes.
  • Scope overrides to a wrapper when only one form family needs a different treatment.
  • Keep semantic variables aligned with interaction state, especially focus, error, and success colors.
  • Use this page as the root variable reference; component-local variables that are introduced inside specific selectors are documented on their component pages when relevant.
Last updated: May 6, 2026, 3:46 PM