# Иконки производства, контекст клетки и шапка — v0.17.2

Исправления по скриншотам и замечаниям28.10.2026. Схема35, расчёты партии и PRNG не меняются.

## Все включённые типы получают оригинальную иконку

Производственный каталог расширился до188 типов, а прежняя подготовка маленьких изображений покрывала только126. Поэтому новые артиллерийские, морские и воздушные позиции получали текстовую заглушку.

`prepare-production-icons.py` теперь запрашивает список у самого `engine/catalog.mjs`. Разрешение PediaIcons и путей учитывает регистр как в Windows: у «Парусного линкора»267 исходный ключ отличается регистром букв. Все188 маленьких изображений перенесены из исходных PCX. Проверка сравнивает каждое RGBA-изображение с оригиналом, контролирует хеши и покрытие актуального каталога. Повторный экспорт оставляет манифест побайтно тем же.

У постройки124 «Жильё Рабочих» проблема была иной: сам исходный PediaIcons ссылался на картинку с надписью `No icon yet`. В комплекте присутствуют настоящие `workerhousingsmall.pcx` и `workerhousinglarge.pcx`. Для этой постройки явно переназначена привязка к этим двум оригинальным файлам; их пиксели не изменены. Замена действует в списке и карточке текущего заказа. Причина переназначения записана в манифесте.

## Список строительства и переключение городов

Список открывается с отступом24px над карточкой текущего заказа и выравнивается по правому краю окна города. Его высота ограничивается доступным пространством; внутренний список прокручивается отдельно. Фокус не прокручивает окно при открытии. Проверяются ширины1365,946 и473CSS-пикселя.

Корабли скрываются, если общая проверка производства возвращает `NAVAL_REQUIRES_COAST`. Прибрежный город сохраняет свои морские заказы; прочие временные требования к ресурсам по-прежнему объясняются. Фильтр одинаков для видимого списка и внутреннего селектора.

Треугольники переключения городов сделаны векторными и центрируются внутри кнопок независимо от шрифта. У заголовка убраны смещающие отступы; проверяются центры обоих значков.

## Контекстное окно клетки

Координаты не выводятся. Если известного ресурса нет, строка о ресурсе отсутствует. Пища, щиты и торговля используют исходные значки; названия доступны в подсказках и доступных именах. Строка здоровья юнита использует отдельный выровненный элемент с единым шрифтом для числа и HP. Разделительная линия появляется только перед имеющимся списком своих частей.

Миниатюра160×112 рисуется непосредственно из известной игроку местности, а не вырезается из готового экрана. Соседние базовые фрагменты обеспечивают переходы, но поверх них рисуются только объекты самой выбранной клетки: рельеф/растительность, река, дороги, улучшения и доступный ресурс. Юниты и городские таблички в этот рендер не входят. Под туманом используются прежние известные сведения; неизвестная клетка не получает миниатюру.

ПКМ устанавливает ту же выбранную клетку, которую использует золотистая рамка ЛКМ. Камера, выбранный юнит и состояние партии от осмотра не перемещаются и не пересчитываются. Браузерный сценарий контролирует реальные координаты пути рамки и сохранность положения камеры.

Регрессия, найденная общей проверкой управления: после осмотра клетки города новая рамка сохраняла её выбор, и при завершении всех приказов HUD показывал название города. Исправлен приоритет состояния готового хода: в этом случае отображается «Завершите ход».

Красная вертикальная линия возле цели маршрута оказалась служебным разделителем исходного `Art/Cursor.pcx`. Из обеих вырезок исключены линии атласа; исходные внутренние пиксели ромбов сохранены. Одна прозрачная строка дополняет высоту до прежних128×64, поэтому картинка не растягивается и её привязка не меняется. Красный ромб недопустимой цели сохранён. Проверяются точное совпадение внутренних пикселей и отсутствие посторонней вертикальной линии, в том числе после загрузки PNG браузером.

## Шапка

Игровые пункты получили простые векторные значки одного цвета. Ссылки на базу знаний, загрузку картинки и общие заметки находятся в выпадающем меню «Разработка». Адреса и поведение ссылок сохранены. Меню закрывается выбором ссылки, Escape и нажатием снаружи; Escape открытого меню не проходит к управлению картой.

## Проверки

Полный набор ядра/модулей дополняют сравнение исходных пикселей, DOM и браузерный сценарий `browser-ui-polish.cjs`. Последний проверяет три размера окна, катапульту и торговое судно, настоящее изображение Жилья рабочих, стрелки, меню разработки, осмотр клетки без мутации партии, значки, условный разделитель и HP. Связанные сценарии охватывают прежний город, управление, местность, авиационную разведку и полную небольшую партию.

Итоговые результаты после публикации: [release-0172-validation.json](data/release-0172-validation.json). Полный этап5.2 и весь MVP остаются в работе; эти исправления не объявляют готовыми боевые воздушные действия.

## Дополнение v0.17.3 — одна клетка и часы ожидания

Превью ПКМ теперь ограничено ромбом выбранной клетки; вокруг него прозрачный фон окна. Соседние базовые изображения используются только внутри маски для корректных исходных переходов, их окружение не показывается. Контекст и игровое состояние сохраняются. Слева от уведомления чужого хода добавлены декоративные песочные часы: цикл2,6с с паузами и переворотами; системное уменьшение движения отключает анимацию. Дополнительных игровых расчётов и загрузок изображений нет.

Публичные ui-polish и readiness прошли. Проверены нулевые видимые пиксели вне ромба, реальное появление часов во время ИИ, полуповорот/полный цикл по CSS timeline и точное состояние партии. Полный набор ядра повторно не запускался: сравнение141 файла с предыдущей публикацией показывает только3 изменения отображения, схема35 и все правила прежние. [Отчёт](data/release-0173-validation.json).

## Дополнение v0.18.0 — маршрут, пассажиры и наведение

После назначения GoTo, разведки или дороги до точки интерфейс переходит к следующему юниту, требующему ручного приказа. При загрузке/импорте маршрутизируемые части не получают фокус автоматически. Клик по такой части отменяет автоматический маршрут, в том числе при нулевом движении; начатая текущая работа рабочего при этом сохраняется. Ядро продолжает маршрут при следующих ходах обычными проверенными MOVE, без дополнительного подтверждения.

ПКМ по клетке корабля показывает и пассажиров с подписью «на борту». Их можно выбрать и высадить через G на допустимый берег. Кнопка G использует общую проверку маршрута, а не неподходящий для груза приказ WAIT; можно задать высадку и для следующего хода. Наведение мышью или клавиатурный фокус строки показывает исходный юнит поверх ромба превью, не меняя выбранную часть и состояние партии. При выходе остаётся одна местность; отложенная загрузка картинки не восстанавливает устаревшую строку.

Четыре проверки правил маршрута и отдельный браузерный сценарий проверяют несколько ходов, нулевое движение, отмену кликом, сохранение работы, оба пассажира Галеры, исходное изображение при наведении, настоящую высадку и точный экспорт.

### Дополнение v0.18.1

Выбранный через ПКМ пассажир теперь также имеет приоритет над кораблём в начале перетаскивания. Можно высадить его обычным жестом с клетки корабля на соседний берег; сама Галера не получает этот приказ. G и клавиатурное перемещение сохраняются. Из145 файлов функционально изменён только ui/map-controls.mjs; движок и схема36 прежние. Четыре локальных сценария (пассажиры, обычные жесты, море, автоматизация) и DOM прошли. [Отчёт](data/release-0181-validation.json).
