Skip to content

Per-App Themes

Every RetailOS application shares the Bumi base palette but can define a unique accent color for brand identity. This page documents each app's accent and how to apply overrides.

App Accent Table

AppAccent HexAccent NameUsage Context
Store Admin#2D6B4AForest GreenPrimary store management portal
HO Finance#1E3A5FNavyFinancial seriousness, trust
HR Portal#92400EWarm BrownPeople-focused, approachable
Purchasing Portal#065F46TealSupply chain operations
Finance Portal#1E3A5FNavyAccounting, ledgers
GA Portal#78350FEarth BrownFacilities and assets
Promo Portal#9A3412Warm OrangeMarketing energy, campaigns
POS Electron#2D6B4AForest GreenFast cashier interface
Customer App#2D6B4AForest GreenBrand-consistent customer-facing
Stock App (Mobile)#065F46TealInventory operations
Stock App (Web)#065F46TealWarehouse management
Buyer App#92400EWarm BrownField purchasing

What the Accent Affects

The accent color replaces the default Forest Green (#2D6B4A) in these specific contexts:

ElementAccent Applied
Primary buttonsFill color
Active sidebar itemLeft border + text color
LinksText color
Focus ringsRing color
Active tab indicatorBottom border
Progress barsFill color
Toggle switches (on)Background

What stays the same

Semantic colors (success, warning, danger, info) are NOT affected by accent overrides. Success green (#2D7D46), warning amber (#D4910A), and danger red (#C4463A) remain constant across all apps.

Implementation

CSS Variable Override

In each app's globals.css, override the brand token:

css
/* ho-finance/app/globals.css */
:root {
  --color-brand: #1E3A5F;
  --color-brand-hover: #162D4A;
  --color-brand-light: #E4EAF0;
  --color-brand-subtle: #EEF2F6;
}

[data-theme='dark'] {
  --color-brand: #4A7AB0;
  --color-brand-hover: #3D6A9A;
  --color-brand-light: #1A2A3D;
  --color-brand-subtle: #152233;
}

Generating Variants

For each accent, generate these variants:

VariantFormulaExample (Navy #1E3A5F)
brandBase color#1E3A5F
brand-hover15% darker#162D4A
brand-light95% lightness, 20% saturation#E4EAF0
brand-subtle97% lightness, 10% saturation#EEF2F6
brand (dark)40% lighter#4A7AB0
brand-hover (dark)30% lighter#3D6A9A

Full Override Reference

HO Finance / Finance Portal (Navy)

css
:root { --color-brand: #1E3A5F; --color-brand-hover: #162D4A; --color-brand-light: #E4EAF0; --color-brand-subtle: #EEF2F6; }
[data-theme='dark'] { --color-brand: #4A7AB0; --color-brand-hover: #3D6A9A; --color-brand-light: #1A2A3D; --color-brand-subtle: #152233; }

HR Portal / Buyer App (Warm Brown)

css
:root { --color-brand: #92400E; --color-brand-hover: #78350F; --color-brand-light: #FEF3C7; --color-brand-subtle: #FFFBEB; }
[data-theme='dark'] { --color-brand: #D97706; --color-brand-hover: #B45309; --color-brand-light: #3D2E0A; --color-brand-subtle: #2D2208; }

Purchasing / Stock App (Teal)

css
:root { --color-brand: #065F46; --color-brand-hover: #064E3B; --color-brand-light: #D1FAE5; --color-brand-subtle: #ECFDF5; }
[data-theme='dark'] { --color-brand: #34D399; --color-brand-hover: #2AB884; --color-brand-light: #0A3328; --color-brand-subtle: #072A20; }

GA Portal (Earth Brown)

css
:root { --color-brand: #78350F; --color-brand-hover: #652D0C; --color-brand-light: #FFEDD5; --color-brand-subtle: #FFF7ED; }
[data-theme='dark'] { --color-brand: #C2712C; --color-brand-hover: #A86124; --color-brand-light: #3D2510; --color-brand-subtle: #2D1B0C; }

Promo Portal (Warm Orange)

css
:root { --color-brand: #9A3412; --color-brand-hover: #7C2D12; --color-brand-light: #FFEDD5; --color-brand-subtle: #FFF7ED; }
[data-theme='dark'] { --color-brand: #EA580C; --color-brand-hover: #C2410C; --color-brand-light: #3D1F0A; --color-brand-subtle: #2D1708; }

Mobile App Themes

For React Native apps, override the theme constants:

ts
// stock-app-mobile/lib/theme.ts
import { BumiColors } from '@retailos/tokens'

export const AppColors = {
  ...BumiColors,
  brand: '#065F46',       // Teal override
  brandHover: '#064E3B',
  brandLight: '#D1FAE5',
}

Contrast Verification

All accent colors must pass WCAG AA contrast requirements:

AccentOn White (light)On #1C1A17 (dark)
Forest Green #2D6B4A5.2:1 pass(use #4A9E72 4.8:1)
Navy #1E3A5F7.1:1 pass(use #4A7AB0 5.1:1)
Warm Brown #92400E5.4:1 pass(use #D97706 6.2:1)
Teal #065F465.8:1 pass(use #34D399 8.4:1)
Earth Brown #78350F5.9:1 pass(use #C2712C 5.3:1)
Warm Orange #9A34124.8:1 pass(use #EA580C 4.6:1)

Shared components

Shared component libraries should never hard-code colors. Always reference CSS variables so the accent automatically adapts per app.

Don't

  • Don't use accent colors for semantic meaning (success/danger/warning) --- those are fixed
  • Don't create more than 4 variants per accent (base, hover, light, subtle)
  • Don't change the accent color at runtime --- it is fixed per application build

RetailOS - Sistem ERP Retail Modern untuk Indonesia