Два требования desktop-клиента (docs/client-tauri.md §5), которые живут в
веб-слое — том же, что и в браузере:
- **Палитра команд.** Ctrl/Cmd+K (на документе или сообщением `openPalette` от
обёртки) открывает быстрый переход: серверы (в первую доступную комнату),
комнаты выбранного сервера с группировкой по категориям, личные беседы из уже
загруженного снапшота, действия (настройки профиля/безопасности/внешнего вида,
настройки сервера, создание сервера, друзья, микрофон и «не слышу» при
активной голосовой сессии). Новых запросов палитра не делает; поиск по
подстроке без учёта регистра, 8 пунктов на раздел, стрелки со
`scrollIntoView`, `role=listbox/option` и `aria-activedescendant`;
- **Подтверждение выхода.** Формы с локальным черновиком регистрируются в общем
реестре (`stores/unsaved.ts` + хук `useUnsavedChanges`): платформа получает
один `setDirty` на переход «есть правки / нет правок», а на сообщение обёртки
`closeRequested` клиент отвечает тряской контента и диалогом «Сохранить /
Выйти без сохранения». При `prefers-reduced-motion: reduce` тряску заменяет
подсветка рамки; в браузере вместо сообщения обёртки работает штатный
`beforeunload`. Хук добавлен в формы с явной кнопкой «Сохранить»:
профиль, общие настройки сервера, ник, эмодзи, звуки, оформление, вебхуки,
лимиты инстанса, переименование сервера (автосохраняемые переключатели
намеренно не помечаются);
- Deep link `glchat://dm/<channelId>` (личная беседа без сервера) — его
присылает обёртка при клике по уведомлению о личном сообщении.
Тесты: 525 passed (501 база + 24 новых) — палитра, реестр правок, диалог
закрытия, `beforeunload`, разбор ссылок; `npm run check` и `npm run lint` зелёные.
- миграция 00013: guild_cosmetics (рамки и иконки) и user_styles («для друзей»
и пер-серверные стили) (AGENT.md 7.2, 7.4)
- store: CRUD галереи, личные стили и вычисление оформления поэлементно
(роль → пер-серверный стиль → «для друзей» → дефолт) с откатом, когда роль
больше не выдаёт элемент
- API: галерея сервера под MANAGE_ROLES, оформление роли в create/update,
GET/PUT/DELETE /users/@me/styles с доступными элементами по областям
- клиент: редактор личного стиля с предпросмотром, галерея оформления в
настройках сервера, оформление роли в разделе «Роли»
- рендер: рамка под аватаром, иконка рядом с ником, цвет и встроенные эффекты
ника (CSS, при reduced-motion статично) в ленте и списке участников