По душе · Android × Figma · 11.09.2026 · создание и управление событием
Сто тридцать два кадра — весь остаток раздела NEW страницы «Создание и управление событием» (ещё два кадра подсекций — дубли «Страницы События» из прошлого десятка): «Управление» и правка события, приглашение участников и отправка приглашений, организаторы с ролями, начало чата, отмена события, список участников с заявками и листами, профиль участника, вопросы при регистрации со всем конструктором вопроса и онбординг из четырёх слайдов. Четыре экрана написаны с нуля, остальные — состояния уже собранных. Каждый кадр собран из данных ноды и сведён с рендером Figma в масштабе ×3.
Смотровая
Тяните шторку, чтобы совместить макет и приложение. «Карта» показывает, где остаётся расхождение: синим закрыт системный статус-бар и клавиатура — их рисует система, в сравнении они не участвуют (спека 6.4). Кадры выше экрана (до 1308 dp) снимаются полосами по 844 и склеиваются.
Числа
Полное — доля пикселей, отличающихся сильнее ΔE 6 вне масок. Без текста — то же с исключёнными текстовыми блоками. ±1 px — пиксель считается расхождением, только если не совпал ни с одним пикселем рендера в окне ±1: сдвиг растра на долю пикселя не есть ошибка вёрстки. Геометрия — два последних вместе, то есть чистая форма, положение и материал; по ней и выносится вердикт. Подсвечены строки выше порога — у каждой измеренная причина в разделе «Границы».
| Экран | Кадр | Состояние | Полное % | Без текста % | ±1 px % | Геометрия % | Шкала до порога 0,3 % |
|---|
Разбор
Каждая строка — расхождение из реестра docs/figma/fig/ledger.md
(E1, E2 и E3): что показала нода, что делало приложение и сколько это стоило в числах. Кадры
и числа на этой странице пересняты и пересчитаны 12.09.2026, после того как проверка
всех 390 кадров уточнила модель прожига.
Сверка всех 390 кадров прошлась и по этому десятку ещё раз — с новым измерителем
tools/burnmap.py, который считает прожиг по дереву, без картинок. Нашлось:
разделителя между третьей и четвёртой строкой первой группы вопросов в ноде
нет (659:27792 — строки стоят встык, сообщено владельцем);
кнопка-строка «Добавить вопрос» (659:23259), наоборот, прожигалась зря — в
рендере её подпись (40, 42, 49); заголовки шапок всех экранов десятка и строки
ролей организатора (659:23174) прожига не получали; у невыбранных строк
барабана даты стоит opacity 0,35, а в фикстуре была единица — барабан правки
события выходил сплошь чёрным; цифра счётчика участников (663:74257) белая
только по объявлению, в рендере (245, 245, 245).
Самая дорогая находка второй проверки — и она не видна метрике. У полутора сотен узлов
этих экранов стоит blendMode: LINEAR BURN, и над серой подложкой
#F5F5F5 прожиг темнит объявленный цвет: #282A31 становится (30, 32, 39), #1A1A1A
— (16, 16, 16), бренд #007AFF — (0, 112, 245). Действующий режим —
первый не-PASS THROUGH предок снизу вверх: узел с NORMAL
внутри прожигаемой группы изолирован и остаётся объявленного цвета (иконка строки
«Управления»), а PASS THROUGH прожиг наследует (тумблер в строке).
Заведён PdColors.burn, и правки прошли по всем экранам десятка.
У поля «Ваш вопрос» в листе вопроса не рисовалась его собственная заливка #F5F5F5 с
внутренней тенью: разница белого и #F5F5F5 — это ΔE ≈ 2,7, ниже порога 6, и кадр
с пропавшей плашкой 8466 dp² честно показывал 0,016 % по геометрии. Поэтому к
четырём числам добавилась структурная сверка по нодам
(tools/inkcheck.py): заливка — по площади ноды за вычетом детей, тень — по
полосе снаружи габарита, текст — по цвету чернил. Прогон по 134 кадрам дал 362
расхождения, которых метрика не показывала.
У одной и той же кнопки удаления в листе участника Fill + Shadow
— (0,2) r4 6 %, а у мастера (0,8) r40 12 %; у
Button-icon на карточке участника мелкая, а у кнопки шапки большая; у плашки
сегментера (0,2) r20 6 %; у чипов тегов (0,2) r4 6 %. Плюс
нашлись тени, которых не было вовсе: лист несёт (0,−2) r24 12 % над верхней
кромкой, аватар 64 — (0,2) r8 16 %, кольцо аватаров онбординга — по тени на
каждый круг. Тень теперь всегда берётся из ноды экземпляра, а не из мастера.
Подложку снекбара над картой рисовали три вложенных прогона всего экрана карты — и эмулятор этого не выдерживал: кадр выходил пустым (866 уникальных цветов против 187 336 у того же экрана без снекбара). Метрика молчала, потому что область живой карты у неё под маской (Р-7). Нашлось той же структурной сверкой: у неё «пустая заливка» — это расхождение в 140 уровней. Проход оставлен один.
Затемнение под системными листами (Context Menu - Dimming
Overlay) объявляет BACKGROUND BLUR 30, а в рендере не размывает
ничего: под вторым слоем затемнения кнопка «Сохранить» осталась резкой до пикселя. То же у
полупрозрачного снимка экрана в иллюстрации онбординга: в точке (100, 122) стоит
ровно белый 40 % поверх неразмытой подложки — 197 против расчётных 199. Зато
два наложенных затемнения считаются дважды: 1 − 0,77² = 0,41.
Восемь карточек 70 с шагом 103 выше листа: последние две уходят за его нижнюю границу.
Compose ужимал колонку по месту и рисовал шесть, Figma обрезает восемь. Лечится
wrapContentHeight(unbounded) — тем же приёмом, что и лента приглашений.
«Вы первый раз на событии от нашей компании организаторов?» в рендере идёт одной строкой
и обрывается на «от на…»: у текстового узла textAutoResize: TRUNCATE при
блоке в один интерлиньяж. Без этого карточка становится двухстрочной, и вниз уезжает вся
страница — кнопка «Добавить вопрос» и подсказка под ней.
Строка «Показать на странице события» в листе роли идёт с прозрачностью 0,3 — и в рендере выцветают вместе с фоном и метка, и тумблер. Та же история у задних карточек участников в онбординге: прозрачность 0,7 и 0,5 стоит на узле, поэтому блёкнут и фото, и подписи. Прозрачная только заливка давала карточку слишком контрастной.
Иллюстрация онбординга у всех слайдов одна и та же по составу, но у второго поверх брендовых эллипсов лежат ещё два белых — 635×140 и 249×331 с прозрачностью 0,61 и размытием слоя 100. Нарисованные брендовым цветом, они давали густую синеву: 24,997 % против 3,971 с белым.
Кольцо из девяти фотографий четвёртого слайда: у одной картинки
(d53124d8) последний блок IDAT обещает больше байтов, чем лежит в
архиве .fig, — снизу декодируется 40 % чёрного. Низ восстановлен из
рендера кадра обратной формулой маски: avatar = (render − (1−α)·bg)/α,
где α — радиальный градиент маски кольца, а bg — снимок той же подложки, снятый отдельно
без кольца. Зеркальная достройка, которую я попробовал сначала, ставила вверх ногами лицо.
Внутри иллюстрации онбординга стоят целые экраны в масштабе 0,664 и 0,756. Масштабировать
готовый слой нельзя — кромки уходят на пиксель; вместо этого подменяется плотность
(PdScaled), и текст, радиусы и иконки рисуются сразу в нужном размере. Снимок
обведён белым 2 dp снаружи, а Modifier.border рисует внутрь — обводка
сделана отдельной плашкой на 2 больше.
Аватар 80 в профиле участника обведён не однотонной рамкой, а вертикальным градиентом
#B780E4 → #85C5CD → #91D688 → #9DE743 шириной 4 внутрь.
Бейдж-галочка рядом — контур из .fig с заливкой #9CE549 и белой обводкой 2
наружу; путь идёт в единицах узла, поэтому в Canvas его надо масштабировать на
плотность — иначе бейдж выходит втрое меньше.
Крестик удаления варианта ответа — не контурный icon-minus-circle из
профиля, а залитый круг с прорезью (мастер 660:67952), и внутри слота 20 его
ink занимает 16,25. С контурным значком список из десяти ответов давал 0,508 %.
У сегментера «Заявки / Участвуют / Отклонены» доля 114, а белая
плашка выбранного 122 — она выходит под отступ контейнера. Правило то же, что у сегментера
на две доли (171 и 179), поэтому в ките ширина плашки считается как
342 / n + 8 и рисуется requiredWidth.
Границы
Семь кадров из 134 кадров десятка (132 в этой таблице). Два — остаток правки события, известный с прошлого десятка; один — инстанс уже закрытого мастера карты; четыре — слайды онбординга, где внутри иллюстрации стоит целый экран в масштабе 0,76: каждая строка текста внутри такого снимка мажет на доли пикселя, и допуск ±1 px её не спасает.
| Кадры | Геометрия % | Класс остатка |
|---|---|---|
698:89849 | 1,833 | кольцо из девяти фотографий под радиальной маской: у одной растр в .fig обрезан и низ восстановлен из рендера, у остальных расходятся доли пикселя в окне кадрирования |
695:77451, 696:87380 | 0,747 и 0,737 | уменьшенные снимки экранов внутри иллюстрации: текст в масштабе 0,756 и шахматная текстура, просвечивающая сквозь полупрозрачные карточки (у ноды там фоновое размытие 32, которого в Compose нет) |
698:89406 | 0,309 | то же, но снимков два: страница вопроса поверх страницы правки — ровно на пороге |
642:65266, 642:65523 | 0,460 и 0,423 | правка события: остаток обложек ленты (40 % остатка), карта под стеклянной кнопкой (25 %) и барабан даты (24 %) — разобрано в реестре D1 прошлого десятка |
691:97101 | 0,570 | инстанс мастера «Страницы Карта» 180:8884 со снекбаром: несёт остаток растра карты самого мастера (0,530) |