## Вертикаль меряется по глифам, а не по боксам
**Закон.** Бокс строки — это не буквы: он несёт полупросвет `(line-height − font-size) / 2`
сверху и снизу плюс запас под выносные элементы внутри кегля. Поэтому выравнивание и просветы,
проверенные только по `getBoundingClientRect` / `getComputedStyle`, дают зелёный замер на
визуально кривой вёрстке.
**Делай так:**
- Пара «крупный элемент + мелкая подпись» (цифра и регалия, иконка и заголовок, логотип и
слоган) выравнивается при обрезанных боксах: `text-box: trim-both cap alphabetic` на обоих
элементах. Где свойство не поддерживается — компенсация считается из метрик шрифта
(`ctx.measureText().actualBoundingBoxAscent/Descent`), а не подбирается на глаз.
- Просветы между блоками считаются оптически: к зазору между боксами прибавляются полупросветы
строк с обеих сторон. Равные `margin` ≠ равные просветы.
- Контрольный замер печатает **обе** величины — по боксам и по глифам. Расхождение больше 2 px —
правка, а не округление.
- Перед показом человеку: кадр 1:1 и прямой вопрос кадру «что стоит неровно по вертикали».
**Проверкой не считается:** «середины боксов совпали» без глифов; «отступы одинаковые» без
полупросветов; линза по координатам вместо растра.
**Арбитр — глаз человека.** Видит перекос при зелёном замере — неверен замер: найди величину,
которую он не мерил, и добавь её в проверку. Проверка, печатающая «чисто» на кривом кадре, —
имитация проверки.
Вдруг надо 🤷♂️
