Часть [Вне очереди](README.md). Соседей по папке не читать, если задача не про них. # Состояние экрана ### Зачем Менеджер — списки с фильтрами. Сейчас они живут только в RAM: F5 всегда меню, повторный вход сбрасывает вкладки и запросы. Игрок сравнивает людей и соискателей; потерять «ученики 5А» на обновлении — дырка в уже живых экранах, не новая фича. ### Было / Стало / Почему **Было.** SPA без адреса. `GameScreen.show` и `PeoplePanel.show` обнуляют вкладки, фильтры и выбор. Язык уже в `localStorage`; игровые часы — на сервере. **Стало.** Query URL держит *где я*: школа, обзор/управление, карта/люди, выбранные комната и человек. `sessionStorage` по `schoolId` держит фильтры, поиски, сорт, страницу, вкладку карточки и класс сетки — и последний маршрут, чтобы вход с меню поднял то же место. F5 с `?school=` шлёт тот же `OpenSchool`, что карточка. Вход/выход — `pushState`; смена вкладки и фильтра — `replaceState`, чтобы «назад» не листал каждый клик. **Почему.** Сервер не знает про вкладки; класть их в сейв — лишний HTTP. `localStorage` как у языка держал бы «5А» через месяц. URL без фильтров остаётся коротким и копируемым. ### Что видит игрок F5 внутри школы — та же школа, те же вкладки и фильтры. Назад — меню. Снова открыть ту же школу — не сброс на карту. Гость не входит в управление по ссылке. Скорость часов, пауза, открытый пул соискателей и мастер создания не вспоминаются. ### Что не входит Поиск по имени в списках, где его нет. Роутер-библиотека. Состояние на сервере. Бамп протокола.