# Тема `space-pixel` ## Реализованный вид - Статический pixel-art фон `background.png` размером 1080×1920. - Кириллический pixel-font `VCR OSD Mono Cyr` для Label и Button. - Зелёная текстура `button_big.png` как масштабируемый StyleBoxTexture для normal, hover, pressed и disabled-состояний. - Безопасная тёмно-синяя default-панель для существующих экранов Exchanger и отдельная `WhitePanel`-вариация с настоящей белой заливкой, зелёной шапкой и тонкой рамкой из исходника. - Семантические вариации текста, кнопок и панелей, включая `ScreenTitle`, `PanelTitle`, `PanelText`, `AdvertisementPanel`, `FooterPanel`, `StatusPanel` и `WhitePanel`, для точного воспроизведения контрастов референса без глобальной перекраски всех Control. - Экранные заголовки используют общий кегль `36 px`; более компактный заголовок сервисного входа — `30 px`. Блок техподдержки в Home и общем footer начинается с `x = 341 px`, поэтому обе строки номера остаются левее правой границы при том же масштабе и не пересекаются с логотипом. - Decoration-сцена с theme-owned скриптом `scripts/ufo_flight_controller.gd`: два кадра звёзд и два `AnimatedSprite2D` с независимыми двусторонними пролётами. После выхода за край каждый НЛО выдерживает случайную паузу, разворачивается через `flip_h` и возвращается на новой случайной высоте в диапазоне `260–1660` исходной системы `1080×1920`. Высота привязана к шагу `3 px`, чтобы после масштабирования production-экраном до `720×1280` коэффициентом `2/3` оставаться целочисленной. Оба спрайта независимо переключают `frame_01.png`/`frame_02.png`; скорость большого набора — `1 fps`, малого — `1,5 fps`. - Два НЛО ценового блока Home в `visuals/home_top.tscn` сохраняют референсные базовые позиции, но независимо покачиваются вверх-вниз через `scripts/home_ufo_bobbing.gd`: амплитуда слева `4 px`, справа `5 px`, периоды `3,2` и `3,8` секунды. Смещение округляется до целого пикселя, поэтому Nearest-фильтрация остаётся чёткой. - Двухкадровый нижний баннер экранов Cash, CardAmount, CardCustomAmount и CardTerminal сохраняет оба исходных кадра, но `scripts/stable_banner_animation.gd` компенсирует различие их внутренней геометрии. Для `frame_02` корректируются масштаб и опорная точка, поэтому видимая цветная область обоих кадров занимает один `Rect2(34.996, 1000.8, 175.421, 111.389)` в координатах экрана. - Красная текстура `button_cancel.png` используется через variation `CancelButton` для действий «ОТМЕНА» и через `DangerButton` для всех кнопок «УДАЛИТЬ». - Nearest-фильтрация в preview и decoration-сцене. Manifest `space-pixel` задаёт `UseNearestTextureFilter: true`, поэтому Exchanger включает nearest только для этой DLC. - Корни всех девяти production-сцен также явно задают `texture_filter = 1`. Это необходимо для self-contained режима: Exchanger не переопределяет визуальные параметры такой сцены, а весь текст и вложенные изображения наследуют Nearest непосредственно от theme-owned root даже при физическом разрешении `1080×1920` и коэффициенте масштабирования `1,5`. Интерполяционное размытие при этом устраняется; из-за дробного коэффициента отдельные исходные пиксели неизбежно занимают разное число физических пикселей. ## Сравнение с визуальными референсами Полностью просмотрены восемь JPG и 64 последовательных кадра `interface.mp4` с интервалом 0,5 секунды. Фото и видео находятся только в локальном, игнорируемом Git каталоге `themes/space-pixel/source/references/` и никогда не экспортируются в PCK. Подтверждённые паттерны интерфейса: - фон всегда остаётся одним статическим космическим изображением; - экранный заголовок белый, крупный и расположен сверху; кнопка `НАЗАД` — слева от него; - информационные поверхности белые, с зелёной шапкой и тонкой зелёной окантовкой; - между зелёной шапкой и содержимым сохраняется видимый белый интервал 16–20 px; в текущих preview-сценах ему соответствует `separation = 28` с учётом внутренних полей текстуры панели; - заголовки панелей и основной текст — тёмно-синие/почти чёрные; - основное действие — одна широкая зелёная CTA-кнопка, вспомогательные действия компактнее; - пинпад ручного ввода занимает основную рабочую область экрана и состоит из двенадцати одинаковых квадратных клавиш `152×152 px` в сетке `3×4` с зазором `12 px`; - PIN-клавиатура сервисного входа использует тот же квадратный визуальный стиль: двенадцать клавиш `112×112 px` в центрированной сетке `3×4` с зазором `12 px`; - иерархия читается сверху вниз: заголовок → баланс/состав выдачи → инструкция/выбор → действие; - нижняя зона бренда и технической поддержки постоянна и отделена от основного действия; - пришелец, НЛО и speech bubble занимают свободные зоны, но не закрывают функциональный контент; - покадровые bill/coin/card/result-анимации принадлежат конкретным состояниям экрана, а не фону. - экранные изображения центрируются по внутренней белой области после полей `WhitePanel`, поэтому их координата не обязана совпадать с геометрическим центром внешней рамки панели. Home воспроизводит `themes_src/space_pixel/references/photo_2026-08-20_14-09-56.jpg` в его исходном размере `720×1280`. Bubble-плашки, оба НЛО, панели наличия/оплаты, кнопки, билборд, логотип и поддержка выставлены по измеренным пиксельным координатам; исходные PNG масштабируются nearest-фильтром без подмены на приблизительные `StyleBoxFlat`. Скрипты `home_reference_label.gd` и `home_stock_presenter.gd` сохраняют референсный формат цены/телефона и переключают индикатор `МНОГО`/`МАЛО`, не меняя app-owned binding-id. Четыре транзакционных экрана также собраны непосредственно по JPG `720×1280`, без внешнего preview chrome и без подмены их дерева галереей: - `screen_cash_payment.tscn` соответствует `photo_2026-08-20_14-10-27.jpg`: восстановлены две балансные карточки, панель инструкции с исходной bill/coin-анимацией, широкая кнопка выдачи, нижний НЛО, речевая плашка и footer; - `screen_card_custom_amount.tscn` соответствует `photo_2026-08-20_14-10-36.jpg`: верхняя карточка выдачи и панель ручного ввода имеют измеренные границы, клавиши `46×46 px`, а действия `ОТМЕНА`/`0`/`OK` находятся в том же нижнем ряду, что и на фото; - `screen_card_amount.tscn` соответствует `photo_2026-08-20_14-10-40.jpg`: показаны восемь референсных сумм в двух колонках, отдельная кнопка «ДРУГАЯ СУММА», CTA подтверждения и нижняя композиция с НЛО, bubble и footer; обязательные слоты 08–15 сохранены скрытыми; - `screen_card_terminal.tscn` соответствует `photo_2026-08-20_14-10-43.jpg`: карточная анимация остаётся внутри production-сцены, под ней расположена кнопка отмены и исходная нижняя композиция. Обязательные binding ID и типы узлов во всех четырёх сценах сохранены. Контрольные прямые рендеры сделаны из самих production `.tscn`, а не из вручную собранного preview-макета. Последовательность видео подтверждает длительный home-loop с НЛО, cash-инструкцию с чередованием кадров купюры/монеты, возврат на home, выбор карточной суммы, card-terminal loop и финальную анимацию неуспешной оплаты. `tools/preview/preview.tscn` является переключаемой галереей в 720×1280. Девять production-сцен в `themes/space-pixel/package/scenes/` показывают все текущие `ScreenId`: Home, cash-screen, выбор карточной суммы, ручной ввод, терминал, успешную и неуспешную оплату, сервисный вход и настройки. SETTINGS содержит восемь внутренних разделов и демонстрирует LineEdit, SpinBox, OptionButton, CheckButton, HSlider и полосы прокрутки. Bill/coin/card/success/failed-анимации, кнопки, белые карточки, безопасные зоны декора и footer принадлежат самим production-сценам. Галерея ничего не добавляет в их дерево и только переключает сцены; live reload сохраняет основную вкладку и раздел SETTINGS. Отдельная builder-сцена `tools/preview/interactive_pet_preview.tscn` открывается кнопкой `PET` основной галереи и динамически загружает `InteractivePetScene` активной темы. Для `space-pixel` это `components/interactive_pet.tscn`, показанный в масштабе до `4×`. Все 22 анимации получают кнопки из публичного списка компонента; также работают предыдущая/следующая, пауза, повтор, счётчик кадров и автопоказ полного цикла каждого состояния. `Esc` и кнопка «← ГАЛЕРЕЯ» возвращают к девяти production-экранам. Сцена и её `InteractivePetPreview.gd` являются только builder tooling и в PCK не экспортируются. Кнопка `PET` недоступна для активной темы без питомца. Runtime-профиль питомца для сцен `720×1280`: scale `0.845`, ходьба `88 px/s`, подъём `72 px/s`, touch/ЛКМ hit size `128×128`, точка лап `(64,96)`. Host вызывает реальные имена анимаций напрямую: `idle`, `sitting`, `action`, `dancing`, все парные walking-анимации и `climbing_start/up/down`; в composite-действии `interact` увеличение до ×2 завершается за первые `75%` клипа `come_closer`; заключительная четверть показывается в полном масштабе, затем выдерживается ещё `0.15` секунды до запуска первого цикла `action`. при начале выдачи host проигрывает четыре полных цикла `dancing`. `hanging` проигрывается при удержании/перетаскивании, `falling` — при падении после отпускания и при смене экрана, а одноразовый `landing` — после контакта с опорой; затем host включает зацикленный `idle`. Запрос `celebrate` во время `landing` ждёт окончания приземления и только потом запускает четыре цикла `dancing`. После завершённой ходьбы host выбирает `idle` с вероятностью `35%` или `sitting` с вероятностью `65%`. После подъёма или спуска host сразу продолжает маршрут без отдельной hanging-анимации. Кадры и исходные каталоги текстур не менялись. Non-sitting состояния используют нулевую локальную поправку дочернего спрайта. `sitting` использует отдельную поправку `(0,24)`, которая опускает только сидящего питомца на `20,28` экранного пикселя при runtime scale `0.845`. Root, navigation, hit box и общая точка лап `(64,96)` при переключении состояний не меняются. Невидимый `PetNavigation` присутствует во всех восьми production-сценах, кроме Settings, и в сумме объявляет 51 реальную горизонтальную поверхность и 46 связанных climb edges. Каждый экран имеет собственные поверхности пола, кнопок и окон; при переключении host сохраняет старую позицию, переключает граф и опускает питомца на default-floor нового экрана. Settings намеренно не содержит графа и скрывает питомца. В `screen_home.tscn` bounds равен `(32,48,656,1192)`, объявлены восемь поверхностей и десять climb edges. Default surface — пол `x=40..680, y=1240`. Питомец может останавливаться на верхних гранях billboard `x=144..576, y=827`, окна способов оплаты `x=40..680, y=490`, окна остатка `x=40..680, y=337`, кнопок наличной/безналичной оплаты (`y=550`), ценового окна и речевой плашки (`y=60/61`). Парные переходы у `x=40` и `x=680` дают подъём по левому/правому краю между полом, платёжным и верхним окном; дополнительные edges связывают billboard, обе кнопки и верхние плашки. Узлы маршрута — только `Node2D` с metadata, поэтому они ничего не рисуют и не меняют геометрию production `Control`. ## Инвентаризация исходников | Группа | Материалы | | --- | --- | | Фон | `background.png`, два полноэкранных кадра звёзд | | Кнопки | big, long, square, back, cancel и стрелки SpinBox вверх/вниз | | Контейнеры | пять окон, три bubble-панели, billboard | | Индикаторы | many, less, summa bar и тумблеры ON/OFF | | Декорации | alien1–alien3, logo | | Покадровая графика | banner (2), bill (4), coin (3), card (2), payment failed (3), payment success (5), UFO small (2), UFO large (2) | | Интерактивный питомец | 22 sprite-sheet по сетке `128×128 px`, 414 непустых кадров | | Шрифт | `VCR OSD Mono Cyr.ttf` | Всего в production package используется 75 PNG. `Цвета.txt` пуст, поэтому палитра определена по изображениям: `#00183D` для fallback-фона, тёмно-синие поверхности/текст, зелёные контуры/кнопки, фиолетовый focus-акцент и почти белый экранный текст. ## Разделение runtime и исходников - `themes/space-pixel/source/` — сохранённый исходный материал пользователя и references. - `themes/space-pixel/package/assets/` — копии с ASCII-путями для стабильной сборки PCK. - `package/scenes/` — девять полноценных сцен с 481 immutable, 24 обязательными и двумя optional supplemental metadata binding; optional правый персонаж Home также размечен собственным runtime ID. - `package/components/on_screen_keyboards.tscn` — две оформленные пиксельные экранные клавиатуры SETTINGS, скрытые по умолчанию и полностью принадлежащие теме. - `package/components/interactive_pet.tscn` — визуальный компонент интерактивного питомца со всеми 22 анимациями из `source/alien_animation`; runtime-API находится в `package/scripts/interactive_pet.gd`. Имена `source/alien_animation` и `package/assets/animations/alien_pet` сохранены только как theme-specific структура исходных материалов; generic pet contract не требует таких имён от других тем. - `package/ui_theme.tres`, decoration, visuals и `manifest.json` — исходник темы DLC v2. - `tools/preview/` — tooling вне PCK; preview читает `package/` напрямую, без корневого staging. В PCK входят активные зависимости темы. Остальные runtime-копии сохранены в builder для следующего расширения контракта. Обновление исходников от 7 сентября добавило `come_closer`, `idle`, `landing`, `turn_left`, `turn_right`, `action`, `climbing_action_start`, `climbing_action_stop` и `climbing_action`, обновило `dancing` и добавило runtime-пиктограммы питомца `home`/`cross`. Собранный PCK содержит все эти ресурсы; одноимённые дубликаты climbing-action листов сохранены только в `source/`. ## Runtime-supported и preview-only ресурсы В runtime через DLC v2 поддерживаются: - базовые стили Godot Control и семантические variations из `ui_theme.tres`; - один неподвижный фон, встроенный в каждую экранную сцену; - один инстанс decoration-сцены с тремя покадровыми `AnimatedSprite2D` и theme-owned GDScript/Tween-контроллером двусторонних пролётов в каждом экране; - переиспользуемый компонент питомца `components/interactive_pet.tscn`: приложение получает путь из `InteractivePetScene` manifest, semantic mapping и runtime-профиль; Home предоставляет theme-owned граф поверхностей/подъёмов, а host исполняет перемещение и touch/ЛКМ drag; - девять полноценных визуальных сцен, включая ServiceAccess и Settings. В блоке запаса Home слева остаётся состояние `МНОГО/ДОСТАТОЧНО/МАЛО`, по центру находится theme-owned полоска, а справа Label `home.scroll.content.stock_status.approximate_count` показывает приблизительный остаток: например `нет жетонов`, `<100`, `~100` или `>100`. Manifest сохраняет `UiThemePath` как описание package Theme, но его legacy-пути общего фона и decoration пусты: production-сцены уже содержат эти слои, поэтому preview и Exchanger не должны монтировать их повторно. Manifest `ExchangerThemeDlc` версии 2 использует `ScreenScenes` и временно сохраняет обратно совместимый словарь `VisualSlots`. Анимации купюры, монеты, карты и результатов, НЛО главного экрана и рамка промо-блока входят в `active_theme.pck` и отображаются только в своих контейнерах. Интерактивные элементы и рабочий текст остаются в Exchanger. ## Семантическая интеграция с Exchanger Все `theme_type_variation`, размеры и отступы назначены внутри production-сцен, включая фиксированные строки SETTINGS. Host не стилизует ThemeView. Поддерживаемый набор: - `ScreenTitle`: `CashPaymentScreen/.../TopBar/Title`, `CardAmountScreen/.../Content/Title`, `CardCustomAmountScreen/.../TopBar/Title`, `CardTerminalScreen/.../Content/Title`; - `BackButton`: одноимённые TopBar-кнопки CashPayment, CardAmount и CardCustomAmount; - `WhitePanel`: Home `PricePanel`, `PaymentPanel` и `TokenStockStatus`; Cash `Summary`, `BanknotePanel`, `CoinPanel`; CardAmount `AmountPanel`; CardCustom `AmountPanel`; CardTerminal `InstructionPanel`, `PaymentPanel`; Success `ResultPanel`; Error `ErrorPanel`; - `PanelTitle`: Home `PricePanel/.../Caption`, `PaymentPanel/.../Title`, TokenStockStatus `Title`; Cash `Summary/.../Caption`; CardCustom `AmountPanel/.../Caption`; CardTerminal `PaymentPanel/.../Caption`; Success/Error заголовки внутри result-панелей; - `PanelText`: значения и описания внутри перечисленных WhitePanel, включая Balance/Tokens/Bonus, Amount, Instruction, Message и stock State; - `PrimaryButton`: Cash `DispenseButton`, CardCustom `ConfirmButton`, Success/Error `HomeButton`; - `CompactButton`: Home `CashButton`/`CardButton`, CardAmount `OtherAmountButton` и динамически создаваемые preset-кнопки, keypad CardCustom; - `CancelButton`: CardCustom `ClearButton`, CardTerminal и ServiceAccess `CancelButton`, а также кнопка отмены theme-owned сервисного диалога SETTINGS; - `SupportText`: Home `Footer/.../Support` и новый общий footer остальных экранов. - `ScreenDescription`: пояснения SERVICE и SETTINGS; - `SectionTabButton`: пять переключателей разделов SETTINGS владельца; - `SecondaryButton` и `DangerButton`: вторичные и удаляющие действия; - `FieldLabel`, `StatusText`, `WarningText`, `ErrorText`: формы и состояния служебных экранов. - `AdvertisementPanel`: промо-блок Home; `FooterPanel`: общий preview-footer; `StatusPanel`: Home `StockPanel` и компактная панель подключения. Кроме variations тема задаёт базовые стили `LineEdit`, `SpinBox`, `OptionButton`, `CheckButton`, `HSlider`, `VScrollBar` и `HScrollBar`; все такие Control уже находятся в тематических сценах. Runtime-композиция синхронизирована с preview: host использует ту же сетку 720×1280, общий footer, BackButton и объединённые панели Cash и Card. Кнопки preset/keypad и все фиксированные слоты оформлены самой темой. SETTINGS намеренно сохраняет только пять вкладок владельца; технические панели не возвращаются ради старого preview. Footer с логотипом `Robotic Retailers` и двухстрочным номером техподдержки занимает нижние `152 px` и показывается на восьми production-экранах. Home содержит собственную идентичную композицию с обязательными binding ID, остальные семь экранов подключают `package/components/footer.tscn`. На SETTINGS footer намеренно отсутствует. ## Проверки - 11 сентября 2026 года по итогам проверки в Exchanger только `sitting` опущен ещё на `24` локальных пикселя: его visual offset теперь `(0,24)`, то есть `+20,28` экранного пикселя при scale `0.845`. Все non-sitting анимации сохраняют исправленную нулевую поправку; verifier проверяет переход `(0,24) → (0,0) → (0,24)` без движения root. Contract check, validator, pet verifier, preview smoke и build прошли. Живой PET-preview `720×1280` подтвердил current offset `(0,24)` и отсутствие clipping. `build/space-pixel.pck` и `build/active_theme.pck` совпадают: `1700352` bytes, SHA-256 `931A2EAA118722B95E49EA097C8CE41CE9E655F2CF7248CCA050B28A9AF50357`. - 11 сентября 2026 года удалено ошибочное локальное смещение `(0,-24)` у всех non-sitting анимаций питомца. Теперь переход `sitting → non-sitting → sitting` сохраняет нулевую поправку, а положение root и точка лап `(64,96)` не меняются; это опускает прежние поднятые состояния ровно на `20,28` экранного пикселя при scale `0.845`. Contract check, validator, pet verifier, preview smoke и build прошли. `build/space-pixel.pck` и `build/active_theme.pck` совпадают: `1700256` bytes, SHA-256 `C1872763DA443190FA3CA2D281E1599B8C4F772CF290A19F3E4E580CAFE2336F`. - 7 сентября 2026 года `CardAmount/RewardPanel` повторяет `CashPayment/Summary` по atlas-region, размеру `649×125`, позиции `(36,148)` и rect заголовка/базового значения/бонуса. Обязательный `Value` и supplemental `Bonus` сохранили прежние binding-id и канонические пути. Runtime QA `720×1280`, contract check, validator/preview smoke, build и PCK smoke прошли; PCK — `1435772` bytes, SHA-256 `F505882620719F154319A9CD93208F42ECB59FCC615410827A44DADED8F61404`. - 4 сентября 2026 года scale питомца увеличен ровно на 30% (`0.65 → 0.845`), а сниженная высота оставлена только для `sitting`; verifier подтвердил переход поправок `(0,0) → (0,-24) → (0,0)` без смещения root. Contract check, validator, preview smoke, build, PCK verifier и host `InteractivePetBehaviorSmoke` с явным PCK прошли. Preview `720×1280` подтвердил отсутствие clipping, пересечения с заголовком и сохранение Nearest для sitting/non-sitting; PCK — `1435452` bytes, SHA-256 `390C9E3F83B026304F0E75E5A6AAD4458684BBCDFC847FFB542B6CFB1AC278E9`. - Godot 4.7.1 импортирует все runtime-файлы без ошибок; pixel-font распознан автоматически. - В `assets/fonts/vcr_osd_mono_cyr.ttf.import` отключены antialiasing, hinting и subpixel positioning, oversampling зафиксирован в `1.0`. Все девять корней экранов имеют `texture_filter = 1`, поэтому Labels, Buttons, LineEdit, SpinBox и прочий текст наследуют Nearest без покомпонентных настроек. - У всех текстовых variations отключены тени и обводка кнопок: при масштабировании preview до 720×1280 символы не смешиваются с полупрозрачной копией. Светлый текст использует чистый белый, а текст на белых и зелёных поверхностях — контрастный тёмно-синий цвет. - Все девять вкладок production preview и восемь разделов SETTINGS запускаются без ошибок и визуально проверены в окне 720×1280. - В `CardCustomAmount` темы `space-pixel` проверена референсная панель `646×466 px`; все цифровые клавиши имеют одинаковый квадратный размер `46×46 px`, длинные действия выровнены с нижним рядом, а содержимое и footer не перекрываются. - В `ServiceAccess` все двенадцать PIN-клавиш имеют одинаковый размер `112×112 px`; кнопки `ВОЙТИ`, `ОТМЕНА` и footer остаются видимыми и не перекрываются. - Нижние служебные ряды текстовой клавиатуры используют отдельный `KeyboardActionButton` без прозрачных боковых полей исходной текстуры: все кнопки имеют высоту `76 px`, зазоры `12 px`, стрелки — touch-target `88×76 px`, а `СТЕРЕТЬ`, `ОЧИСТИТЬ` и `ПРОБЕЛ` получили увеличенную ширину под полные подписи. - Кнопки скрытия текстовой и цифровой клавиатур остаются обычными `Button` с прежними binding ID, но вместо надписи используют контрастную стрелку вниз из `button_down.png`. Обе кнопки имеют квадратную область нажатия `64×64 px`, крупную центрированную пиктограмму и подсказку «Скрыть клавиатуру». - Описание приложения `subtitle` остаётся удалённым. Новая отдельная настройка «Короткий текст» управляет фразой в белой речевой плашке возле НЛО: HOME Label ограничен геометрией bubble, переносит до 48 символов, центрирует строки и обрезает выход за границы. Для читаемости при Nearest его кегль увеличен с `12` до `16 px`; Label занимает внутреннюю белую область `182×73 px`, использует `line_spacing = -2` и переносит текущую фразу на две строки. В SETTINGS добавлены поле, ошибка и предпросмотр `short_text`; панели увеличены ровно под новый ряд без пустых мест. - `CheckButton` использует тёмно-синий текст, крупную зелёную touch-строку и исходные `tumbler_on.png`/`tumbler_off.png` размером `128×64 px`; в живом SETTINGS проверены оба состояния без обрезания и растяжения. У всех 12 строк отступ от левого края до текста и от правого края до тумблера одинаковый — `24 px`. - Все 57 `SpinBox` используют исходные `button_up.png`/`button_down.png`; их runtime-копии уменьшены ближайшим соседом с `64×64` до `32×32 px`, поэтому обе квадратные кнопки целиком помещаются справа от поля. Между полем и кнопками задан единый промежуток `10 px`, а variation `SpinBoxInnerLineEdit` использует шрифт `18 px`. У 16 полей количества дополнительных жетонов нет текстового суффикса: вся доступная ширина отведена многозначному числу. В живом SETTINGS проверено изменение цены `10 → 11 → 10` и отображение бонусных строк. - Фон всех текстовых полей `LineEdit` (включая focus/read-only), текстовых частей `SpinBox` и полей выбора `OptionButton` использует видимую область `290×64 px` исходного `summa_bar.png` через растягиваемый `StyleBoxTexture`. В живом SETTINGS проверены обычные текстовые и числовые поля без искажения краёв и обрезания текста. - Обе полосы `HSlider` в разделе SETTINGS → «ЗВУК» имеют высоту `36 px` вместо прежних `14 px` (примерно в 2,6 раза выше). Видимый круглый grabber отключён; при значении `100%` заполнение доходит до правого края. В живом Exchanger проверено, что полосы не обрезаются и не нарушают компоновку соседних элементов. - Decoration `space-pixel` использует корневой scripted `Node2D` и три `AnimatedSprite2D`. Звёзды и оба НЛО имеют по два кадра; НЛО воспроизводят собственные покадровые циклы одновременно с независимыми Tween-траекториями. Это существенно ниже всех лимитов host. - Live reload проверен реальным изменением `ScreenTitle/font_sizes/font_size`: новое значение появилось в запущенной галерее без перезапуска, а активная вкладка сохранилась. - Фон остаётся статическим; движение ограничено отдельными Sprite2D/AnimatedSprite2D. - `build-theme.ps1` собирает `build/active_theme.pck`. - Компонент `interactive_pet.tscn` проверен отдельно в builder и из смонтированного PCK: доступны все 22 имени, 414 кадров, корректные loop/one-shot флаги и неизменная позиция корня. Sprite использует Nearest-фильтрацию. Отдельная preview-сцена проверена в живом Godot при `720×1280`: стартовое состояние `sitting`, все 22 кнопки доступны в прокручиваемом списке. Итоговые `space-pixel.pck` и `active_theme.pck` совпадают: `1325176` bytes, SHA-256 `7DB9F2108D478E7CDB77E3A85ACA33C8DD2EC27A68FA2CF61A28BF78B4331595`. - Exchanger загружает пакет и активирует `space-pixel` вместо fallback-темы. - После настройки Nearest фактический Exchanger повторно запущен в `720×1280`; контрольный кадр `build/exchanger-speech-bubble-runtime.png` подтверждает жёсткие пиксельные края глифов и читаемый перенос короткого текста. Собранная, активная и установленная PCK совпадают: `721192` bytes, SHA-256 `30A8806709BCA315E1F455FED1F438C5CD377B9ACEC35A249BABDFF12F1888C4`. - После этих изменений `Test-PackagedBindingContract.ps1`, `test-theme example`, `test-theme space-pixel` и `build-theme space-pixel` завершились успешно. - Pixel-perfect Home QA выполнен прямым рендером production-сцены в `720×1280`: крупные белые компоненты совпали с координатами JPG, а средняя абсолютная RGB-разница контрольного кадра уменьшилась с `75,81` до `6,84` (разница включает JPEG-компрессию и rasterization текста). - Транзакционные референсы проверены тем же прямым рендером `720×1280`: средняя абсолютная RGB-разница CashPayment уменьшена с `66,66` до `13,66`, CardTerminal — с `59,14` до `11,58`; после повторной строгой сверки средняя RGB-разница внутри двух основных панелей CardCustomAmount уменьшена с `13,28` до `7,64`, CardAmount — с `15,31` до `10,88`. Вручную подтверждены заголовки, текстурные рамки, квадратные клавиши, CTA, исходные анимации и общий footer на финальных кадрах. Значение выдачи CardAmount совпадает с reference bounding box полностью; «ДРУГАЯ СУММА» и CTA отличаются не более чем на один пиксель по краю текста. - CashPayment использует три раздельных обязательных Label из контракта: `Balance` показывает только рубли, `Tokens` — базовые жетоны, `Bonus` — дополнительные жетоны двумя строками. Их исходные значения и расположение соответствуют `photo_2026-08-20_14-10-27.jpg`, а Exchanger обновляет только текст, не меняя геометрию сцены. - В CardCustomAmount Label `InputValue` внутри `summa_bar` теперь имеет собственный обязательный binding и показывает фактически набранную сумму. Верхняя панель «К ВЫДАЧЕ» получает только базовые и бонусные жетоны; host больше не объединяет рубли и жетоны и не оставляет статическое значение `1000` в поле ввода. - Актуальные `build/space-pixel.pck` и `build/active_theme.pck` с единым footer, Nearest-шрифтом и отдельным `InputValue` binding имеют размер `721192` bytes и SHA-256 `30A8806709BCA315E1F455FED1F438C5CD377B9ACEC35A249BABDFF12F1888C4`. Штатный PCK smoke смонтировал пакет, инстанцировал девять экранов и подтвердил 10 scripted node instances. Та же сборка установлена в стандартный каталог Exchanger и подтверждена совпадением SHA-256. После полного запуска Exchanger в `720×1280` журнал подтвердил активацию `space-pixel` без theme/resource/fallback-ошибок; актуальный Home-кадр сохранён в `build/exchanger-speech-bubble-runtime.png`. - 1 сентября 2026 года красный `button_cancel.png` подтверждён во всех variation `CancelButton`/`DangerButton`. Пролёты `UfoLarge` и `UfoSmall` повторно измерены по `interface.mp4`: контрольные позиции проверены на `t=1/2/3/10,5/12/12,5`, лишние старые одиночные НЛО удалены, двойное уменьшение масштаба устранено. Оба набора остаются покадровыми: `frame_01.png` и `frame_02.png` подключены к `AnimatedSprite2D` и воспроизводятся параллельно уже выверенному движению. После contract check, validator и preview smoke актуальные `build/space-pixel.pck` и `build/active_theme.pck` совпадают: `741032` bytes, SHA-256 `E97F95F544BC257CB309789FD67585F93FFD1569F5662FE78ACCE7E7D0193D8A`. Эта же PCK установлена в `%APPDATA%/Godot/app_userdata/Exchanger/theme_dlc/active_theme.pck`; runtime-журнал Exchanger подтвердил активацию внешней темы `space-pixel` без fallback и theme/resource-ошибок, а контрольный кадр `720×1280` — корректную отрисовку Home. - 2 сентября 2026 года runtime-проверка нового двустороннего контроллера подтвердила смену направления `1 → -1`, `flip_h`, новую случайную высоту и продолжающуюся смену кадров. Contract check, validator, preview smoke и PCK smoke прошли; PCK smoke инстанцировал девять экранов и 18 scripted node instances. `build/space-pixel.pck`, `build/active_theme.pck` и установленная пользовательская копия совпадают: `741708` bytes, SHA-256 `5034C3DB1DA44565ED45F682757C03E44D238ABDB1A0B2947F371A98C80C10BB`. Exchanger загрузил package-скрипт на всех девяти экранах; Home runtime подтвердил обратный пролёт, новую высоту и продолжающуюся покадровую анимацию без ошибок журнала. - Два статичных НЛО возле цены дополнены независимым мягким вертикальным покачиванием. Builder runtime зафиксировал для левого позиции `132 → 133 → 127`, для правого `81 → 88 → 85` при исходных `y=130/83`; исходная композиция и Nearest-фильтрация сохранены. Contract check, validator, preview smoke и PCK smoke прошли; PCK smoke подтвердил 9 экранов и 19 scripted node instances. Собранная, активная и установленная PCK совпадают: `743376` bytes, SHA-256 `1646AA10C8DD5EA9AE70FA21040507889FC1719FF26E122464E105E9D2012AFE`. Живой Exchanger загрузил `home_ufo_bobbing.gd` из package и подтвердил движение обоих НЛО без ошибок журнала. - Для нижнего двухкадрового баннера Cash устранён скачок размера НЛО: исходные цветные области `263×167` и `257×163 px` нормализуются runtime-трансформацией второго кадра. Принудительная проверка `frame=0/1` подтвердила полностью одинаковые экранные bounds обоих кадров; autoplay продолжает переключать изображения с исходной скоростью `1 fps`. - 7 сентября три клипа ходьбы и их sprite-sheet получили актуальные имена: `walking_right_stop`, `walking_left_stop` и `walking_left_start`. Semantic actions приложения остались прежними и теперь сопоставлены новым клипам; `walking_start_right` завершает симметричную пару стартовых состояний. Contract check, validator, pet verifier, preview smoke, build и PCK smoke прошли. Итоговые `build/space-pixel.pck` и `build/active_theme.pck` совпадают: `1658512` bytes, SHA-256 `76518563591159EC4B8087911D2BB29924BC29C12AAA4FF1544D97ED01648E91`. - 14 сентября у кнопки «ВЫБРАТЬ И ДОБАВИТЬ ПРОМО-РОЛИК» в SETTINGS задан явный кегль `17 px`. До исправления inherited-кегль создавал минимальную ширину кнопки `636 px` и растягивал все видимые панели раздела «ПРОМО» до `742 px`; после исправления минимум кнопки равен `365 px`, поэтому панели укладываются в стандартные `664 px` между боковыми полями экрана `720×1280`. Contract check, validator/preview smoke и build прошли. Итоговые `build/space-pixel.pck` и `build/active_theme.pck` совпадают: `1700400` bytes, SHA-256 `8082656B3F8DBAA74D6FC55659FDE99D636BF4A626BCECA99F93BA8C9123ECF7`. - Production-ресурсы используют относительные ссылки внутри `package/`. Если Godot Editor пересохранил их как `res://themes/space-pixel/package/...`, перед validator/build нужно вернуть относительные пути, иначе изолированный workspace не найдёт ассеты. TTF идентифицирует себя как `VCR OSD Mono [RUS by Daymarius]`, но не содержит copyright/license metadata. Автор оригинального VCR OSD Mono публично разрешил коммерческое использование; для кириллической модификации первичное разрешение не найдено. Текущий файл допустим для внутренней темы, но перед публичным распространением требуется письменное подтверждение Daymarius либо замена.