mobileapp / src /theme /colors.ts
Antaram Dev Bot
feat: complete ANTARAM.ORG ride-sharing app frontend
5c876be
import { MD3LightTheme, MD3DarkTheme } from 'react-native-paper';
// ─── Antaram Brand Colors ──────────────────────────────────────────────────────
const antaramBrand = {
/** Primary green – main brand color */
primary: '#1B6B4D',
/** Lighter tint of the primary green */
primaryLight: '#2E9970',
/** Darker shade of the primary green */
primaryDark: '#0F4A35',
/** Accent warm amber for CTAs and highlights */
accent: '#E8A838',
/** Lighter tint of the accent amber */
accentLight: '#F0C060',
/** Darker shade of the accent amber */
accentDark: '#C88820',
/** Surface background for the app */
background: '#F7F5F0',
/** Slightly darker surface used for cards and elevated containers */
surface: '#FFFFFF',
/** Elevated surface color for modals and dialogs */
surfaceElevated: '#FFFFFF',
/** Error / danger color */
error: '#D32F2F',
/** Warning color */
warning: '#F57C00',
/** Success color */
success: '#2E7D32',
/** Informational / info color */
info: '#1565C0',
};
// ─── Extended semantic status colors (same in light & dark) ────────────────────
const antaramStatus = {
/** A ride is currently in progress */
rideActive: '#1B6B4D',
/** A ride match has been confirmed */
rideMatched: '#E8A838',
/** The user is searching for a ride */
rideSearching: '#1565C0',
/** The user's online / available indicator */
onlineIndicator: '#4CAF50',
/** The user's offline indicator */
offlineIndicator: '#9E9E9E',
};
// ─── Light-mode M3 overrides ───────────────────────────────────────────────────
const lightOverrides = {
primary: antaramBrand.primary,
onPrimary: '#FFFFFF',
primaryContainer: '#A8DCC8',
onPrimaryContainer: '#002114',
secondary: '#4E6355',
onSecondary: '#FFFFFF',
secondaryContainer: '#D0E8D6',
onSecondaryContainer: '#0B1F14',
tertiary: antaramBrand.accent,
onTertiary: '#FFFFFF',
tertiaryContainer: '#FFE0A0',
onTertiaryContainer: '#3D2E00',
error: antaramBrand.error,
onError: '#FFFFFF',
errorContainer: '#FFDAD6',
onErrorContainer: '#410002',
background: antaramBrand.background,
onBackground: '#1A1C19',
surface: antaramBrand.surface,
onSurface: '#1A1C19',
surfaceVariant: '#DDE5DB',
onSurfaceVariant: '#414942',
outline: '#717971',
outlineVariant: '#C1C9BE',
shadow: '#000000',
scrim: '#000000',
inverseSurface: '#2F312D',
inverseOnSurface: '#F0F1EC',
inversePrimary: '#8DCEAF',
elevation: {
level0: 'transparent',
level1: 'rgba(0, 0, 0, 0.05)',
level2: 'rgba(0, 0, 0, 0.08)',
level3: 'rgba(0, 0, 0, 0.11)',
level4: 'rgba(0, 0, 0, 0.12)',
level5: 'rgba(0, 0, 0, 0.14)',
},
};
// ─── Dark-mode M3 overrides ────────────────────────────────────────────────────
const darkOverrides = {
primary: '#8DCEAF',
onPrimary: '#003824',
primaryContainer: '#005237',
onPrimaryContainer: '#A8DCC8',
secondary: '#B4CCBA',
onSecondary: '#203528',
secondaryContainer: '#374B3E',
onSecondaryContainer: '#D0E8D6',
tertiary: antaramBrand.accentLight,
onTertiary: '#3D2E00',
tertiaryContainer: '#C88820',
onTertiaryContainer: '#FFE0A0',
error: '#FFB4AB',
onError: '#690005',
errorContainer: '#93000A',
onErrorContainer: '#FFDAD6',
background: '#1A1C19',
onBackground: '#E2E3DD',
surface: '#1A1C19',
onSurface: '#E2E3DD',
surfaceVariant: '#414942',
onSurfaceVariant: '#C1C9BE',
outline: '#8B938A',
outlineVariant: '#414942',
shadow: '#000000',
scrim: '#000000',
inverseSurface: '#E2E3DD',
inverseOnSurface: '#2F312D',
inversePrimary: '#1B6B4D',
elevation: {
level0: 'transparent',
level1: 'rgba(0, 0, 0, 0.12)',
level2: 'rgba(0, 0, 0, 0.17)',
level3: 'rgba(0, 0, 0, 0.22)',
level4: 'rgba(0, 0, 0, 0.25)',
level5: 'rgba(0, 0, 0, 0.30)',
},
};
// ─── Color type helpers ─────────────────────────────────────────────────────────
/** All Antaram brand colors (mode-independent) */
export interface AntaramBrandColors {
primary: string;
primaryLight: string;
primaryDark: string;
accent: string;
accentLight: string;
accentDark: string;
background: string;
surface: string;
surfaceElevated: string;
error: string;
warning: string;
success: string;
info: string;
}
/** Semantic status colors */
export interface AntaramStatusColors {
rideActive: string;
rideMatched: string;
rideSearching: string;
onlineIndicator: string;
offlineIndicator: string;
}
/** Combined app colors type */
export interface AppColors {
brand: AntaramBrandColors;
status: AntaramStatusColors;
}
// ─── Exports ────────────────────────────────────────────────────────────────────
export const antaramColors = {
brand: antaramBrand,
status: antaramStatus,
} satisfies AppColors;
export { lightOverrides, darkOverrides };