Branding Guide
How to re-theme Byteion for any brand using the token system.
Overview
Byteion was designed for white-label SaaS, client dashboards, admin templates, and starter kits. Most brand changes should happen through CSS variables and Tailwind configuration — not component markup. A brand theme typically includes color, typography, radius, logo assets, metadata, and dark-mode values.
Branding workflow
- Choose the primary brand color.
- Set
--primaryand--primary-foregroundin HSL format. - Align
--ringwith the brand color for focus states. - Update secondary / accent colors if the brand needs them.
- Load and configure the brand font in Tailwind config.
- Adjust radius tokens to match the brand personality.
- Replace logos, favicon, social image, and app metadata.
- Update dark-mode variables.
- Test key screens and contrast ratios.
Brand colors
Start with the primary color. Use raw HSL channels — no hsl() wrapper, no hex, no rgb():
:root {
--primary: 270 100% 50%; /* Brand purple */
--primary-foreground: 0 0% 100%; /* Text on primary — must contrast */
--ring: 270 100% 50%; /* Focus ring — align with brand */
}
This single change updates every button, link, focus ring, active indicator, and primary-colored element across all components. The --primary-foreground token must have enough contrast against --primary (aim for WCAG AA 4.5:1). The --ring variable controls focus ring color and should usually align with the brand.
Full brand palette
For a more complete brand palette, include secondary and accent tokens. Use these for subtle surfaces, tabs, sidebars, highlights, and non-primary UI:
:root {
--primary: 270 100% 50%;
--primary-foreground: 0 0% 100%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--accent: 270 100% 97%;
--accent-foreground: 270 70% 30%;
--ring: 270 100% 50%;
}
Do not change status colors like --success, --warning, --danger, or --info unless the brand system requires it and you verify contrast remains safe on all surfaces.
Brand typography
Load the font first (via Google Fonts, rsms.me, or self-hosted), then configure Tailwind. For production templates, self-hosting improves reliability and privacy:
module.exports = {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
},
};
Keep fonts readable for dashboards and dense tables. Avoid decorative fonts for forms, tables, and admin workflows — prioritize legibility at small sizes.
Border radius
Radius expresses brand personality through component corners. Each token targets a specific component family:
- Lower radius — enterprise, finance, technical, serious (0.25rem–0.375rem)
- Medium radius — balanced SaaS / admin default (0.5rem–0.75rem)
- Larger radius — friendly, education, consumer, playful (0.75rem–1.25rem)
:root {
--radius-button: 0.375rem; /* Buttons */
--radius-input: 0.5rem; /* Inputs, selects, textareas */
--radius-badge: 9999px; /* Badges, tags, pills */
--radius-card: 0.75rem; /* Cards, panels */
--radius-panel: 1rem; /* Sidebars, drawer panels */
--radius-overlay: 1.25rem; /* Modals, dialogs, popovers */
}
Logo and asset replacement
- Navbar logo
- Sidebar logo
- Auth / login page logo
- Favicon
- App icon / PWA manifest icons (if used)
- Social preview image (Open Graph)
- Email logo (if the starter kit sends transactional emails)
- Page title
- Meta description
- Open Graph title and image
- Product name in footer, sidebar, and settings pages
Dark mode branding
Do not only update light-mode variables. Add matching .dark overrides so the brand looks intentional in both modes. You may need to lighten or darken the primary color for dark-mode contrast:
.dark, [data-theme="dark"] {
--primary: 270 95% 65%; /* Lighter on dark bg */
--primary-foreground: 240 10% 3.9%;
--ring: 270 95% 65%;
}
Ensure --primary and --primary-foreground still pass WCAG AA contrast against the dark background. See the Dark Mode page for persistence and toggling.
Multiple client brands
Scope brand variables under a [data-brand] selector to support multiple clients in a single codebase. Useful for white-label SaaS, client dashboards, template previews, admin theme switchers, and marketplace demos:
[data-brand="acme"] {
--primary: 270 100% 50%;
--primary-foreground: 0 0% 100%;
--ring: 270 100% 50%;
}
[data-brand="nova"] {
--primary: 160 84% 39%;
--primary-foreground: 0 0% 100%;
--ring: 160 84% 39%;
}
Apply the brand by setting data-brand="acme" on <html> or a scoped container. Each brand can also define its own .dark overrides.
White-label checklist
- Change
--primary,--primary-foreground, and--ring - Update
--secondary/--accentif the brand needs them - Update dark-mode brand values
- Load and configure the brand font
- Adjust radius tokens
- Replace logo, favicon, social image, and metadata
- Update product name in the UI
- Test auth, dashboard, tables, forms, modals, dropdowns, and settings pages
- Test light and dark mode
- Verify contrast ratios for all foreground/background pairs
- Run visual regression and accessibility checks if available
Do and Don't
Do
- Start branding from CSS variables
- Keep HSL format for color variables
- Pair brand background tokens with foreground tokens
- Align focus ring with brand identity
- Test real screens, not only isolated buttons
Don't
- Hardcode brand colors inside shared components
- Change
--primarywithout checking--primary-foregroundcontrast - Forget dark mode — update both
:rootand.dark - Use decorative fonts for dense dashboards
- Replace component markup before trying token-level branding
Developer tips
bg-primary/50 and similar utilities only work when variables store raw HSL channels without a hsl() wrapper.
• Treat branding as a theme file. Keep your brand overrides in a dedicated CSS file that can be reused across projects.Related
- Theming Guide — Full customization reference
- CSS Variables — Runtime token reference
- Colors — Semantic and palette color tokens
- Dark Mode — Light / dark brand values and toggling
- Tailwind Preset — How variables map into utilities
Unlock Premium Patterns
Get access to copy-paste ready Pro blocks, SaaS templates, and advanced component patterns.
Explore Pro Components