Customization
14 min read
The appearance option restyles the Footprint flow to match your product's design. Every SDK accepts it: JavaScript, Expo, React Native, Flutter, Swift, and Kotlin. A complete example lives in onefootprint/examples.
Variables
Variables are the first place to theme the flow. Each one maps to a CSS variable, so you can inspect the result with your browser's DOM explorer. Set a value in any unit you prefer: pixels, rem, hex, rgb, and so on. The tables below list every variable.
This call squares the corners and recolors the primary button:
typescript
Status colours
| Variable | Description |
|---|---|
colorError | Sets the error text color |
colorSuccess | Sets the success text color |
colorWarning | Sets the warning text color |
Global variables
A higher-level token sets the default for a group of lower-level tokens. The table lists each higher-level token and the tokens it sets by default.
| Higher-level token | Lower-level tokens influenced |
|---|---|
borderRadius | buttonBorderRadius, containerBorderRadius, inputBorderRadius, dropdownBorderRadius, radioSelectBorderRadius, checkboxBorderRadius |
colorError | borderColorError, hintErrorColor, linkButtonDestructiveColor |
colorAccent | linkColor, linkButtonColor, linkButtonHoverColor, linkButtonActiveColor, radioSelectSelectedColor, radioSelectSelectedBorderColor, radioSelectComponentsIconSelectedBg, checkboxCheckedBg |
borderColorError | inputErrorBorderColor |
Set a higher-level token to propagate one choice across its group. Set a lower-level token individually to override that default for a single component.
Container
Wraps the entire Footprint component.
| Variable | Description |
|---|---|
containerBg | Sets the container body background color |
containerElevation | Determines the container's shadow |
containerBorder | Defines the container's border |
containerBorderRadius | Defines the container's border radius |
containerMaxWidth | Defines the container's max width |
For inline integrations, containerMaxWidth (for example containerMaxWidth: '480px') constrains and centers the content while the outer container fills the available space. The modal variant has a predetermined width.
Link
Links behave like standard anchor tags; the Terms of Service link is a common example. To style more properties or states, use rules.
Links take their color from colorAccent, which also drives link buttons and radio selection.
| Variable | Description |
|---|---|
colorAccent | Defines the link color and link buttons |
Label
The label is the native HTML element paired with an input field.
| Variable | Description |
|---|---|
labelColor | Sets the label color |
labelFont | Determines the label font |
Input
Input covers every input field in the flow, including the PIN, phone, and address inputs.
| Variable | Description |
|---|---|
inputBorderRadius | Determines the input border radius |
inputBorderWidth | Sets the input border width |
inputFont | Sets the input font |
inputHeight | Sets the input height |
inputPlaceholderColor | Defines the input placeholder color |
inputColor | Sets the input color |
inputBg | Defines the input background color |
inputBorderColor | Sets the input border color |
inputHoverBg | Determines the input background color when hovered |
inputHoverBorderColor | Sets the input border color when hovered |
inputFocusBg | Determines the input background color when focused |
inputFocusBorderColor | Sets the input border color when focused |
inputFocusElevation | Sets the input box shadow when focused |
inputErrorBg | Determines the input background color when an error is present |
inputErrorBorderColor | Sets the input border color when an error is present |
inputErrorHoverBg | Determines the input background color when an error is present and hovered |
inputErrorHoverBorderColor | Sets the input border color when an error is present and hovered |
inputErrorFocusBg | Determines the input background color when an error is present and focused |
inputErrorFocusBorderColor | Sets the input border color when an error is present and focused |
inputErrorFocusElevation | Sets the input box shadow when an error is present and focused |
inputElevation | Determines the input box shadow |
inputHoverElevation | Sets the input box shadow when hovered |
inputErrorElevation | Sets the input box shadow when an error is present |
inputErrorHoverElevation | Sets the input box shadow when an error is present and hovered |
Hint
Hints are the text below an input field. They show an error or extra information.
| Variable | Description |
|---|---|
hintColor | Sets the hint color |
hintErrorColor | Determines the hint color when the input field is in error state |
hintFont | Defines the hint font |
LinkButton
A link button is the standard button without a background.
| Variable | Description |
|---|---|
linkButtonColor | Sets the button color |
linkButtonHoverColor | Defines the button color when hovered |
linkButtonActiveColor | Sets the button color when pressed |
linkButtonDestructiveColor | Determines the button color when it signifies a destructive action |
linkButtonDestructiveHoverColor | Sets the button color when it signifies a destructive action and is hovered |
linkButtonDestructiveActiveColor | Determines the button color when it signifies a destructive action and pressed |
Button
Variables for the primary and secondary buttons.
| Variable | Description |
|---|---|
buttonBorderRadius | Defines the button border radius |
buttonBorderWidth | Sets the button border width |
buttonPrimaryBg | Sets the primary button's background color |
buttonPrimaryColor | Defines the primary button's color |
buttonPrimaryBorderColor | Determines the primary button's border color |
buttonPrimaryHoverBg | Sets the primary button's background color when hovered |
buttonPrimaryHoverColor | Defines the primary button's color when hovered |
buttonPrimaryHoverBorderColor | Determines the primary button's border color when hovered |
buttonPrimaryActiveBg | Sets the primary button's background color when activated |
buttonPrimaryActiveColor | Defines the primary button's color when activated |
buttonPrimaryActiveBorderColor | Determines the primary button's border color when activated |
buttonPrimaryDisabledBg | Sets the primary button's background color when disabled |
buttonPrimaryDisabledColor | Defines the primary button's color when disabled |
buttonPrimaryDisabledBorderColor | Determines the primary button's border color when disabled |
buttonPrimaryLoadingBg | Sets the primary button's background color when loading |
buttonPrimaryLoadingColor | Defines the primary button's color when loading |
buttonsPrimaryLoadingBorderColor | Sets the primary button's border color when loading |
buttonSecondaryBg | Sets the secondary button's background color |
buttonSecondaryColor | Defines the secondary button's color |
buttonSecondaryBorderColor | Determines the secondary button's border color |
buttonSecondaryHoverBg | Sets the secondary button's background color when hovered |
buttonSecondaryHoverColor | Defines the secondary button's color when hovered |
buttonSecondaryHoverBorderColor | Determines the secondary button's border color when hovered |
buttonSecondaryActiveBg | Sets the secondary button's background color when activated |
buttonSecondaryActiveColor | Defines the secondary button's color when activated |
buttonSecondaryActiveBorderColor | Determines the secondary button's border color when activated |
buttonSecondaryDisabledBg | Sets the secondary button's background color when disabled |
buttonSecondaryDisabledColor | Defines the secondary button's color when disabled |
buttonSecondaryDisabledBorderColor | Determines the secondary button's border color when disabled |
buttonSecondaryLoadingBg | Sets the secondary button's background color when loading |
buttonSecondaryLoadingColor | Defines the secondary button's color when loading |
Dropdown
Dropdowns pair with input fields: the phone input uses one for the list of countries, and the address input uses one for the list of results.
| Variable | Description |
|---|---|
dropdownBg | The dropdown background color |
dropdownHoverBg | The dropdown background color when hovered |
dropdownBorderColor | The dropdown border color when activated |
dropdownBorderWidth | The dropdown border width |
dropdownBorderRadius | The dropdown border radius |
dropdownElevation | The dropdown box shadow |
dropdownColorPrimary | The dropdown primary color |
dropdownColorSecondary | The dropdown secondary color |
dropdownFooterBg | The dropdown footer background |
Radio select
Radio select appears in two places. When an onboarding starts with a sandbox key, it selects the outcome; that choice is only visible in sandbox and hidden from users. During identity document verification, it lets the user pick which type of identity document to verify with.
| Variable | Description |
|---|---|
radioSelectBg | The background of the radio select component |
radioSelectColor | The text color when not selected |
radioSelectHoverColor | The hover text color when not selected |
radioSelectSelectedColor | The text color when selected |
radioSelectSelectedHoverColor | The hover text color when selected |
radioSelectBorderRadius | The border radius of the radio select component |
radioSelectBorderWidth | The border width of the radio select component |
radioSelectBorderColor | The border color of the radio select component |
radioSelectHoverBg | The hover background of the radio select component |
radioSelectHoverBorderColor | The hover border color of the radio select component |
radioSelectSelectedBg | The background of the selected radio item |
radioSelectSelectedBorderColor | The border color of the selected radio item |
radioSelectComponentsIconBg | The background of the icon in the radio item |
radioSelectComponentsIconHoverBg | The hover background of the icon in the radio item |
radioSelectComponentsIconSelectedBg | The background of the selected icon in the radio item |
radioSelectComponentsIconColor | The color of the icon in the radio item |
radioSelectComponentsIconHoverColor | The hover color of the icon in the radio item |
radioSelectComponentsIconSelectedColor | The color of the selected icon in the radio item |
radioSelectComponentsIconSelectedHoverColor | The hover color of the selected icon in the radio item |
Checkbox
Checkboxes appear wherever the flow asks for consent or a multi-choice selection.
| Variable | Description |
|---|---|
checkboxBg | Defines the checkbox background color |
checkboxBorderColor | Sets the checkbox border color |
checkboxBorderRadius | Determines the checkbox border radius |
checkboxBorderWidth | Sets the checkbox border width |
checkboxCheckedBg | Defines the checkbox background color when checked |
checkboxCheckedBorderColor | Sets the checkbox border color when checked |
checkboxCheckedCheckmarkColor | Sets the checkmark color when checked |
checkboxHoverBg | Defines the checkbox background color when hovered |
checkboxHoverBorderColor | Sets the checkbox border color when hovered |
checkboxDisabledBg | Defines the checkbox background color when disabled |
checkboxDisabledBorderColor | Sets the checkbox border color when disabled |
checkboxErrorBorderColor | Sets the checkbox border color when an error is present |
Custom fonts
Footprint loads custom fonts from Google Fonts. Pass a fontSrc URL in the appearance option, and the SDK loads the font and applies it across the component.
We strongly recommend also setting fontFamily in variables so the font applies consistently. The SDK tries to extract the font family from the Google Fonts URL, but setting fontFamily yourself gives you control over the value and the fallback chain.
This call loads Poppins and applies it to the flow:
typescript1import "@onefootprint/footprint-js/dist/footprint-js.css";
2import { onboarding } from "@onefootprint/footprint-js";
3
4onboarding.initialize({
5 onboardingSessionToken: "obtok_...",
6 onComplete: (validationToken) => {
7 console.log(validationToken);
8 },
9 appearance: {
10 fontSrc:
11 "https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap",
12 variables: {
13 fontFamily: "'Poppins', sans-serif",
14 },
15 },
16});
fontSrc. Other font sources may produce unexpected results.| Property | Location | Description |
|---|---|---|
fontSrc | appearance.fontSrc | A Google Fonts URL that loads the font stylesheet |
fontFamily | appearance.variables.fontFamily | The CSS font-family value applied to the component |
Rules
Use rules for styles the variables do not cover. A rule applies arbitrary CSS to one of the elements listed below.
This call animates buttons on hover, adds a focus ring to inputs, and underlines hovered links:
typescript1import '@onefootprint/footprint-js/dist/footprint-js.css';
2import { onboarding } from '@onefootprint/footprint-js';
3
4onboarding.initialize({
5 onboardingSessionToken: 'obtok_UxM6Vbvk2Rcy1gzcSuXgk3sj3L9I0pAnNH',
6 onComplete: (validationToken) => {
7 console.log(validationToken);
8 },
9 appearance: {
10 rules: {
11 button: {
12 transition: 'all .2s linear',
13 },
14 'button:hover': {
15 transform: 'translateY(-1px)',
16 },
17 'input:focus': {
18 boxShadow: '0 0 0 4px rgba(74, 36, 219, 0.12)',
19 },
20 'link:hover': {
21 textDecoration: 'underline',
22 },
23 }
24 },
25});
Available rules
| Selector | Description |
|---|---|
button | The button |
button:hover | The button, hovered |
button:focus | The button, focused |
button:active | The button, active |
input | The input |
input:hover | The input, hovered |
input:focus | The input, focused |
input:active | The input, active |
pinInput | The OTP pin input |
pinInput:hover | The pin input, hovered |
pinInput:focus | The pin input, focused |
pinInput:active | The pin input, active |
checkbox | The checkbox |
checkbox:hover | The checkbox, hovered |
checkbox:checked | The checkbox, checked |
checkbox:disabled | The checkbox, disabled |
label | The input label |
hint | The hint below an input |
link | The link |
link:hover | The link, hovered |
link:focus | The link, focused |
linkButton | The link button |
linkButton:hover | The link button, hovered |
linkButton:focus | The link button, focused |
linkButton:active | The link button, active |
pageHeader | The page header |
pageHeaderTitle | The page header title |
pageHeaderSubtitle | The page header subtitle |
Localization configuration
Setting the language and locale
The l10n (localization) option sets the language and locale of the flow.
For Spanish-speaking users, set language to "es" and the flow renders in Spanish:
typescript1import "@onefootprint/footprint-js/dist/footprint-js.css";
2import { onboarding } from "@onefootprint/footprint-js";
3
4const l10n = {
5 language: "es",
6};
7
8onboarding.initialize({
9 onboardingSessionToken: "obtok_UxM6Vbvk2Rcy1gzcSuXgk3sj3L9I0pAnNH",
10 onComplete: (validationToken) => {
11 console.log(validationToken);
12 },
13 l10n,
14});
For users in Mexico, also set locale to "es-MX" (Spanish, Mexico). The locale drives how Footprint formats dates and numbers and which cultural conventions it follows:
typescript1import "@onefootprint/footprint-js/dist/footprint-js.css";
2import { onboarding } from "@onefootprint/footprint-js";
3
4const l10n = {
5 language: "es",
6 locale: "es-MX",
7};
8
9onboarding.initialize({
10 onboardingSessionToken: "obtok_UxM6Vbvk2Rcy1gzcSuXgk3sj3L9I0pAnNH",
11 onComplete: (validationToken) => {
12 console.log(validationToken);
13 },
14 l10n,
15});
Available l10n properties
| Property | Type | Description |
|---|---|---|
locale | en-US, es-MX | Optional. Locale for date/number formatting |
language | en, es | Language code for UI text localization |