Appearance
Theme
Custom Themes allow you to personalize your application's appearance by overriding the default colors, spacing, and visual elements. You can create a branded experience that matches your organization's visual identity.
What are Custom Themes?
Custom Themes let you:
- Brand your application with your organization's colors
- Customize the visual appearance of all interface elements
- Support both light and dark modes with different color schemes
- Override any design element using standard CSS variables
- Maintain consistency across your entire application
How Custom Themes Work
The platform uses a comprehensive set of design tokens (CSS custom properties) that control every aspect of the visual appearance. By providing your own CSS values, you can override these defaults to create a completely custom look and feel.
Theme Structure
Your custom theme consists of CSS rules that define color values, spacing, and other visual properties for both light and dark modes. You can use any CSS color format:
css
:root {
/* Light mode colors and properties - using different formats */
--primary: #3b82f6; /* Hex */
--accent: hsl(38, 92%, 50%); /* HSL */
--background: white; /* Named color */
--destructive: rgb(239, 68, 68); /* RGB */
/* ... more properties */
}
.dark {
/* Dark mode colors and properties */
--primary: #60a5fa; /* Lighter hex for dark mode */
--accent: hsl(38, 92%, 60%); /* Lighter HSL */
--background: #0f172a; /* Dark hex */
--destructive: rgb(248, 113, 113); /* Lighter RGB */
/* ... more properties */
}Setting Up Your Custom Theme
Step 1: Create the Theme Setting
- Navigate to your Settings in the admin interface
- Create a new setting with the name:
simple.branding.theme - In the value field, paste your custom CSS
Step 2: Define Your CSS
Your CSS should include both :root (light mode) and .dark (dark mode) selectors with your custom values.
Available Theme Properties
The platform uses the OKLCH color format for all theme variables. Below are all the available properties you can customize:
Light Mode Properties (:root)
css
:root {
/* Layout */
--radius: 0.625rem; /* Border radius for rounded corners */
/* Background colors */
--background: oklch(1 0 0); /* Main background */
--foreground: oklch(0.145 0 0); /* Main text color */
/* Card and panel colors */
--card: oklch(1 0 0); /* Card backgrounds */
--card-foreground: oklch(0.145 0 0); /* Card text */
/* Popover and dropdown colors */
--popover: oklch(1 0 0); /* Popover backgrounds */
--popover-foreground: oklch(0.145 0 0); /* Popover text */
/* Brand colors */
--primary: oklch(0.205 0 0); /* Primary buttons, links */
--primary-foreground: oklch(0.985 0 0); /* Text on primary elements */
/* Supporting colors */
--secondary: oklch(0.97 0 0); /* Secondary buttons */
--secondary-foreground: oklch(0.205 0 0); /* Text on secondary elements */
/* Subtle colors */
--muted: oklch(0.97 0 0); /* Subtle backgrounds */
--muted-foreground: oklch(0.556 0 0); /* Subtle text */
/* Accent colors */
--accent: oklch(0.97 0 0); /* Highlights, badges */
--accent-foreground: oklch(0.205 0 0); /* Text on accent elements */
/* Status colors */
--destructive: oklch(0.577 0.245 27.325); /* Error buttons, alerts */
/* Form elements */
--border: oklch(0.922 0 0); /* Border colors */
--input: oklch(0.922 0 0); /* Input field backgrounds */
--ring: oklch(0.708 0 0); /* Focus ring color */
/* Chart colors */
--chart-1: oklch(0.646 0.222 41.116); /* First chart color */
--chart-2: oklch(0.6 0.118 184.704); /* Second chart color */
--chart-3: oklch(0.398 0.07 227.392); /* Third chart color */
--chart-4: oklch(0.828 0.189 84.429); /* Fourth chart color */
--chart-5: oklch(0.769 0.188 70.08); /* Fifth chart color */
/* Sidebar colors */
--sidebar: oklch(0.985 0 0); /* Sidebar background */
--sidebar-foreground: oklch(0.145 0 0); /* Sidebar text */
--sidebar-primary: oklch(0.205 0 0); /* Sidebar primary elements */
--sidebar-primary-foreground: oklch(0.985 0 0); /* Text on sidebar primary */
--sidebar-accent: oklch(0.97 0 0); /* Sidebar accent elements */
--sidebar-accent-foreground: oklch(0.205 0 0); /* Text on sidebar accent */
--sidebar-border: oklch(0.922 0 0); /* Sidebar borders */
--sidebar-ring: oklch(0.708 0 0); /* Sidebar focus rings */
}Dark Mode Properties (.dark)
css
.dark {
/* Background colors */
--background: oklch(0.145 0 0); /* Main background */
--foreground: oklch(0.985 0 0); /* Main text color */
/* Card and panel colors */
--card: oklch(0.205 0 0); /* Card backgrounds */
--card-foreground: oklch(0.985 0 0); /* Card text */
/* Popover and dropdown colors */
--popover: oklch(0.269 0 0); /* Popover backgrounds */
--popover-foreground: oklch(0.985 0 0); /* Popover text */
/* Brand colors */
--primary: oklch(0.922 0 0); /* Primary buttons, links */
--primary-foreground: oklch(0.205 0 0); /* Text on primary elements */
/* Supporting colors */
--secondary: oklch(0.269 0 0); /* Secondary buttons */
--secondary-foreground: oklch(0.985 0 0); /* Text on secondary elements */
/* Subtle colors */
--muted: oklch(0.269 0 0); /* Subtle backgrounds */
--muted-foreground: oklch(0.708 0 0); /* Subtle text */
/* Accent colors */
--accent: oklch(0.371 0 0); /* Highlights, badges */
--accent-foreground: oklch(0.985 0 0); /* Text on accent elements */
/* Status colors */
--destructive: oklch(0.704 0.191 22.216); /* Error buttons, alerts */
/* Form elements */
--border: oklch(1 0 0 / 10%); /* Border colors with transparency */
--input: oklch(1 0 0 / 15%); /* Input field backgrounds with transparency */
--ring: oklch(0.556 0 0); /* Focus ring color */
/* Chart colors */
--chart-1: oklch(0.488 0.243 264.376); /* First chart color */
--chart-2: oklch(0.696 0.17 162.48); /* Second chart color */
--chart-3: oklch(0.769 0.188 70.08); /* Third chart color */
--chart-4: oklch(0.627 0.265 303.9); /* Fourth chart color */
--chart-5: oklch(0.645 0.246 16.439); /* Fifth chart color */
/* Sidebar colors */
--sidebar: oklch(0.205 0 0); /* Sidebar background */
--sidebar-foreground: oklch(0.985 0 0); /* Sidebar text */
--sidebar-primary: oklch(0.488 0.243 264.376); /* Sidebar primary elements */
--sidebar-primary-foreground: oklch(0.985 0 0); /* Text on sidebar primary */
--sidebar-accent: oklch(0.269 0 0); /* Sidebar accent elements */
--sidebar-accent-foreground: oklch(0.985 0 0); /* Text on sidebar accent */
--sidebar-border: oklch(1 0 0 / 10%); /* Sidebar borders with transparency */
--sidebar-ring: oklch(0.439 0 0); /* Sidebar focus rings */
}Color Format
The platform supports any valid CSS color format. You can use whichever format you're most comfortable with:
Supported Color Formats
OKLCH (Modern, recommended)
--primary: oklch(0.646 0.222 41.116);--border: oklch(1 0 0 / 10%);(with transparency)
Hex Colors
--primary: #3b82f6;--accent: #f59e0b;
RGB/RGBA
--primary: rgb(59, 130, 246);--accent: rgba(245, 158, 11, 0.9);
HSL/HSLA
--primary: hsl(217, 91%, 60%);--accent: hsla(38, 92%, 50%, 0.9);
Named Colors
--primary: blue;--background: white;
Color Format Recommendations
For Brand Consistency: Use hex colors if you have existing brand guidelines
css
:root {
--primary: #3b82f6; /* Your brand blue */
--accent: #f59e0b; /* Your brand orange */
}For Advanced Control: Use OKLCH for better color manipulation and wider gamut
css
:root {
--primary: oklch(0.646 0.222 217); /* Perceptually uniform */
--accent: oklch(0.7 0.15 38); /* Better color mixing */
}For Familiarity: Use HSL if you're comfortable with hue/saturation/lightness
css
:root {
--primary: hsl(217, 91%, 60%); /* Easy to adjust */
--accent: hsl(38, 92%, 50%); /* Intuitive values */
}Complete Theme Examples
Corporate Blue Theme (Using Hex Colors)
A professional theme with blue primary colors and orange accents:
css
:root {
--primary: #2563eb; /* Corporate blue */
--primary-foreground: white; /* White text */
--accent: #f59e0b; /* Orange accent */
--accent-foreground: #1f2937; /* Dark text */
--sidebar-primary: #2563eb; /* Match primary */
--chart-1: #2563eb; /* Blue charts */
--chart-2: #f59e0b; /* Orange charts */
--radius: 0.75rem; /* More rounded corners */
}
.dark {
--primary: #3b82f6; /* Lighter blue for dark mode */
--primary-foreground: #1f2937; /* Dark text */
--accent: #fbbf24; /* Lighter orange */
--accent-foreground: #1f2937; /* Dark text */
--sidebar-primary: #3b82f6; /* Match primary */
--chart-1: #3b82f6; /* Lighter blue charts */
--chart-2: #fbbf24; /* Lighter orange charts */
}Minimal Green Theme (Using HSL Colors)
A clean theme with green accents and minimal styling:
css
:root {
--primary: hsl(142, 76%, 36%); /* Forest green */
--primary-foreground: white; /* White text */
--accent: hsl(142, 69%, 58%); /* Light green accent */
--sidebar-primary: hsl(142, 76%, 36%); /* Match primary */
--chart-1: hsl(142, 76%, 36%); /* Green charts */
--chart-2: hsl(142, 69%, 58%); /* Light green charts */
--radius: 0.25rem; /* Minimal rounded corners */
}
.dark {
--primary: hsl(142, 69%, 58%); /* Lighter green for dark mode */
--primary-foreground: #1f2937; /* Dark text */
--accent: hsl(142, 69%, 68%); /* Lighter green accent */
--sidebar-primary: hsl(142, 69%, 58%); /* Match primary */
--chart-1: hsl(142, 69%, 58%); /* Lighter green charts */
--chart-2: hsl(142, 69%, 68%); /* Lighter green charts */
}Mixed Format Theme
You can even mix different color formats in the same theme:
css
:root {
--primary: #3b82f6; /* Hex for brand colors */
--accent: hsl(38, 92%, 50%); /* HSL for easy adjustment */
--background: white; /* Named colors for simplicity */
--destructive: rgb(239, 68, 68); /* RGB if you prefer */
--border: rgba(0, 0, 0, 0.1); /* RGBA for transparency */
}Customization Tips
Start Simple
Begin with just your brand colors and expand from there:
css
:root {
--primary: #YOUR_BRAND_COLOR; /* Use your existing brand hex */
--accent: #YOUR_ACCENT_COLOR; /* Your accent color */
}
.dark {
--primary: #LIGHTER_BRAND_COLOR; /* Lighter version for dark mode */
--accent: #LIGHTER_ACCENT_COLOR; /* Lighter accent */
}Test Both Modes
Always define colors for both light (:root) and dark (.dark) modes. Dark mode colors typically need to be lighter than their light mode counterparts for proper contrast.
Use Consistent Color Families
For a cohesive look, use colors from the same family with different shades:
css
/* All blues using hex */
--primary: #2563eb; /* Vibrant blue */
--secondary: #eff6ff; /* Very light blue */
--sidebar-primary: #2563eb; /* Same vibrant blue */
/* Or using HSL for easier variation */
--primary: hsl(217, 91%, 60%); /* Base blue */
--secondary: hsl(217, 91%, 95%); /* Same hue, very light */
--accent: hsl(217, 91%, 70%); /* Same hue, lighter */Consider Accessibility
Ensure sufficient contrast between foreground and background colors:
- Light backgrounds need dark text
- Dark backgrounds need light text
- Interactive elements should be easily distinguishable
Advanced Customization
Adding Custom Properties
You can add your own CSS custom properties for additional customization:
css
:root {
/* Standard properties */
--primary: #3b82f6;
/* Your custom properties */
--company-logo-filter: brightness(0) saturate(100%) invert(27%);
--header-height: 4rem;
--custom-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}Partial Themes
You don't need to define every property. Only include the ones you want to change:
css
:root {
--primary: #3b82f6;
--accent: #f59e0b;
--radius: 1rem;
}
.dark {
--primary: #60a5fa;
--accent: #fbbf24;
}Troubleshooting
Theme Not Applying
- Check the setting name: Must be exactly
simple.branding.theme - Verify CSS syntax: Ensure proper CSS structure with selectors and properties
- Clear browser cache: Hard refresh your browser (Ctrl+F5 or Cmd+Shift+R)
Colors Look Wrong
- Check color format: Ensure you're using valid CSS color values (
#3b82f6,rgb(59, 130, 246),hsl(217, 91%, 60%), etc.) - Verify both modes: Define colors for both
:rootand.dark - Test contrast: Ensure foreground colors work with background colors
- Check dark mode colors: Dark mode typically needs lighter colors than light mode
Some Elements Not Themed
- Check property names: Use exact property names like
--primarynot--primary-color - Include all variants: Some elements use
-foregroundvariants - Test thoroughly: Check different pages and interface states
Best Practices
Design Consistency
- Use a limited color palette - 2-3 main colors work better than many
- Maintain visual hierarchy - Primary actions should stand out
- Test in context - View your theme across different pages and features
Performance
- Keep CSS minimal - Only override what you need to change
- Use efficient selectors - Stick to
:rootand.dark - Avoid complex calculations - Use simple color values
Maintenance
- Document your choices - Keep notes about your color decisions
- Test updates - Verify your theme works after platform updates
- Version control - Keep backups of your theme CSS
Common Questions
Can I use hex colors instead of OKLCH?
Yes! The platform supports any valid CSS color format including hex (#3b82f6), RGB (rgb(59, 130, 246)), HSL (hsl(217, 91%, 60%)), OKLCH (oklch(0.6 0.25 217)), and named colors (blue).
How do I use my existing brand colors?
Simply use your existing brand colors in whatever format you have them:
- From brand guidelines:
--primary: #3b82f6; - From design tools:
--accent: rgb(245, 158, 11); - From CSS:
--background: hsl(0, 0%, 100%);
No conversion needed!
Will my theme work on mobile devices?
Yes, custom themes automatically work across all devices and screen sizes. The platform's responsive design system applies your colors consistently.
Can I theme individual pages differently?
No, custom themes apply globally across your entire application. This ensures a consistent user experience.
What happens if I make a mistake in my CSS?
Invalid CSS will be ignored, and the default theme will be used instead. Check your browser's developer console for CSS errors.
How do I reset to the default theme?
Simply delete the simple.branding.theme setting or clear its value field. The platform will immediately return to the default appearance.
Can I preview my theme before applying it?
Currently, themes are applied immediately when saved. We recommend testing changes in a development environment first.