Тема и цвета
Источник правды
src/core/theme/colors.ts — единственный файл, определяющий все цвета приложения.
Архитектура
src/core/theme/
├── colors.ts # Определение всех цветов (light + dark)
├── provider.tsx # ThemeProvider (React context)
└── store.ts # Zustand store (persisted, AsyncStorage)Цвета бренда
Primary
| Токен | Hex | RGB | Использование |
|---|---|---|---|
| primary | #0077F0 | 0 119 240 | CTA, основные действия |
| primaryHover | #0060C2 | 0 96 194 | Нажатие на primary |
Семантические
| Токен | Hex | Использование |
|---|---|---|
| success | #6AB53A | Завершено, AI включен |
| warning | #D86D3F | Ожидание, AI выключен |
| error | #E53E3E | Ошибки, деструктивные |
Мессенджеры
| Мессенджер | Hex | Использование |
|---|---|---|
| Telegram | #0088CC | Badge, индикаторы |
#E4405F | Badge, индикаторы | |
#25D366 | Badge, индикаторы |
Light / Dark режимы
Цвета определены для обоих режимов в colors.ts. Значения конвертируются в RGB (space-separated) для CSS-переменных NativeWind.
Переключение
Через Zustand store с AsyncStorage persistence:
typescript
const { colorScheme, toggleColorScheme } = useTheme();NativeWind использование
tsx
<View className="bg-background dark:bg-background">
<Text className="text-foreground dark:text-foreground">
Текст
</Text>
</View>Градиенты
Определены в colors.ts, используются через expo-linear-gradient:
| Название | Цвета | Использование |
|---|---|---|
| blue | Blue → DarkBlue | Основные CTA кнопки |
| blueHorizontal | Blue → DarkBlue (горизонтально) | Акценты |
| authDiagonal | — | Фон экранов авторизации |
| green | Green → DarkGreen | Успешные действия |
| hero | — | Hero-секции |
Тени
typescript
shadows: {
card: { elevation: 2, opacity: 0.06 },
elevated: { elevation: 4, opacity: 0.12 },
floating: { elevation: 8, opacity: 0.15 },
}Шрифт
Inter — основной шрифт. Загружается через @expo-google-fonts/inter.
Доступные начертания:
- Inter_400Regular
- Inter_500Medium
- Inter_600SemiBold
- Inter_700Bold