# Логика работы хедера (AppHeader) Хедер - верхняя панель приложения. В нём 4 кнопки: "Смена", "Шарик" (запуск игры), "Выключение пульта", "Выход". **Кнопка "Смена"**: - Принцип: Клик по кнопке открывает модальное окно ShiftModal. В модале форма с полями: дата смены (input type="date", обязательное), начальный баланс (input type="number", >0), примечания (textarea, опционально). Валидация: дата обязательна, баланс >0. При submit - отправка команды 'open-shift' через WebSocket с данными (date, amount, notes, user info). Закрытие модала, показ уведомления успеха или ошибки. Если нет прав (не оператор) - уведомление "Доступ ограничен". **Кнопка "Шарик" (запуск игры)**: - Принцип: Клик по кнопке открывает модальное окно GameSelectionModal. Модал имеет 3 шага: 1) Выбор категории (банки, мишени, беспроигрышные - кнопки с иконками и кол-вом доступных игр). 2) Выбор конкретной игры из списка (фильтр по категории, только активные, не тестовые; показ название, патроны, сложность, цена). 3) Выбор оплаты (наличные или карта). При submit - отправка 'start' через WebSocket с параметрами (line=порт, game=ID, gamerId если есть, isBonus если бонус, paymentType=cash/card, tel=пользовательский телефон, patr=патроны игры). Закрытие модала. Если смена не открыта - перенаправление на открытие смены. Если ESP отключен - ошибка. Если нет прав - уведомление. **Кнопка "Выключение пульта"**: - Принцип: Клик по кнопке показывает подтверждение (confirm dialog с текстом "Вы уверены?"). При подтверждении - отправка 'shutdown' через WebSocket. Показ уведомления "Пульт выключен". Если отмена - закрытие диалога. **Кнопка "Выход"**: - Принцип: Клик по кнопке очищает auth state (logout), редирект на страницу логина. Показ уведомления "Выход выполнен". Общая логика хедера: Проверка роли пользователя (оператор/техник/админ). Если нет прав на действие - показ уведомления "Доступ ограничен". Responsive дизайн (flex row), Tailwind стили. Интеграция с useAuth для роли, useNotifications для сообщений.