Решили: подпись ряда контактного листа вынута из потока (position: absolute), а сам ряд
получил отступ слева на её ширину. Ячейки растягиваются до общей высоты, подписи состояний прибиты
к низу ячейки. Под каждым рядом — линия-разделитель. Шапка страницы несёт русское название
раздела, «лист N из M» и строку «зачем смотреть».
Почему: лист читают СРАВНЕНИЕМ — с соседним кадром, со вчерашним, с соседним рядом. Пока раскладка была потоком, каждое сравнение начиналось с поиска элемента глазами.
Отвергнута очевидная альтернатива — «подобрать отступы и фиксированную высоту ячейки»: ею я уже лечила этот скачок один раз, и она давала совпадение с точностью до пары пикселей, а не равенство. Разница видна на переносе: колонка подписи в потоке участвует в переносе ячеек, и перенесённая ячейка встаёт ПОД подписью — левее всех остальных. Никаким отступом это не лечится, потому что причина не в числах, а в том, что подпись и образцы делят одну строку раскладки.
Единый уровень подписей состояний получен не заглушкой высоты, а связкой «ячейки одной высоты
(align-items: stretch) + подпись прижата margin-top: auto». Тогда уровень задаётся самым
высоким образцом ряда и держится сам, каким бы разным ни был рост образцов.
Сказано: «Поделить все большими линиями, сделай что надписи все на одном месте, а отход от них и начала самих элементов - ровно на одном уровне. ЧТобы это не съезжало на другой странице и т.д. Чтобы экран был сверху подписан, что за экран (что на нем, т.е. название) и кратко описание» (06.08.2026, сессия e32de921).
Грабли: Label в UI Toolkit принимает детей, но свой текст в их раскладке не учитывает — дети
лягут ПОВЕРХ текста. Трёхъярусная подпись (имя, класс, адрес) обязана быть контейнером с тремя
Label внутри, а не одним Label с добавленными потомками. Поймано до прогона, но выглядело бы
как «пропала подпись класса».
Владелец правды: components/sheet.uss (раскладка), UiContactSheet.BuildHead/BuildRow,
UiComponentRegistry.Describe (названия и описания разделов).