/* ═══════════════════════════════════════════════════════════════════════════
   Мобильный слой: попадание пальцем, читаемость, поведение форм.

   Правилось не «на глаз», а по замеру: обошли восемь страниц в эмуляции
   iPhone 390×844 и собрали все интерактивные элементы меньше 44×44. Ниже
   исправлены группы, а не отдельные кнопки — иначе через месяц вернутся.

   Норма 44×44 — не круглое число из головы: это минимальная цель касания в
   рекомендациях Apple, и она примерно равна подушечке большого пальца
   взрослого человека. Промах по кнопке на складе означает, что человек
   закроет сайт и позвонит конкуренту.

   Приём один и тот же почти везде: не растягиваем элемент, а добавляем
   вертикальные отступы и центрируем содержимое. Ширина и вид не меняются,
   меняется только область, которая ловит палец.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─────────── 1. Ссылки и кнопки: минимальная высота ─────────── */

/* Подвал мобильного приложения: 48 «чипов» высотой 36 и строки контактов
   высотой 14 — самые мелкие цели на сайте. */
.m-app-footer__chips > a,
.m-app-footer__meta > a,
.etl-sidebar-contact > a,
.breadcrumb__item > a.breadcrumb__link,
.tariff-nav > a,
.svc-quicknav > a,
.related-lead > a,
.docreg-link,
.geo-list > .btn-outline,
.bento-card-link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}

/* Ссылка в строке текста (подпись под полем, «Подробнее», сноска) — растянуть
   её на 44 px нельзя, разорвёт абзац. Расширяем область касания невидимой
   накладкой: сам текст остаётся на месте. */
.m-app-footer__meta > a,
.etl-sidebar-contact > a,
.breadcrumb__item > a.breadcrumb__link,
sub > a {
  position: relative;
}
.m-app-footer__meta > a::after,
.etl-sidebar-contact > a::after,
.breadcrumb__item > a.breadcrumb__link::after,
sub > a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 44px;
  transform: translateY(-50%);
  /* Только для пальца: ничего не рисует и не перехватывает выделение текста. */
}

/* Кнопки внутри таблиц и списков — «Скачать», «Открыть», «Запросить». */
.docreg-link {
  padding: 11px 16px !important;
  justify-content: center;
}

/* ─────────── 2. Флажки и переключатели ─────────── */

/* input 17×17 нажать пальцем нельзя. Увеличиваем не сам квадрат — он должен
   остаться маленьким и аккуратным, — а метку рядом: она и есть цель. */
.rq__opts > label.rq__opt,
label.rq__opt,
.etl-consent {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
}
.rq__opt > input,
.etl-consent > input {
  width: 22px !important;
  height: 22px !important;
  flex: none;
}

/* Одиночные подписи к полям высотой 15 px: их часто нажимают, чтобы
   поставить фокус в поле. */
.docreg-search-wrap > label,
form label {
  display: inline-flex;
  align-items: center;
  min-height: 24px;      /* подпись — не кнопка, 44 здесь разорвёт форму */
}

/* ─────────── 3. Поля ввода ─────────── */

/* iOS Safari принудительно увеличивает страницу, если поле мельче 16 px, и
   вёрстка «прыгает». Это не вопрос вкуса — это поведение браузера. */
input[type="text"],
input[type="email"],
input[type="tel"],
input[type="number"],
input[type="search"],
input[type="password"],
input[type="date"],
input[type="time"],
select,
textarea {
  font-size: 16px !important;
  min-height: 44px;
}
textarea { min-height: 88px; }

/* ─────────── 4. Размер текста ─────────── */

/* Ничего мельче 13 px в содержательном тексте. Мельче — читается только
   в идеальных условиях, а наш человек читает на солнце и на ходу. */
main p,
main li,
main td,
main th,
.mini,
.note,
.svc-panel-item span {
  font-size: max(13px, 1em);
}

/* ─────────── 5. Баннер cookies ─────────── */

/* На телефоне баннер занимал почти половину экрана и закрывал содержимое —
   на странице тарифов под ним пропадала вся таблица. Делаем его компактной
   полосой над нижней панелью: текст в две строки, кнопки в ряд. */
.etl-cookie__card {
  padding: 12px 14px !important;
  gap: 10px !important;
  border-radius: var(--r-md) 14px 0 0 !important;
}
body.has-mbar .etl-cookie {
  bottom: calc(56px + env(safe-area-inset-bottom, 0px)) !important;
}
.etl-cookie__text {
  font-size: 13px !important;
  line-height: 1.4 !important;
  /* Три строки — предел: дальше баннер снова съедает экран. Остальное
     читается по ссылке «Подробнее», она рядом. */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.etl-cookie__actions {
  display: flex !important;
  /* Кнопки стояли столбиком и занимали 104 px из 194 — половину баннера.
     В ряд они помещаются: «Отклонить» и «Принять» короткие. */
  flex-direction: row !important;
  gap: 8px !important;
}
/* ETL_COOKIE_SPACER_0830. Здесь стояло `.etl-cookie-spacer { height: 0
   !important }` — распорку прибили, потому что она выходила 250 px, больше
   самой панели. Причина была в двойном учёте нижнего отступа при расчёте
   (см. cookie_banner.js); причину починили, заглушка снята. Без распорки
   баннер закрывал 171 px контента на 390 px — ТЗ §8 требует обратного. */
.etl-cookie__btn {
  flex: 1;
  min-height: 44px;
  padding: 11px 12px !important;
  font-size: 14px !important;
  white-space: nowrap;
}

/* ─────────── 6. Отклик на касание ─────────── */

/* На телефоне нет наведения. Всё, что реагирует только на :hover, на
   телефоне не реагирует никак — а иногда требует двух касаний: первое
   «наводит», второе нажимает. Даём явное нажатое состояние. */
a:active,
button:active,
.btn:active,
[role="button"]:active {
  opacity: .78;
  transition-duration: .06s;
}

/* Подсветку касания не выключаем совсем — человек должен видеть, что попал, —
   а приводим к фирменному цвету с низкой прозрачностью. */
a, button, [role="button"], label, summary, input, select, textarea {
  -webkit-tap-highlight-color: rgba(230, 30, 41, .12);
}

@media (prefers-reduced-motion: reduce) {
  a:active, button:active, .btn:active, [role="button"]:active { opacity: 1; }
}

/* ─────────── 7. Таблицы тарифов — карточками ─────────── */

/* Семь колонок в 390 px не помещаются никак. До этой правки таблица
   прокручивалась вбок: чтобы прочитать одну строку, приходилось возить
   палец туда-обратно и держать в голове, где какая колонка. Разворачиваем
   каждую строку в карточку: слева подпись колонки, справа значение.

   Подписи берутся из data-l, который проставляет tools/gen_pricing.py, —
   то есть они не могут разойтись с шапкой таблицы. */
@media (max-width: 760px) {
  #tariffs-table .price-table-wrap { overflow: visible !important; }

  /* В общем слое стоит `min-width: 640px !important` — он нужен, пока
     таблица остаётся таблицей и прокручивается вбок. В режиме карточек он
     выталкивает значения за экран, поэтому снимаем. */
  body#top #tariffs-table .price-table,
  #tariffs-table .price-table {
    min-width: 0 !important;
    table-layout: auto !important;
  }
  body#top #tariffs-table .price-table td:first-child,
  body#top #tariffs-table .price-table th:first-child { width: auto !important; }

  #tariffs-table .price-table,
  #tariffs-table .price-table tbody,
  #tariffs-table .price-table tr,
  #tariffs-table .price-table td {
    display: block;
    width: auto;
  }

  /* Шапка не нужна: её роль берут на себя подписи в каждой карточке. */
  #tariffs-table .price-table thead {
    position: absolute;
    width: 1px; height: 1px;
    overflow: hidden; clip: rect(0 0 0 0);
    white-space: nowrap;
  }

  #tariffs-table .price-table tr {
    margin: 0 0 10px;
    padding: 12px 14px;
    border: 1px solid rgba(16, 24, 32, .10);
    border-radius: var(--r-md, 12px);
    background: rgba(16, 24, 32, .015);
  }
  html[data-theme="dark"] #tariffs-table .price-table tr {
    border-color: rgba(232, 236, 245, 0.62);
    background: rgba(255, 255, 255, .03);
  }

  /* Первая ячейка — название направления, заголовок карточки. */
  #tariffs-table .price-table td:first-child {
    padding: 0 0 8px !important;
    margin-bottom: 8px;
    border-bottom: 1px solid rgba(16, 24, 32, .10);
    font-weight: 600;
    font-size: 15px;
  }
  html[data-theme="dark"] #tariffs-table .price-table td:first-child {
    border-bottom-color: rgba(232, 236, 245, 0.62);
  }
  #tariffs-table .price-table td:first-child::before { content: none; }

  /* Остальные — пара «подпись → значение» в одну строку. */
  #tariffs-table .price-table td {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 3px 0 !important;
    border: 0 !important;
    font-size: 14px;
    line-height: 1.35 !important;
  }
  #tariffs-table .price-table td::before {
    content: attr(data-l);
    flex: 1 1 auto;
    min-width: 0;
    color: rgba(29, 29, 27, 0.64);
    font-size: 13px;
    line-height: 1.35;
  }
  html[data-theme="dark"] #tariffs-table .price-table td::before {
    color: rgba(232, 236, 245, 0.62);
  }
  /* Значение прижато вправо и не переносится: цифры должны стоять столбиком. */
  #tariffs-table .price-table td {
    text-align: right;
  }
  #tariffs-table .price-table td::before { text-align: left; }
}

/* ─────────── 8. Перебивка старых ограничений ───────────

   Часть мелких целей задана в общем слое селекторами с идентификатором и
   !important — например `body#top footer.mobile-app-footer-ready
   .m-app-footer__chips a { min-height: 36px !important }`. Такой селектор
   тяжелее любого класса, поэтому здесь селекторы повторены один в один и
   дополнены !important: этот файл подключается последним, и при равном весе
   выигрывает он.

   Дублирование намеренное. Альтернатива — править общий слой, а он общий
   для десктопа и телефона: там 36 px оправданы, здесь нет. */

body#top footer.mobile-app-footer-ready .m-app-footer__chips a {
  min-height: 44px !important;
  padding: 0 14px !important;
  font-size: 13px !important;
}
body#top footer.mobile-app-footer-ready .m-app-footer__meta a {
  display: inline-flex !important;
  align-items: center !important;
  min-height: 44px !important;
}

/* Флажок 17×17 в форме заявки: сам квадрат оставляем маленьким и аккуратным,
   но цель касания — метка целиком, поэтому квадрат чуть крупнее, а всё
   остальное добирает <label>. */
body#top .rq input[type="checkbox"],
body#top .rq input[type="radio"] {
  width: 22px !important;
  height: 22px !important;
}

/* ETL_ADMIN_LINK_TAP_0907: «Забыли пароль» на входе в админку — 36 px.
   Страница внутренняя, но заходят с телефона так же, как на любую другую. */
body .login-forgot-link {
  min-height: 44px !important;
  display: inline-flex !important;
  align-items: center !important;
}

body#top .etl-sidebar-contact a,
body#top .geo-list .btn-outline,
body#top .svc-quicknav a,
body#top .tariff-nav a,
body#top .breadcrumb__item a.breadcrumb__link {
  min-height: 44px !important;
  display: inline-flex !important;
  align-items: center !important;
}

/* Логотип в мобильной шапке — 34 px, попасть трудно, а нажимают его часто:
   это возврат на главную. */
body#top .etl-mobile-body-logo {
  min-height: 44px !important;
  display: inline-flex !important;
  align-items: center !important;
}

/* Догоняем ещё три группы, где вес общего слоя выше обычного класса.
   Селекторы снова повторяют исходные — иначе не перебить. */

/* Реестр документов: у кнопок «Скачать/Открыть» min-height 32. */
body#top .docreg-link,
body#top a.docreg-link {
  min-height: 44px !important;
}

/* Контакты в боковом меню: правило задано через
   `html body#top aside.sidebar.etl-sidebar :is(…)`. */
html body#top aside.sidebar.etl-sidebar .etl-sidebar-contact a {
  display: inline-flex !important;
  align-items: center !important;
  min-height: 44px !important;
}

/* Флажки заявки: исходное правило `body#top .rq input[type="checkbox"]`
   стоит в том же весе, поэтому добавляем ещё один уровень. */
html body#top .rq input[type="checkbox"],
html body#top .rq input[type="radio"] {
  width: 22px !important;
  height: 22px !important;
  min-height: 22px !important;
}

/* Ссылка «Подробнее» в баннере cookies и сноски: растянуть нельзя,
   расширяем область касания накладкой. */
.etl-cookie__text > a,
.svc-quicknav > a,
.geo-list > .btn-outline {
  position: relative;
  min-height: 44px;
}
.etl-cookie__text > a::after {
  content: "";
  position: absolute;
  left: -6px; right: -6px; top: 50%;
  height: 44px;
  transform: translateY(-50%);
}
body#top .geo-list .btn-outline,
body#top .svc-quicknav a {
  min-height: 44px !important;
  padding-top: 10px !important;
  padding-bottom: 10px !important;
}

/* ─────────── 9. Последние две группы ───────────

   Поля формы обратной связи (.lead-input) и ячейки тарифных таблиц заданы
   правилами тяжелее обычного класса. Повторяем адресно. */

/* 14,2 px в поле — iOS увеличит страницу при фокусе и собьёт вёрстку. */
html body#top .lead-input,
html body#top input.lead-input,
html body#top textarea.lead-input {
  font-size: 16px !important;
}

/* Тарифы: 179 ячеек мельче 13 px. В режиме карточек места достаточно —
   мельчить незачем. */
html body#top #tariffs-table .price-table td,
html body#top #tariffs-table .price-table th {
  font-size: 14px !important;
}
html body#top #tariffs-table .price-table td::before { font-size: 13px !important; }

/* Подписи-плашки у PDF-файлов и в поиске. */
html body#top .pdf-doc__pill,
html body#top .pdf-doc__foot,
html body#top .etl-site-search__meta {
  font-size: 13px !important;
}

/* ═══════════════════════════════════════════════════════════════════════════
   10. Планшеты и складные — не «большой телефон» и не «маленький ноутбук»

   Замер по матрице из двенадцати устройств показал разрыв: на телефонах
   31–34 мелкие цели, на iPad 820 и 1024 — 82–83. Причина простая. Почти вся
   мобильная правка в общем слое сайта закрыта в `@media (max-width: 767px)`
   или 768. Выше этой границы включается десктопная плотность — кнопки 34 px,
   подписи 11 px, — но палец от смены ширины экрана толще не становится.

   Планшет — это касание при десктопной раскладке. Ниже добираем ровно те
   группы, что теряются между 768 и 1099.
   ═══════════════════════════════════════════════════════════════════════════ */

@media (min-width: 700px) {

  /* Подвал мобильного приложения: на планшете кнопки «Заявка» и «Позвонить»
     возвращаются к 34 px. Это две главные кнопки страницы. */
  body#top footer.mobile-app-footer-ready .m-app-footer__btn,
  body#top footer.mobile-app-footer-ready .m-app-footer__btn--primary,
  body#top footer.mobile-app-footer-ready .m-app-footer__btn--ghost {
    min-height: 44px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }

  /* Липкая полоса связи: кнопка 34 px и телефон 16 px по высоте. */
  body#top .etl-sticky-cta__btn {
    min-height: 44px !important;
    padding-top: 10px !important;
    padding-bottom: 10px !important;
  }
  body#top .etl-sticky-cta__phone {
    min-height: 44px !important;
    display: inline-flex !important;
    align-items: center !important;
  }

  /* Управление видео в шапке: 38×42. Пауза — единственный способ остановить
     ролик тому, кого он отвлекает. */
  body#top.index-page .hero-vidctrl__btn {
    min-width: 44px !important;
    min-height: 44px !important;
  }

  /* Стрелка «листайте вниз» 20×20. На телефонах она скрыта, на планшете
     видна и нажимается. */
  body#top.index-page .hero-scrollcue {
    min-width: 44px !important;
    min-height: 44px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }

  /* Подписи, которые на телефоне уже подняты до 13 px, а на планшете
     возвращаются к 11–12. Ширина экрана больше — причин мельчить нет. */
  body#top .footer-bottom span,
  body#top footer .footer-text,
  body#top .etl-breadcrumb-current,
  body#top .m-app-footer__meta,
  body#top .m-app-footer__meta a {
    font-size: 13px !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   11. Мелкий текст, который остался на всех ширинах

   Ниже — группы из замера: 12 px в описаниях шагов, в подписях к цифрам
   в шапке, в плашках карточек. Каждая из них — содержательный текст, а не
   декоративная подпись, и читают его на улице.
   ═══════════════════════════════════════════════════════════════════════════ */

body#top.index-page #how .process-step__lead,
body#top.index-page #how.etl-how-mobile .process-step__lead {
  font-size: 14px !important;
  line-height: 1.5 !important;
}

body#top.index-page .hero-stat__lbl,
body#top.index-page .hero-point,
body#top.index-page .hero-premium--video .hero-point {
  font-size: 13px !important;
}

body#top.index-page #dispatch-regularity .task-card__mode {
  font-size: 13px !important;
}

body#top .quote-field span,
body#top .geo-legend .geo-leg,
body#top .cargo-head .cargo-kicker,
body#top .footer-links .footer-text {
  font-size: 13px !important;
}

/* ═══════════════════════════════════════════════════════════════════════════
   12. Оставшиеся мелкие цели

   Кнопки выбора региона на карте — 38 px и их шесть подряд: промах по
   соседней означает, что человек смотрит тариф не того направления.
   ═══════════════════════════════════════════════════════════════════════════ */

body#top #geo .geo-btn,
body#top .geo-list .geo-btn,
html body#top .geo-list > .btn-outline.geo-btn {
  min-height: 44px !important;
  padding-top: 11px !important;
  padding-bottom: 11px !important;
}

/* Список отраслей на главной: ссылки 35 px стоят вплотную друг к другу. */
body#top .trust-sectors__list > li > a {
  display: inline-flex !important;
  align-items: center !important;
  min-height: 44px !important;
}

/* Ссылка «Пропустить к содержимому» видна только с клавиатуры, но если уж
   видна — попадать в неё должно быть можно. */
body#top a.etl-skip-link {
  min-height: 44px !important;
  display: inline-flex !important;
  align-items: center !important;
}

/* ═══════════════════════════════════════════════════════════════════════════
   13. Прокрутка внутри панелей и альбомная ориентация
   ═══════════════════════════════════════════════════════════════════════════ */

/* Докрутив меню до конца, палец продолжает движение — и утягивает вниз
   страницу под меню. Человек закрывает меню и обнаруживает, что уехал в
   другое место. `contain` останавливает прокрутку на границе панели. */
body#top .sidebar.etl-sidebar,
body#top .p-mobile-menu,
body#top .p-mobile-inner,
body#top .etl-cookie,
.quote-modal__dialog,
.map-modal-body {
  overscroll-behavior: contain;
}

/* ─────────── Альбомная ориентация ───────────

   Телефон боком: по высоте остаётся 320–400 px. Нижняя панель 56 px забирает
   из них шестую часть, а фиксированные полосы — ещё столько же. В этой
   ориентации на сайт смотрят редко и коротко (открыли ссылку, глянули), так
   что отдаём высоту содержимому. */
@media (orientation: landscape) and (max-height: 480px) {
  #mbar .mbar__item.mbar__item {
    height: 44px;
    min-height: 44px;
    padding-top: 0;
    padding-bottom: 0;
    flex-direction: row;
    gap: 7px;
  }
  #mbar .mbar__ico { width: 20px; height: 20px; }
  #mbar .mbar__txt { font-size: 12px !important; }
  body.has-mbar,
  body#top.has-mbar {
    padding-bottom: calc(44px + env(safe-area-inset-bottom, 0px)) !important;
  }
  body.has-mbar .etl-uibtt,
  body.has-mbar #etlBtt,
  body.has-mbar .etl-chat-fab {
    bottom: calc(44px + 10px + env(safe-area-inset-bottom, 0px)) !important;
  }
  body.has-mbar .etl-cookie {
    bottom: calc(44px + env(safe-area-inset-bottom, 0px)) !important;
  }

  /* Экран высотой в 360 px не должен целиком уходить под шапку героя. */
  body#top.index-page .hero-premium--video {
    height: auto !important;
    min-height: 0 !important;
    padding-bottom: 32px;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   14. Липкая полоса связи и нижняя панель — не вдвоём

   Полоса `.etl-sticky-cta` появилась до нижней панели и делала ровно то же:
   держала на виду «Отправить заявку» и телефон. Теперь это четвёртый и пятый
   пункты панели, всегда на экране. Две полосы друг над другом съедают 120 px
   из 844 и спорят за один и тот же палец.
   ═══════════════════════════════════════════════════════════════════════════ */

body.has-mbar .etl-sticky-cta,
body#top.has-mbar .etl-sticky-cta {
  display: none !important;
}

/* ═══════════════════════════════════════════════════════════════════════════
   15. Догоняем последние группы после повторного замера

   После секций 10–14 на телефонах осталось 22–25 мелких целей вместо 31–34,
   на планшетах 57 вместо 82. Разбор остатка показал две вещи.

   Первая: часть «мелких» целей мелкие по замыслу — флажок 22×22 внутри метки
   высотой 44. Цель там — метка, и она в норме; правило ниже их не трогает.

   Вторая: почти весь настоящий остаток — кнопки высотой ровно 42 px. Два
   пикселя. Берутся они из общего слоя `padding: 11px 17px` при шрифте 15:
   11 + 20 + 11 = 42. На десктопе спорить не о чем, на телефоне эти два
   пикселя и есть разница между попаданием и промахом.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Кнопки второго уровня: тот же список, что в общем слое, плюс !important —
   иначе правило из global_nav_footer_theme перебивает. */
html body#top :is(.btn-outline, .btn, .acc-btn, .seg-btn, .geo-btn, .cp-btn,
                  .cp-btn-ghost, .p-btn-ghost, .btn-ghost, .hero-calc-btn) {
  min-height: 44px !important;
}

/* Кнопки-плашки: фильтры реестра документов, чипы у PDF, режимы у помощника,
   кнопки модального окна запроса. Все ровно 42. */
html body#top :is(.docreg-filter, .pdf-chip, .etlai__chip, .quote-modal__close,
                  .quote-modal__actions .btn-primary,
                  .quote-modal__actions .btn-outline) {
  min-height: 44px !important;
}

/* Кнопки региона на карте: правило задано как
   `body#top.index-page #geo .geo-btn` — два идентификатора и два класса.
   Чтобы перебить, повторяем его целиком и добавляем html. */
html body#top.index-page #geo .geo-btn,
html body#top.index-page #geo .geo-list > .geo-btn {
  min-height: 44px !important;
  padding: 0 16px !important;
}

/* Поле ввода помощника — 35 px. Это главное поле страницы: в него пишут
   запрос словами. */
html body#top .etlai__field > .etlai__input,
html body#top input.etlai__input {
  min-height: 44px !important;
}

/* Короткие ссылки внутри абзаца («Подробнее», «см. тариф»): растянуть нельзя,
   расширяем область касания невидимой накладкой — приём тот же, что в первой
   секции, но здесь и по горизонтали: ссылка шириной 34 px не ловит палец. */
html body#top :is(.related-lead, .svc-lead, .note, .mini) > a,
html body#top main p > a:not(.btn):not(.btn-outline):not(.btn-primary) {
  position: relative;
}
html body#top :is(.related-lead, .svc-lead, .note, .mini) > a::after,
html body#top main p > a:not(.btn):not(.btn-outline):not(.btn-primary)::after {
  content: "";
  position: absolute;
  left: -8px;
  right: -8px;
  top: 50%;
  height: 44px;
  transform: translateY(-50%);
}

/* ═══════════════════════════════════════════════════════════════════════════
   16. Третий проход: остаток после секций 10–15

   Замер после правок оставил 2 цели на телефонах и 5–8 на планшетах, но
   мелкого текста — ещё 41–45. Разбор по группам ниже. Самая заметная находка:
   подписи в контактах бокового меню набраны 8,5 px. Это не «мелко», это
   нечитаемо: столько же занимает копирайт в нижнем углу договора.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Подписи «Телефон», «Почта», «Адрес» над контактами в меню. */
html body#top aside.sidebar.etl-sidebar .etl-sidebar-contact > span,
html body#top .etl-sidebar-contact > span {
  font-size: 13px !important;
  line-height: 1.35 !important;
}

/* Метки типов документов в реестре — 29 штук на странице, и по ним ищут. */
html body#top .docreg-tag,
html body#top td > .docreg-tag {
  font-size: 13px !important;
}

/* Подвал мобильного приложения: строка реквизитов и подпись под логотипом. */
html body#top footer.mobile-app-footer-ready .m-app-footer__meta,
html body#top footer.mobile-app-footer-ready .m-app-footer__meta span,
html body#top footer.mobile-app-footer-ready .m-app-footer__brand-text,
html body#top footer.mobile-app-footer-ready .m-app-footer__brand-text span {
  font-size: 13px !important;
}

/* Нижняя строка подвала, хлебные крошки и текст колонок — на телефоне тоже,
   а не только на планшете (в секции 10 правило закрыто в min-width: 700). */
html body#top .footer-bottom span,
html body#top footer .footer-col .footer-text,
html body#top .etl-breadcrumb .etl-breadcrumb-current {
  font-size: 13px !important;
}

/* Мелкий текст в калькуляторе и заявке: сноска под кнопкой отправки, надпись
   над полем «Откуда», надзаголовок. Сноска под кнопкой — про персональные
   данные, её обязаны прочитать. */
html body#top .calc__from-note,
html body#top .calc__fine,
html body#top .rq__fine,
html body#top .rq-eyebrow {
  font-size: 13px !important;
  line-height: 1.4 !important;
}

/* ─────────── Оставшиеся цели ─────────── */

/* Кнопки баннера cookies и служебные кнопки-ссылки калькулятора — те же 42. */
html body#top .etl-cookie__btn,
html body#top .calc__link,
html body#top .calc__reset,
html body#top .rq__btn,
html body#top .rq__sticky .rq__btn {
  min-height: 44px !important;
}

/* Крестик модального окна — 38 в ширину. */
html body#top .quote-modal__close {
  min-width: 44px !important;
  min-height: 44px !important;
}

/* Согласие на обработку данных в заявке: метка высотой 24. Правило в
   секции 2 знает `.rq__opt` и `.etl-consent`, но не `.rq__consent`. */
html body#top label.rq__consent,
html body#top .rq__consent {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  min-height: 44px !important;
}
html body#top .rq__consent > input {
  width: 22px !important;
  height: 22px !important;
  flex: none !important;
}

/* Ссылки, обёрнутые в <span> внутри абзаца, — накладка как в секции 15. */
html body#top main span > a:not(.btn):not(.btn-outline):not(.btn-primary),
html body#top footer span > a:not(.btn):not(.btn-outline):not(.btn-primary) {
  position: relative;
}
html body#top main span > a:not(.btn):not(.btn-outline):not(.btn-primary)::after,
html body#top footer span > a:not(.btn):not(.btn-outline):not(.btn-primary)::after {
  content: "";
  position: absolute;
  left: -8px;
  right: -8px;
  top: 50%;
  height: 44px;
  transform: translateY(-50%);
}

/* ═══════════════════════════════════════════════════════════════════════════
   17. Настольная раскладка на сенсорном экране

   Планшет боком — 1180 px. По ширине это десктоп, и сайт честно показывает
   десктопную шапку и десктопный подвал. Но указатель там палец.

   Замер дал 149 мелких целей, и почти все — карта сайта в подвале: девяносто
   ссылок высотой 15 px, поставленных вплотную. Мышью по такой колонке
   попадают, пальцем — нет.

   Этот блок доезжает сюда только через media="(pointer: coarse)": у мыши
   плотный подвал остаётся плотным, как и был.
   ═══════════════════════════════════════════════════════════════════════════ */

@media (pointer: coarse) {

  /* Карта сайта и колонки ссылок в подвале. Подвал станет выше — это
     осознанный размен: высота подвала ничего не стоит, промах по ссылке
     стоит перехода. */
  html body#top .footer-sitemap-group > a,
  html body#top .footer-links > a,
  html body#top .footer-legal > a,
  html body#top .footer-city-links > a,
  html body#top .b-nav__contact > a,
  html body#top .b-nav__social > a,
  html body#top a.footer-director {
    display: inline-flex !important;
    align-items: center !important;
    min-height: 44px !important;
  }

  /* Служебные кнопки в шапке: телефон, кабинет, переключатель темы,
     «во весь экран» — все ровно 42 или 36. */
  html body#top .p-util > .p-util__phone,
  html body#top .p-util > .p-util__cab,
  html body#top .p-util > .theme-switch,
  html body#top a.max-link,
  html body#top .wrapper > a.max-link {
    min-width: 44px !important;
    min-height: 44px !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   17. Остаток после замера 18.08

   Те же два пикселя, что и в секции 15, но у кнопок, которых там не было:
   призрачная кнопка в шапке услуги и в шапке страницы груза (42 px) и
   ссылка-кнопка в карточке кейса (32 px).
   ═══════════════════════════════════════════════════════════════════════════ */

html body#top :is(.svc-ghost, .cargo-ghost, .case-card__link) {
  min-height: 44px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
