# Frontend (`src/`)

React 19 + TypeScript + Vite. UI поверх Tauri IPC (см.
[../src-tauri/README.md](../src-tauri/README.md)) — работает как в
Tauri-webview (десктоп/Android), так и в обычном браузере при `pnpm dev`
(Tauri API в этом случае недоступны, см. `src/lib/platform.ts`).

## Поддиректории

| Путь | Назначение |
|---|---|
| [`pages/`](#pages) | Роуты приложения |
| [`features/README.md`](features/README.md) | Крупные UI-фичи (кнопка VPN, селектор сервера, меню...) |
| [`store/README.md`](store/README.md) | Zustand-стейт |
| [`lib/README.md`](lib/README.md) | API-клиент, платформенные хелперы |
| `components/ui/` | Автогенерированные примитивы shadcn/radix — не редактируются вручную, без отдельного README |
| `components/shared/` | Собственные переиспользуемые компоненты (кнопка-тумблер VPN, карточка настройки) |
| `assets/flags/` | Локальные SVG-флаги для статического списка серверов (см. `store/README.md`) — принципиально не грузятся с внешнего CDN, см. комментарий в `features/CountrySelect.tsx` |
| `locales/` | `en.json` / `ru.json` для i18next |

## Точки входа

- **`main.tsx`** — монтирует `<App/>`, инициализирует `i18n.js`.
- **`App.tsx`** — роутер, сплэш-скрин, фон-канвас (`matrix-engine`), корневой layout (Header + BurgerMenu + Outlet).
- **`ThemeProvider.tsx`** — тёмная/светлая тема с синхронизацией в `localStorage` и системной темой; хук `useTheme()`.
- **`i18n.js`** — конфиг react-i18next (RU/EN, автоопределение языка).

## Роуты (`pages/`)

- `Home.tsx` — главный экран: `VpnControl` + `CountrySelect` + `VpnStats`.
- `Settings.tsx` — killswitch, excluded domains, исключения приложений, reduce motion.
- `About.tsx` — статическая информация о протоколе.
- `TelegramWeb.tsx` — **только мобильный** режим: отдельный sandbox-туннель (allow-list только для Telegram-пакетов), не завязан на выбор сервера в `CountrySelect` — IP/SNI зашиты в коде. На десктопе показывает блокирующий экран.
