Quick Start
1. Import the stylesheet
import "@auth0/universal-components-react/styles" ;
Tailwind v4 users: Add @import "@auth0/universal-components-react/tailwind" to your CSS file instead.shadcn users: No import needed - styles are already in your Tailwind build.
2. Add your brand color
:root {
--primary : #4f46e5 ; /* your brand color */
--primary-foreground : #ffffff ; /* text on buttons */
}
Done. All buttons, links, and active states now use your brand.
Theme Presets
Pass themeSettings to Auth0ComponentProvider to switch between built-in themes.
< Auth0ComponentProvider
themeSettings = { {
mode: "light" , // 'light' | 'dark'
theme: "default" , // 'default' | 'minimal' | 'rounded'
} }
>
< App />
</ Auth0ComponentProvider >
Preset Description defaultStandard Auth0 look with balanced shadows and borders minimalReduced visual weight - fewer shadows, lighter borders roundedIncreased border radii for a softer appearance
CSS Variables Reference
All visual properties are driven by CSS custom properties. Override them in your stylesheet or via the themeSettings.variables prop.
Colors (Light)
Colors (Dark)
Border Radius
Typography
:root {
/* Brand - the most impactful variables */
--primary : oklch ( 37 % 0 0 ); /* buttons, links, active states */
--primary-foreground : oklch ( 100 % 0 0 ); /* text on primary surfaces */
/_ Surfaces _/
--background : oklch ( 100 % 0 0 ); /_ page background _/
--foreground : oklch ( 9 % 0 0 ); /_ default text _/
--card : oklch ( 100 % 0 0 ); /_ card background _/
--card-foreground : oklch ( 0 % 0 0 ); /_ text inside cards _/
--popover : oklch ( 100 % 0 0 ); /_ dropdown / dialog background _/
--popover-foreground : oklch ( 9 % 0 0 ); /_ text inside popovers _/
--input : oklch ( 100 % 0 0 ); /_ input field background _/
/_ Secondary & muted _/
--secondary : oklch ( 96 % 0 0 );
--secondary-foreground : oklch ( 100 % 0 0 );
--muted : oklch ( 96 % 0 0 ); /_ disabled backgrounds _/
--muted-foreground : oklch ( 45 % 0 0 ); /_ placeholder text _/
/_ Accent & destructive _/
--accent : oklch ( 97 % 0 0 ); /_ hover highlights _/
--accent-foreground : oklch ( 9 % 0 0 );
--destructive : oklch ( 93 % 0.03 17 ); /_ error states _/
--destructive-foreground : oklch ( 36 % 0.14 17 );
/_ Borders _/
--border : oklch ( 89 % 0 0 );
--ring : oklch ( 89 % 0 0 ); /_ focus ring _/
}
.dark {
/* Brand */
--primary : oklch ( 70 % 0.15 250 ); /* brighter for dark backgrounds */
--primary-foreground : oklch ( 10 % 0 0 );
/* Surfaces */
--background : oklch ( 12 % 0 0 );
--foreground : oklch ( 95 % 0 0 );
--card : oklch ( 15 % 0 0 );
--card-foreground : oklch ( 95 % 0 0 );
--popover : oklch ( 15 % 0 0 );
--popover-foreground : oklch ( 95 % 0 0 );
--input : oklch ( 18 % 0 0 );
/* Secondary & muted */
--secondary : oklch ( 20 % 0 0 );
--secondary-foreground : oklch ( 95 % 0 0 );
--muted : oklch ( 20 % 0 0 );
--muted-foreground : oklch ( 60 % 0 0 );
/* Accent & destructive */
--accent : oklch ( 25 % 0 0 );
--accent-foreground : oklch ( 95 % 0 0 );
--destructive : oklch ( 30 % 0.15 17 );
--destructive-foreground : oklch ( 95 % 0.05 17 );
/* Borders */
--border : oklch ( 25 % 0 0 );
--ring : oklch ( 35 % 0 0 );
}
:root {
/* Common - adjust these for overall feel */
--radius-sm : 4 px ; /* tags, chips */
--radius-md : 6 px ; /* small elements */
--radius-lg : 10 px ; /* buttons, inputs */
--radius-xl : 12 px ; /* cards */
--radius-2xl : 16 px ; /* modals, large panels */
/_ Fine-grained ( rarely needed ) _/
--radius-xs : 2 px ;
--radius-3xl : 20 px ;
--radius-4xl : 24 px ;
--radius-5xl : 32 px ;
}
:root {
--font-size-page-header : 2.25 rem ; /* 36px - main title */
--font-size-heading : 1.5 rem ; /* 24px - section headings */
--font-size-title : 1.25 rem ; /* 20px - card titles */
--font-size-subtitle : 1.125 rem ; /* 18px - secondary headings */
--font-size-body : 1 rem ; /* 16px - body text */
--font-size-paragraph : 0.875 rem ; /* 14px - descriptions */
--font-size-label : 0.875 rem ; /* 14px - form labels */
--font-size-page-description : 0.875 rem ; /* 14px - subtitles */
}
Per-Component Styling
Every component accepts a styling prop for targeted overrides without affecting global styles.
< SsoProviderTable
styling = { {
variables: {
common: {
"--primary" : "#059669" , // override just for this component
},
light: { "--card" : "#f8fafc" },
dark: { "--card" : "#1e293b" },
},
classes: {
"SsoProviderTable-header" : "shadow-lg" ,
"SsoProviderTable-table" : "rounded-xl" ,
},
} }
/>
When to use:
variables - CSS custom property overrides scoped to the component
classes - Tailwind or custom classes applied to specific component parts
Available class targets by component
Each component exposes class targets for its major sections: SsoProviderCreate
SsoProviderCreate-header, SsoProviderCreate-wizard
ProviderSelect-root, ProviderDetails-root, ProviderConfigure-root
SsoProviderTable
SsoProviderTable-header, SsoProviderTable-table, SsoProviderTable-row
SsoProviderEdit
SsoProviderEdit-header, SsoProviderEdit-tabs
SsoProviderEdit-ssoTab, SsoProviderEdit-provisioningTab, SsoProviderEdit-domainsTab
DomainTable
DomainTable-header, DomainTable-table
DomainTable-createModal, DomainTable-configureModal, DomainTable-deleteModal
OrganizationDetailsEdit
OrganizationDetailsEdit-header, OrganizationDetailsEdit-form, OrganizationDetailsEdit-actions
Common Customizations
Brand Colors (Hex)
Convert your brand hex color to the format used in CSS:
:root {
/* Using hex directly */
--primary : #4f46e5 ;
--primary-foreground : #ffffff ;
/* Or oklch for better color manipulation */
--primary : oklch ( 50 % 0.2 265 ); /* purple */
}
Softer Corners
For a more rounded aesthetic across all components:
:root {
--radius-lg : 16 px ; /* buttons, inputs */
--radius-xl : 20 px ; /* cards */
--radius-2xl : 24 px ; /* modals */
}
Compact Typography
For denser UIs:
:root {
--font-size-page-header : 1.75 rem ;
--font-size-heading : 1.25 rem ;
--font-size-title : 1 rem ;
--font-size-body : 0.875 rem ;
}
Dark Mode
The components automatically respond to the mode setting in themeSettings. To sync with your app’s dark mode:
function App () {
const [ isDark , setIsDark ] = useState ( false );
return (
< Auth0ComponentProvider
themeSettings = { {
mode: isDark ? "dark" : "light" ,
} }
>
< YourApp />
</ Auth0ComponentProvider >
);
}
Or use system preference:
const prefersDark = window . matchMedia ( '(prefers-color-scheme: dark)' ). matches ;
< Auth0ComponentProvider
themeSettings = { { mode: prefersDark ? 'dark' : 'light' } }
>