Files
Kordant/packages/mobile/src/constants/theme.ts
Michael Freno a8a5930ced security: fix 10 security review findings (FRE-4572)
CRITICAL:
- SEC-001: Auth tokens now stored in SecureStore (Keychain/Keystore)
- SEC-002: Biometric bypass removed - alerts user and disables when unavailable

HIGH:
- SEC-003: Push projectId moved to EXPO_PUBLIC_EAS_PROJECT_ID env var
- SEC-004: Token refresh mechanism added with refreshSession/hydrateTokens
- SEC-005: debug already gated on __DEV__ (confirmed)

MEDIUM:
- SEC-006: All PII stores (darkwatch, voiceprint, spamshield, settings, auth) now use encrypted AsyncStorage
- SEC-007: Certificate pinning documented with TODO for production
- SEC-008: Login brute force protection: 5 attempts then 5-minute lockout

LOW:
- SEC-009: Watch list input validation with format checks per entity type
- SEC-010: Upgrade Plan button shows billing coming soon alert
2026-05-17 19:15:42 -04:00

96 lines
2.1 KiB
TypeScript

export const COLORS = {
primary: '#4f8cff',
primaryDark: '#3a6fd8',
secondary: '#6c5ce7',
accent: '#00cec9',
success: '#00b894',
warning: '#fdcb6e',
danger: '#ff6b6b',
background: '#0a0e1a',
backgroundLight: '#111827',
card: '#1a2035',
cardLight: '#243049',
text: '#e8eaf0',
textSecondary: '#8b95a8',
textMuted: '#5a6577',
border: '#2a3550',
overlay: 'rgba(0, 0, 0, 0.6)',
} as const;
export const SPACING = {
xs: 4,
sm: 8,
md: 16,
lg: 24,
xl: 32,
xxl: 48,
} as const;
export const FONT_SIZES = {
xs: 12,
sm: 14,
md: 16,
lg: 18,
xl: 20,
xxl: 24,
xxxl: 32,
} as const;
export const BORDER_RADIUS = {
sm: 4,
md: 8,
lg: 12,
xl: 16,
round: 999,
} as const;
export const SHADOWS = {
sm: { shadowColor: '#000', shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.1, shadowRadius: 2, elevation: 2 },
md: { shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15, shadowRadius: 4, elevation: 4 },
lg: { shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.2, shadowRadius: 8, elevation: 8 },
} as const;
export const API_URL = process.env.EXPO_PUBLIC_API_URL || 'https://api.shieldai.freno.me/api/v1';
export const EAS_PROJECT_ID = process.env.EXPO_PUBLIC_EAS_PROJECT_ID || '';
export const getSeverityColor = (severity: string): string => {
switch (severity) {
case 'critical': return COLORS.danger;
case 'high': return COLORS.warning;
case 'medium': return COLORS.accent;
default: return COLORS.textSecondary;
}
};
export const TIER_FEATURES = {
free: {
name: 'Free',
maxExposures: 5,
spamProtection: false,
voicePrint: false,
darkWatch: false,
},
basic: {
name: 'Basic',
maxExposures: 50,
spamProtection: true,
voicePrint: false,
darkWatch: true,
},
premium: {
name: 'Premium',
maxExposures: 200,
spamProtection: true,
voicePrint: true,
darkWatch: true,
},
enterprise: {
name: 'Enterprise',
maxExposures: -1,
spamProtection: true,
voicePrint: true,
darkWatch: true,
},
} as const;