# Игроки по одному · предложение к #404 **PROPOSED_NOT_OWNER_APPROVED · 30.10.2026** Один рекомендуемый вариант: компактная карточка игрока, две явные команды и подробности рядом на desktop / ниже на mobile. Это локальное дополнение каталога игроков. Утверждённые документы, лента игр и приложение не изменены. Открыть `index.html`. Верхняя панель переключает реальные CSS-ширины 1440 / 1024 / 768 / 390 и десять сценариев; «Авто» использует ширину окна. Если выбранный экран шире окна, просмотр пропорционально уменьшен. Для оценки реальных размеров и масштаба текста использовать «Авто» либо «Без панели». Все фотографии и данные — вымышленные TEST-примеры. Баннер «Макет: запросы не отправляются» остаётся видимым в начале каждого экрана. ## Основания и размещение - Основа: `SITEWIDE_UI_STYLE_GUIDE.md`, OWNER_APPROVED v3, и `DESKTOP_OVERLAY_STYLE_GUIDE.md`, «Просторный40». Палитра взята из действующего `consumer-tokens.css`, не из другого кабинета: ink `#13221a`, paper `#f5f6f2`, lime `#a7f447`, purple `#7945de`, line `#dfe4dc`, white. - Логотип и иконки навигации скопированы из текущего `public/brand`. Общая левая линия логотипа, H1 и основного содержимого: max 1380, desktop gutter 32; mobile gutter 20 по v3. Нет второго центрированного внешнего контейнера. - Радиусы 28 / 18 / 12, кнопки от 48 px desktop и 44 px mobile. В основном действии 50–56 px. Отступ заголовка до следующего блока: 28 / 20–24; локальная плотность уточняется по высоте малого экрана. - Продуктовый шрифт — Onest. В snapshot его двоичного файла нет: приложение получает его через `next/font/google`, frozen guide ссылается на внешний файл. Сеть запрещена. Макет использует локально установленный Onest, если есть, иначе вложенный DejaVu Sans. Это **типографическое ограничение макета**, не предложение сменить шрифт продукта; перенос в приложение только на Onest. Лицензия резервного шрифта рядом с файлом. ## Карточка и подробности Обложка с `object-fit: cover`; круглый аватар с белой рамкой полностью внутри обложки. Ни лицо на весь экран, ни аватар между двумя поверхностями. Под обложкой тёмный блок: имеющийся статус, имя, уровень/город/район и краткая биография. Длинное имя переносится; отсутствие поля не заполняется догадкой. Уровень — самооценка, без звёзд и значка подтверждения. Desktop ≥1200: карточка 460 px слева, промежуток 56 px, спокойная информационная колонка справа. Детали относятся к **тому же** игроку, не являются вторым набором действий. 1024: две гибкие колонки с меньшим промежутком. 768: две компактные колонки; факты в правой колонке вертикально, обе основные кнопки сохраняются. ≤720: одна колонка, кнопка «О себе и ближайших играх» открывает детали в потоке. Крупный текст и малая высота допускают прокрутку, не сжатие шрифта до нечитаемого размера. В ordinary-подборке расстояния нет. При уже разрешённой и ещё действующей discovery-проекции допускается только `distanceText()` и подпись приблизительности; точные координаты, географический фон и частные Radar-свидетельства не выводятся. Свайп не запускает Radar и не выражает согласие на геолокацию. Ближайшие публичные игры: раскрываемая секция. Обычный источник сейчас их не предоставляет — показано «Ближайшие игры этого игрока пока недоступны» и доступ к публичному профилю. В макете ссылка открывает локальный предпросмотр, без перехода на живой сайт. Список игр допустим только из разрешённой проекции; никаких придуманных дат, свободных мест или записи на тренировку. Публичные отзывы/рейтинг отсутствуют в рассмотренном контракте — V1 их не содержит. Частный feedback не использовать. ## Жесты и команды Перед первым жестом и на каждой карточке: **«Вправо — отправить запрос в друзья. Влево — только пропустить карточку.»** Кнопки «Предложить дружбу» и «Пропустить» дают ту же команду. Нет подтверждения на каждой карточке, автоматической дружбы, сообщения или приглашения. Горизонтальный жест включается после 10 px и преимущества горизонтали ≥1,5×. Отпускание за порогом `clamp(84px, 24% ширины карточки, 120px)` совершает действие. Частичный drag, вертикальное движение, `pointercancel`, потеря capture или Escape до отпускания — без действия. Декоративное смещение ограничено: карточка не уходит за край малого экрана. Подпись направления видна во время drag; цвет не является единственным сигналом. После правого действия сначала busy, затем подтверждённое «Запрос отправлен», отдельная кнопка «Следующий игрок». Автоматического перехода по таймеру нет: пользователь успевает увидеть результат. «Отменить запрос» — отдельная доменная операция. После левого действия сразу следующая карточка; «Вернуть пропущенного» возвращает только локальный пропуск и ничего не отменяет на сервере. ## Состояния | Сценарий в панели | Поведение | |---|---| | 01 Просмотр | Две основные команды, жесты и клавиатура | | 02 Подробности | Биография, факты, секция игр в общем потоке | | 03 Исходящий | Нет повторного запроса; следующий / явная отмена | | 04 Входящий → друзья | Только явные «Принять» / «Отклонить» по capabilities; «Позже» не решает запрос. Принятие демонстрирует friends без повторной отправки | | 05 Недоступен | Профиль скрыт, только следующий; не раскрывать чужую блокировку | | 06 Загрузка | Skeleton, нет действий дружбы; кнопка результата помечена «демо» | | 07 Пусто / конец | Различены отсутствие результатов и конец просмотренной подборки; можно вернуть пропущенного | | 08 Ошибка чтения | Повторяется загрузка, не mutation | | 09 UNKNOWN | «Результат пока неизвестен», блок повторной отправки, «Проверить статус»; в демо остаётся UNKNOWN | | 10 Лимит | Предложения заблокированы и на следующей карточке; пропуск остаётся доступен | В основном live-деке отбираются доступные `none + canRequest`; self, incoming, friends, outgoing и unavailable не повторяются среди новых кандидатов. Если состояние изменилось уже на открытой карточке, показать соответствующий статус, не выполнять другой жест вместо исходного. В макете специальные состояния намеренно доступны через панель проверки. Отправленные/неизвестные операции остаются привязанными к игроку при возврате через список. Переключатель сценариев начинает новый независимый демо-сценарий. ## Доступность и прокрутка Один вертикальный scroll owner: документ внутри preview. Карточка `touch-action: pan-y pinch-zoom`, без вертикальных команд. На mobile основные кнопки закреплены выше нижней навигации, с резервом места и `safe-area-inset-bottom`; детали не получают собственного скролла. В превью нет масштабного запрета `user-scalable=no`. Стрелки обрабатываются **только если фокус на самом деке**. Input/select, кнопки и чтение не перехватываются; autorepeat и модификаторы исключены. Space/Enter работают как нативные кнопки, Tab имеет видимый purple focus. Статусы объявляются через `aria-live`, раскрытия — `aria-expanded`. Нет обязательного drag. `prefers-reduced-motion` отключает переходы; автопрокрутка мгновенная. Реальные touch-устройства, screen reader и браузерный layout требуют проверки: в этой среде браузер не доступен. Статус: **OWNER_REVIEW_REQUIRED**. Это проект дополнения, не новая утверждённая редакция общего Style Guide. ## Проверка интегратора после завершения Astra PMA выполнил фактическую проверку макета в Chromium: desktop1440/mobile390, кнопка запроса, реальные перетаскивания влево/вправо, раскрытие и UNKNOWN без повторной отправки. JavaScript exceptions и мутаций API — 0, горизонтального overflow нет. Это проверка автономного макета, не QA приложения и не реальная дружба. Единственная правка интегратора: тёмный цвет текста на светлом status-badge для контраста; исходный Astra HTML сохранён, JS и компоновка неизменны. Указанное выше авторское browser NOT_TESTED относится к среде Astra; браузерная проверка PMA выполнена отдельно. Продуктовый Onest при реализации сохраняется; у автономного макета остаётся указанное ограничение резервного шрифта.