

/* Start:/local/templates/mgc/styles.css?178727008667412*/
/* ============================================================
   MGC GROUP — общий слой сайта
   Собран из каркас/tokens.css и каркас/blocks.css скриптом
   _build/make_package.py. Руками не править: правка вносится
   в каркас и пересобирается, иначе слои разъедутся.
   Подключается один раз в шаблоне, до файла страницы.
   ============================================================ */

/* ============================================================
   MGC GROUP — сквозной каркас: шрифты, типографика, палитра
   Источник: пакет_вёрстки/_общее/ТЗ_каркас.md
   Подключение шрифтов только локальное: системный фолбэк ломает
   пиксельную сверку (чужие метрики → другие переносы).
   ============================================================ */

@font-face {
  font-family: 'Helvetica Neue';
  src: url('/local/templates/mgc/fonts/helvetica-neue/HelveticaNeue-Light.woff2') format('woff2');
  font-weight: 300; font-style: normal; font-display: block;
}
@font-face {
  font-family: 'Helvetica Neue';
  src: url('/local/templates/mgc/fonts/helvetica-neue/HelveticaNeue-Regular.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: block;
}
@font-face {
  font-family: 'Helvetica Neue';
  src: url('/local/templates/mgc/fonts/helvetica-neue/HelveticaNeue-Bold.woff2') format('woff2');
  font-weight: 700; font-style: normal; font-display: block;
}
@font-face {
  font-family: 'Akt';
  src: url('/local/templates/mgc/fonts/akt/Akt-Bold.woff2') format('woff2');
  font-weight: 700; font-style: normal; font-display: block;
}
/* Gros Ventre — шрифт первой редакции макета. Снят 18 августа 2026: сайт
   живёт на Helvetica Neue, а старый шрифт оставался ровно в одном месте
   («Тогда / Сейчас» на «Истории») и тянул за собой лишний файл на каждой
   странице. Сами файлы шрифта в пакете оставлены — удалить можно вместе
   с папками fonts/gros-ventre. */

:root {
  /* --- сетка --- */
  --canvas: 1440px;
  --container: 1200px;
  /* Боковое поле страницы. Тянется от 120 на холсте 1440 до 40 на 1024.
     Проценты, а не vw: процент считается от ширины сцены, которую браузер уже
     уменьшил на вертикальную полосу прокрутки, а 100vw полосу не вычитает и
     разъезжается с рендером гейта на те же 15px.
     Формула читается так: 40 плюс шестая часть того, на сколько окно шире 1024.
     На 1440 это 40 + 416/5.2 = 120 ровно, на 1024 — ровно 40.
     Тот же приём («тянущееся число») используется дальше по файлу для отступов,
     которые обязаны сходиться в двух точках сразу.
     Ниже 1024 поле продолжается второй формулой — см. запрос сразу под :root. */
  /* Третий член добавлен 18 августа 2026 (правка 0.1 ревью клиента: «по бокам
     страницы серый зазор, картинка не доходит до краёв экрана»). Сцена сняла
     потолок 1440 и тянется по окну, поэтому выше холста поле обязано расти
     само: иначе контейнер 1200 прилип бы к левому краю, а справа осталась бы
     пустота в полэкрана. Третий член и есть центрирование контейнера —
     половина того, на сколько окно шире 1200.
     Ниже 1440 он всегда меньше второго и в max не выигрывает, поэтому вся
     дистанция 1024→1440 осталась ровно прежней: на 1024 поле 40, на 1440 —
     120, как и было. Выше 1440 выигрывает он: на 1920 поле 360 и контент
     стоит по центру. Проверено рендером всех страниц на 1440/1920/2560. */
  --gutter: max(40px, calc(40px + (100% - 1024px) * 80 / 416), calc((100% - 1200px) / 2));

  /* Отступ между заголовком и текстом под ним. Одно число на весь сайт:
     первый экран, контентная секция, колонка формы — везде одинаково.
     Меняется только здесь. */
  --gap-head: 32px;

  /* --- семейства --- */
  --sans: 'Helvetica Neue', 'HelveticaNeueCyr', Helvetica, Arial, sans-serif;
  --arrow: 'Akt', 'Helvetica Neue', sans-serif;

  /* --- палитра --- */
  --red: #b22029;
  --red-hover: #c8323b;
  --dark: #131720;
  --hero-bg: #f9f9f7;
  --white: #ffffff;
  --grey-bg: #f3f4f5;
  --blue-bg: #d7e3e7;
  --text: #1a1a1a;
  --text-secondary: #7a7a7a;
  --border-table: #b2b2b2;
  --border-search: #c8c7c7;
  --placeholder: #757575;
  --field-bg: #e8eaeb;      /* поля фильтра, стр. 04 */
  --dot-idle: #d9d9d9;      /* неактивная точка слайдера, стр. 02 */
  --dot-active: #000000;    /* активная точка слайдера: в макете чистый чёрный, не --text */
  --subtitle: #4a4a4a;      /* подзаголовок, стр. 05 */
  /* Границы и подписи карточек. Были объявлены прямо на страницах 03 и 04
     одинаковыми значениями и в палитру не возвращались — подняты 7 августа 2026. */
  --card-border: #cac7c7;
  --card-caption: #aeaeae;
  /* тёмная подложка секции с фотографией (кросслинк) */
  --dark-photo: #1a1a1a;
  --glass: rgba(164, 155, 155, 0.1);
  --plate-border: rgba(0, 0, 0, 0.15);
  --black-60: rgba(0, 0, 0, 0.6);
  --black-50: rgba(0, 0, 0, 0.5);
  --on-dark-10: rgba(255, 255, 255, 0.1);
  --on-dark-30: rgba(255, 255, 255, 0.3);
  --on-dark-50: rgba(255, 255, 255, 0.5);
  --on-dark-60: rgba(255, 255, 255, 0.6);
  --on-dark-70: rgba(255, 255, 255, 0.7);
  --on-dark-85: rgba(255, 255, 255, 0.85);
}

/* ============================================================
   ПОЛЕ СТРАНИЦЫ НИЖЕ 1024 — мобильная фаза
   Стандарт адаптива задаёт поля тремя числами: 120 на холсте, 40 и 20.
   Первая формула довела поле до 40 к 1024; вторая держит эти 40 до 768 и
   дальше тянет их до 20 на 375. Между 768 и 375 идёт прямая, ступеньки нет.
   Верхнюю границу clamp держит на 40: выше 768 вторая формула даёт больше
   сорока и просто упирается в потолок, поэтому запрос можно было бы ставить
   и от 1023, и от 768 — результат один. Оставлен 1023: одно место, где
   написано «ниже десктопа поле живёт по этому правилу».
   Числа читаются так: 20 плюс та доля от двадцати, какую окно набрало над
   375 из 393 доступных до 768. На 768 это 20 + 20 = 40, на 375 — ровно 20.
   Процент внутри токена считается от того, к чему токен приложен, — от сцены
   и её секций, как и в первой формуле. Поле обязано меняться одним числом:
   на нём стоят шапка, крошки, колонки секций, форма и подвал.
   ============================================================ */
@media (max-width: 1023px) {
  :root {
    --gutter: clamp(20px, calc(20px + (100% - 375px) * 20 / 393), 40px);
  }
}

/* ============================================================
   Типографические токены — из переменных Figma, не подбирать на глаз
   ============================================================ */
.t-h1-62      { font-weight: 700; font-size: 62px; line-height: 1;    letter-spacing: -1px; }
.t-h2-56      { font-weight: 700; font-size: 56px; line-height: 1;    letter-spacing: -0.56px; }
/* letter-spacing −0.24px, а не −1px: −1 не встречается на страницах ни разу,
   −0.24 стоит в 16 правилах на четырёх страницах. Токен приведён к тому, что
   реально свёрстано; правка вида ни на одной странице не даёт (класс нигде
   не подключён — ни на страницах, ни в preview). */
/* Заголовок 36 — из переменных Figma. Токен добавлен 18 августа 2026 по
   правке 2.2 ревью: класс t-h3-36 стоял в разметке «Направлений R&D», но
   правила под него в каркасе не было, и заголовок рисовался браузерным
   умолчанием h2 (32px, свой межстрочный интервал). Трекинг взят по той же
   пропорции, что у соседних токенов: −0.01em. */
.t-h3-36      { font-weight: 700; font-size: 36px; line-height: 1.1;  letter-spacing: -0.36px; }
.t-h3-24      { font-weight: 700; font-size: 24px; line-height: 1;    letter-spacing: -0.24px; }
.t-h3-24-caps { font-weight: 700; font-size: 24px; line-height: 1;    letter-spacing: 0; text-transform: uppercase; }
.t-h4-16      { font-weight: 700; font-size: 16px; line-height: 1.2;  letter-spacing: 0; }
.t-num-82     { font-weight: 700; font-size: 82px; line-height: 1.05; letter-spacing: -0.5px; }
.t-text-20    { font-weight: 400; font-size: 20px; line-height: 1.4; }
/* Межстрочность целым пикселем, а не коэффициентом: 16 × 1.4 = 22.4 уводит
   строки на дробные координаты. 22px стоит в 28 правилах контента против 5
   каркасных с 1.4 — свели к большинству 7 августа 2026. Сверка при этом стала
   ЛУЧШЕ на пяти секциях (форма стр. 01: 1.12 → 0.80), хуже нигде. */
.t-text-16    { font-weight: 400; font-size: 16px; line-height: 22px; }
.t-text-14    { font-weight: 400; font-size: 14px; line-height: 1.4; }
.t-caption-12 { font-weight: 400; font-size: 12px; line-height: 18px; }
/* Копирайт и соцсети футера. Единственное начертание Light в токенах: в макете
   нижняя строка футера тоньше остального текста. 10 мест на пяти страницах. */
.t-caption-13 { font-weight: 300; font-size: 13px; line-height: 19.5px; }
.t-caption-14-caps { font-weight: 700; font-size: 14px; letter-spacing: 1.68px; text-transform: uppercase; }
.t-button-20  { font-weight: 700; font-size: 20px; line-height: 20px; }
.t-button-14  { font-weight: 400; font-size: 14px; line-height: 21px; }

/* ============================================================
   КРУПНЫЕ РАЗМЕРЫ НА УЗКИХ ШИРИНАХ
   Заголовки холста рассчитаны на строку в 1200 и на 375 рвут любую
   раскладку: одно слово в 62px занимает больше половины экрана.
   H1 идёт 62 → 44 → 32, числа взяты из решений по блокам стандарта.
   Для H2 решений по блокам нет, поэтому 56 → 40 → 30 собрано по
   каталогу поломок (там указана вилка 28–30 для мобильной ширины) и
   по шагу H1: разрыв между заголовками остаётся тем же, что на холсте.
   Трекинг едет пропорционально размеру, иначе на мелком кегле буквы
   слипаются: −1 при 62 даёт −0.71 при 44 и −0.52 при 32.
   Кнопка на 20px не помещается текстом уже на 375 — ниже 768 идёт 16.
   Правится в токенах, а не на страницах: один размер на все пять.
   ============================================================ */
@media (max-width: 1023px) {
  .t-h1-62 { font-size: 44px; letter-spacing: -0.71px; }
  .t-h2-56 { font-size: 40px; letter-spacing: -0.4px; }
  /* Тот же шаг, что у H2: 36 на холсте — 30 на узком экране. */
  .t-h3-36 { font-size: 30px; letter-spacing: -0.3px; }

  /* Правка 8.3 (ревью 18 августа 2026): заголовки на узком экране слипаются
     строками.
     В токенах у заголовков line-height: 1 — на холсте это верно, там они
     стоят в одну строку и число снято с Figma. Ниже холста колонка узкая,
     тот же заголовок ложится в две-три строки, и при интерлиньяже, равном
     кеглю, строки идут вплотную: у прописных («ПРОИЗВОДСТВЕННАЯ ПЛОЩАДКА
     В ШУШАРАХ») выносные элементы соседних строк почти касаются.
     Интерлиньяж поднят только на узкой ширине — на холсте вид прежний. */
  .t-h1-62,
  .t-h2-56,
  .t-h3-36 { line-height: 1.1; }
  .t-h3-24,
  .t-h3-24-caps { line-height: 1.25; }
}
@media (max-width: 767px) {
  .t-button-20 { font-size: 16px; line-height: 16px; }
}
@media (max-width: 639px) {
  .t-h1-62 { font-size: 32px; letter-spacing: -0.52px; }
  .t-h2-56 { font-size: 30px; letter-spacing: -0.3px; }
}

/* ============================================================
   MGC GROUP — сквозные блоки: шапка, крошки, CTA-форма, футер
   Источник координат: пакет_вёрстки/_общее/ТЗ_каркас.md
   Канва 1440, контейнер 1200, поля 120. Позиционирование — absolute
   внутри секции (.section{position:relative}).
   Канва 1440 стала потолком, а не жёстким числом: сцена и секция тянутся
   от 1440 до 1024. Ниже 1024 раскладка меняется — это отдельная работа.
   ============================================================ */

/* --- база страницы --- */
* { margin: 0; padding: 0; box-sizing: border-box; }
/* Фон под сценой белый, а не серый. Серый был виден по бокам, пока сцена
   упиралась в потолок 1440; потолок снят (см. .stage ниже), но фон оставлен
   белым сознательно: при полосе прокрутки и на резиновых секциях серый
   всё равно проступал бы кромкой. */
html, body { background: var(--white); font-family: var(--sans); color: #000;
             -webkit-font-smoothing: antialiased; }
body { overflow-x: auto; }
img { display: block; }
/* Сцена тянется по окну и упирается в потолок 1440. Жёсткая ширина стояла
   здесь до 12 августа 2026 и держала всю вёрстку: страница ниже 1440 просто
   уезжала под горизонтальную прокрутку. На 1440 правка ничего не меняет —
   проверено рендером всех пяти страниц против базы приёмки. */
/* Потолок 1440 снят 18 августа 2026 (правка 0.1 ревью клиента). Сцена тянется
   по окну на любой ширине: секции, фотографии и цветные подложки доходят до
   краёв экрана, серого поля по бокам больше нет. Контент при этом не
   расползается — его держит поле страницы --gutter, у которого появился
   центрирующий член (см. :root). Токен --canvas остался: он задаёт ту ширину
   холста, от которой посчитаны доли внутри секций, и в этой роли по-прежнему
   равен 1440. */
.stage { width: 100%; max-width: none; margin: 0 auto; background: var(--white); }
/* Нижнее поле секции — padding-bottom на самой секции, число у каждой своё
   и стоит рядом с её min-height на странице. Раньше поле было просто остатком
   жёсткой высоты: текст вырастал на строку — поле съедалось, и содержимое
   упиралось в край следующей секции. Padding живёт в потоке и едет вниз вместе
   с содержимым. Абсолютные подложки от него не двигаются: они привязаны через
   top, а padding-bottom растягивает нижний край и не трогает верхний.

   Ширина секции — по сцене. Своего числа у неё больше нет.

   ⚠️ overflow: hidden несёт ДВЕ обязанности разом, снимать нельзя ни одну:
   1. Держит верхние отступы содержимого внутри секции. Снять обрезку, ничего
      не подставив, — отступы колонок (80 и 100) выпадают наружу и страница
      растёт на 240–580px на каждой из пяти. Замерено 12 августа 2026.
   2. Режет декор по краю окна. Широкие фотографии и графика выходят за
      секцию вверх и вниз; снять обрезку, подставив display: flow-root вместо
      неё, — 9 секций на четырёх страницах меняют вид уже на 1440 (фон s05
      «Разработки продуктов» заходит в s06 на 129px, графика s06 поднимается
      в s05 на 7.5px). Эта же обрезка и есть механизм адаптива для широкого
      декора: секция сузилась — кадр обрезался по её краю.
   Замеру узкие.py обрезка не мешает: координаты элемента от неё не зависят,
   список вылезших выходит тот же с ней и без неё — проверено. */
.section { position: relative; width: 100%; overflow: hidden; }

/* ============================================================
   ШАПКА — node 1141:16834 · высота 69 · фон rgba(0,0,0,0.01)
   ============================================================ */
/* Шапка идёт первой в потоке первого экрана, крошки встают следом отступом.
   position: relative и z-index обязаны остаться: подложки первого экрана
   (.hero__bg, .hero__photo, .hero__veil, .hero__fade, .hero__pic) стоят в
   разметке ДО <header> на четырёх страницах из пяти и при static закрасят
   шапку — геометрия при этом не изменится, пропадёт только видимость.
   Поля 116 слева и 120 справа несимметричны: логотип в макете стоит на 116.
   Поля 12 сверху и 5 снизу тоже: содержимое не центрировано в высоте 69. */
/* Боковые поля шапки едут вместе с полем страницы: логотип обязан стоять на
   одной вертикали с крошками и заголовком секции. Разница в 4px между левым
   и правым полем сохраняется на всей дистанции. */
.hdr { position: relative; z-index: 5;
       display: flex; align-items: center; height: 69px;
       padding: 12px var(--gutter) 5px calc(var(--gutter) - 4px);
       background: rgba(0, 0, 0, 0.01); }
.hdr__logo { width: 303px; height: 52px; }
/* margin-top: 1px — высота меню 21 нечётная, чистое центрирование даёт 27.5.
   Отступ от логотипа тянется от 109 до нуля: к 1024 семь пунктов меню уже
   не оставляют свободного места. Процент считается от содержимого шапки,
   а оно на 1440 равно 1204 (1440 минус поля 120 и 116), на 1024 — 948.
   Отсюда и числа в формуле: на 1204 она даёт ровно 109, на 948 — ровно 0. */
.hdr__nav { margin-left: max(0px, calc((100% - 948px) * 109 / 256));
            margin-top: 1px; flex-shrink: 0;
            display: flex; align-items: flex-start; gap: 32px; }
/* Зазор между пунктами — двумя ступенями, а не формулой: процент в gap
   считался бы от ширины самого меню, а она сама зависит от зазора.
   Замер: текст семи пунктов занимает 465px, логотип 303, кнопка 32.
   На 1024 при зазоре 20 ряд встаёт в 920 при доступных 948. */
@media (max-width: 1240px) { .hdr__nav { gap: 24px; } }
@media (max-width: 1080px) { .hdr__nav { gap: 20px; } }
.hdr__nav a { font-weight: 300; font-size: 14px; line-height: 21px; color: #000;
              text-transform: lowercase; text-decoration: none; white-space: nowrap; }
/* flex-shrink: 0 — без него кнопка сминается в эллипс от первой же правки
   меню: удлинение пункта на 124px даёт 20×32 и правый край 1329. */
.hdr__search { margin-left: auto; flex-shrink: 0; width: 32px; height: 32px;
               border: 1px solid var(--border-search); border-radius: 16px;
               background: transparent; display: flex; align-items: center;
               justify-content: center; cursor: pointer; }
.hdr__search img { width: 18px; height: 18px; }

/* ============================================================
   ШАПКА НИЖЕ 1024 — бургер и выпадающая панель
   Семь пунктов занимают в ряду 585px, логотип 303, кнопка поиска 32:
   вместе 920 при боковых полях 76. Меню целым помещается только в окно
   от 996px, поэтому порог поставлен на 1023 (решение Сергея, 13 августа
   2026): между 996 и 1023 ряд ещё сходится, но держать ради 27 пикселей
   вторую раскладку незачем.
   Панель падает сверху и ложится ПОВЕРХ содержимого, не раздвигая его —
   так решено 12 августа. Отсюда absolute и непрозрачный фон: под шапкой
   на четырёх страницах из пяти лежит фотография или градиент, на прозрачной
   панели ссылки читаться не будут.
   Кнопка бургера живёт в разметке всегда и прячется на десктопе: так шапка
   остаётся одним куском разметки на все ширины, а порог задан одним местом.
   ============================================================ */
.hdr__burger { display: none; }

@media (max-width: 1023px) {
  /* Меню перестаёт быть звеном ряда и становится панелью. Отступы ряда
     (margin-left по формуле и margin-top: 1px) снимаются: они считались от
     свободного места, которого здесь больше нет. */
  .hdr__nav { position: absolute; left: 0; top: 100%;
              display: none; flex-direction: column; gap: 0;
              width: 100%; margin: 0;
              padding: 8px var(--gutter) 24px;
              background: var(--white);
              border-bottom: 1px solid var(--border-search); }
  .hdr[data-menu-open] .hdr__nav { display: flex; }
  /* Поле 12 сверху и снизу поднимает строку 21px до 45 — норма пальца 44. */
  .hdr__nav a { padding: 12px 0; font-size: 16px; line-height: 21px; }

  /* Обе кнопки — один круг 44: столько же требует палец, а форма у них
     общая, чтобы ряд читался парой, а не случайными значками. */
  .hdr__search { width: 44px; height: 44px; border-radius: 22px; }
  .hdr__burger { display: flex; align-items: center; justify-content: center;
                 flex-shrink: 0; margin-left: 12px; padding: 0;
                 width: 44px; height: 44px;
                 border: 1px solid var(--border-search); border-radius: 22px;
                 background: transparent; cursor: pointer; }
  /* Три линии рисуются одной полоской и двумя её псевдослоями: лишних
     элементов в разметке не заводим, картинки для этого тоже не нужно. */
  .hdr__burger span { position: relative; display: block; width: 18px; height: 2px;
                      background: #000; }
  .hdr__burger span::before,
  .hdr__burger span::after { content: ""; position: absolute; left: 0;
                             width: 18px; height: 2px; background: #000; }
  .hdr__burger span::before { top: -6px; }
  .hdr__burger span::after { top: 6px; }
  /* Открытая панель — крест: средняя линия гаснет, крайние сходятся в центр. */
  .hdr[data-menu-open] .hdr__burger span { background: transparent; }
  .hdr[data-menu-open] .hdr__burger span::before { top: 0; transform: rotate(45deg); }
  .hdr[data-menu-open] .hdr__burger span::after { top: 0; transform: rotate(-45deg); }
}

/* Логотип уходит с 303 на 200 на границе мобильного брейкпоинта. Ступень,
   а не формула: процент внутри ширины картинки считался бы от содержимого
   шапки, а оно само зависит от поля страницы. На 375 ряд после этого встаёт
   в 300 при доступных 339. Высота отдана пропорции: кадр 909×156 при 200
   даёт 34.3, и на 303 он же даёт прежние 52. */
@media (max-width: 639px) {
  .hdr__logo { width: 200px; height: auto; }
}

/* ============================================================
   ХЛЕБНЫЕ КРОШКИ — node 1141:16859 · left 120, top 81
   ============================================================ */
/* Ширина 1200 получается из полей 120 слева и справа, отдельным числом не задаётся.
   Отступ 12 сверху не может выпасть наружу: крошки идут вторыми после шапки. */
/* flex-wrap: wrap — крошки остаются строкой, а на узком экране переносятся
   вместо того, чтобы уехать за край. Решение стандарта: отдельной раскладки
   им не нужно. На 1440 переноситься нечему, вид прежний. */
.crumbs { position: relative; margin: 12px var(--gutter) 0;
          display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px;
          color: var(--text-secondary); }
.crumbs a { color: inherit; text-decoration: none; }
.crumbs span { color: inherit; }

/* ============================================================
   CTA-ФОРМА «Запросить коммерческое предложение»
   node 1141:17106 · высота 934 · фон #131720
   ============================================================ */
/* Высота секции формы каркасу НЕ принадлежит: на пяти страницах это 800, 878,
   912 и 934 — форма одна, а высота секции у каждой страницы своя. Числа 934 тут
   раньше стояли как «по умолчанию», и новая страница молча получала чужую
   высоту. Задавать высоту обязана страница. */
.cta { background: var(--dark); }
/* Позиция снята численно по эталону s08: графика повёрнута на −90°, поэтому
   left/top заданы до поворота, а не по видимому краю. Вертикаль — формула
   центра: пять постраничных top (93.05 / 26.05 / 65.05 / 82.05 / 65.05) она
   заменяет одна. Графика остаётся absolute: после поворота видимый бокс
   747.89×1354 вылезает за секцию сверху и снизу и за правый край холста,
   места в потоке ему взяться неоткуда. */
/* Графика сжимается вместе с холстом, пропорцию держит aspect-ratio, а доля
   вылета за правый край остаётся прежней: все три числа взяты долями от 1440,
   поэтому на 1440 получаются ровно прежние 541.95 / 1354 / 747.901.
   Вертикаль переехала с формулы центра на пару top: 50% + translateY(-50%):
   прежняя формула вычитала половину высоты числом, а высота теперь переменная.
   --bleed: 1 — метка «вылет за край сделан намеренно», её читает _build/узкие.py
   и не считает такой элемент поломкой. */
.cta__decor { --bleed: 1;
              position: absolute; left: calc(100% * 541.95 / 1440); top: 50%;
              width: calc(100% * 1354 / 1440); height: auto;
              aspect-ratio: 1354 / 747.901;
              transform: translateY(-50%) rotate(-90deg);
              mix-blend-mode: luminosity; pointer-events: none; }
/* Колонка формы в потоке. position: relative держит порядок отрисовки поверх
   графики с mix-blend-mode, координату он больше не задаёт.
   Отступ 80 сверху не выпадает наружу из-за overflow: hidden у .section —
   снимут его, колонка прыгнет с 80 на 0. */
/* Левое поле — общее поле страницы, ширина 667 получает потолок по контенту:
   на 1024 доступно 944, так что число 667 доживает до конца дистанции само. */
.cta__col { position: relative; margin: 80px 0 0 var(--gutter); width: 667px;
            max-width: calc(100% - 2 * var(--gutter)); color: var(--white); }
/* Тот же единый отступ заголовок → текст, что и в .sec__head. */
.cta__lead { margin-top: var(--gap-head); }

/* Поля — node 1141:17112. Сетка два на пять: 295 + 10 + 360 = 665, ряды
   70 / 70 / 106 / 47 с зазором 20. Высота 464 набирается сама, числом не задаётся. */
/* Треки стали долями, а ширина — потолком: 295 + 360 = 655 равно ширине формы
   без зазора, поэтому на 1440 каждый трек получает ровно своё прежнее число, а
   ниже оба сжимаются в одной пропорции. min(665px, 100%) — тот же приём, что
   у колонок: число живёт до тех пор, пока помещается. Проценты считаются от
   колонки формы, она уже сжата полем страницы. */
.cta__fields { display: grid;
               grid-template-columns: minmax(0, 295fr) minmax(0, 360fr);
               column-gap: 10px; row-gap: 20px;
               margin-top: 52px; width: min(665px, 100%); align-content: start; }
.cta__group { position: static; }
/* Подпись поля — только по классу: обёртка файловой строки тоже <label>,
   и правило по элементу перебивало её позицию и трекинг. */
/* min-height, а не height: подпись в две строки при жёсткой высоте наезжает
   на поле, а покоординатная проверка этого не увидит.
   width: fit-content — иначе кликабельная зона <label> растягивается на весь слот. */
.cta__label { display: block; width: fit-content; min-height: 26px;
              font-weight: 300; font-size: 12px; line-height: 1.2;
              letter-spacing: 1.5px; text-transform: uppercase;
              color: var(--on-dark-70); white-space: nowrap; }
/* display: block несущий: без него textarea остаётся inline-block, добавляет
   3px спуска и уводит низ формы. */
.cta__group input,
.cta__group textarea { display: block; width: 100%; height: 44px;
                       background: transparent; border: none;
                       border-bottom: 1px solid var(--on-dark-30);
                       font-family: var(--sans); color: var(--white); }
/* Плейсхолдер описания в макете сидит на 9px ниже верха поля */
.cta__group textarea { height: 80px; padding-top: 9px; resize: none; }
.cta__group input::placeholder,
.cta__group textarea::placeholder { color: var(--placeholder); }

.cta__g-name    { grid-area: 1 / 1; }
.cta__g-company { grid-area: 1 / 2; }
.cta__g-email   { grid-area: 2 / 1; }
.cta__g-phone   { grid-area: 2 / 2; }
.cta__g-task    { grid-area: 3 / 1 / auto / -1; }
.cta__g-file    { grid-area: 4 / 1 / auto / -1; }

/* Подписи заданы разметкой, а не нативным input: локаль браузера меняет
   «Choose File» на перевод и ломает сверку с эталоном. */
.cta__file-row { display: flex; align-items: center; gap: 10px;
                 width: fit-content; cursor: pointer; }
.cta__file-row input[type="file"] { display: none; }
.cta__file-btn { border: 1px solid var(--white); border-radius: 4px; padding: 2px 8px;
                 font-weight: 400; font-size: 14px; line-height: 15px; color: var(--white); }
.cta__file-name { font-weight: 400; font-size: 14px; line-height: 15px;
                  color: var(--on-dark-70); }

.cta__submit { grid-area: 5 / 1 / auto / -1; justify-self: start; margin-top: 43px;
               background: var(--red); color: var(--white); border: none; border-radius: 999px;
               padding: 14px 32px; font-family: var(--sans); cursor: pointer;
               transition: background 0.2s ease; }
.cta__submit:hover { background: var(--red-hover); }

/* ============================================================
   ФОРМА НИЖЕ 768 — поля в столбик
   На 768 пара полей стоит рядом: два трека делят 688 доступных и дают
   по 295 и 360 в той же пропорции, что на холсте. Ниже 768 пара уже
   не читается, поля идут столбиком.
   Координаты полей снимаются все разом. Иначе grid-area: 1 / 2 у
   компании создаст второй столбец сам, и одна колонка не получится:
   раскладка задана номерами, а не порядком разметки. С auto порядок
   берётся из разметки, а он уже верный — имя, компания, почта,
   телефон, задача, файл, кнопка.
   ============================================================ */
@media (max-width: 767px) {
  .cta__fields { grid-template-columns: minmax(0, 1fr); }
  .cta__g-name,
  .cta__g-company,
  .cta__g-email,
  .cta__g-phone,
  .cta__g-task,
  .cta__g-file,
  .cta__submit { grid-area: auto; }
}

/* Графика формы уходит ниже 640: на 768 она ещё читается краем кадра,
   на 375 от неё остаётся полоса поперёк текста. Так решено стандартом. */
@media (max-width: 639px) {
  .cta__decor { display: none; }
}

/* ============================================================
   ФУТЕР — node 1141:17143 · высота 402 · фон #131720
   ============================================================ */
/* Раскладка подвала — сетка, а не координаты. Поля слева и справа сделаны
   крайними треками по 120, а не padding-ом: .ftr несёт класс .section, то есть
   position: relative, и padding сдвинул бы точку отсчёта всем абсолютным
   потомкам — ряд соцсетей уехал бы на 120 вправо и на 60 вниз.
   Первый ряд 60px — верхнее поле той же природы.
   Треки колонок не равны между собой (388.36 / 286.55 / 286.54): числа сняты
   с макета, repeat(3, 1fr) уводит вторую колонку на 16px, третью на 32px.
   Числа стоят долями fr, а не пикселями: их сумма 1200 равна ширине контента
   на холсте 1440, поэтому на 1440 каждый трек получает ровно своё прежнее
   число, а на 1024 все четыре сжимаются в одной пропорции. minmax(0, …)
   обязателен: без него трек не умеет стать уже своего содержимого и подвал
   снова вылезет за край. */
.ftr { min-height: 402px; padding-bottom: 32.5px; background: var(--dark);
       display: grid; align-content: start;
       grid-template-columns:
         var(--gutter) minmax(0, 388.36fr) minmax(0, 286.55fr)
         minmax(0, 286.54fr) minmax(0, 238.55fr) var(--gutter);
       grid-template-rows: 60px 36px 168px auto auto; }
.ftr__logo { grid-column: 2; grid-row: 2; width: 211px; height: 36px; }
/* Колонка под логотипом. Была абзацем-описанием холдинга, 18 августа 2026
   (правка 0.3 ревью клиента) заменена на контакты: две почты, телефон и
   юридический адрес. Место, отступ и начертание оставлены прежними — колонка
   держит первый трек подвала и ряд ссылок справа от неё не двигается.
   Ширина поднята с 241 до 260: строка «marketing@mgcgroup.ru» на Light 14
   занимает 244 и в прежние 241 не помещалась, ломаясь пополам. */
.ftr__desc { grid-column: 2; grid-row: 3; align-self: start; margin-top: 46px; width: 260px;
             font-weight: 300; font-size: 14px; line-height: 23.8px;
             color: var(--on-dark-60); }
/* Почты и телефон кликабельные. Блочные, чтобы шли столбиком, и width по
   содержимому — иначе кликабельная зона растянулась бы на всю колонку. */
.ftr__contact { display: block; width: max-content; max-width: 100%;
                color: var(--on-dark-85); text-decoration: none; }
.ftr__contact:hover { color: var(--white); }
/* Адрес идёт тремя строками. Строки — блочные span, а не <br>: каркас гасит
   все <br> ниже холста 1440 (см. конец файла), и адрес слипался бы в одну
   строку на всём адаптиве. */
.ftr__addr { margin-top: 18px; color: var(--on-dark-60); }
.ftr__addr span { display: block; }
/* Ряд колонок фиксирован числом 168, а не auto: иначе шестая строка описания
   начинает двигать линию и всю нижнюю строку подвала. */
.ftr__col { grid-row: 2 / span 2; align-self: start; justify-self: start; margin-top: 39px; }
.ftr__col--1 { grid-column: 3; }
.ftr__col--2 { grid-column: 4; }
.ftr__col--3 { grid-column: 5; }
/* line-height остаётся здесь: в токене .t-caption-14-caps его нет, а без него
   заголовок колонки становится выше и глиф уезжает вниз на 2px. */
.ftr__col h4 { line-height: 1; color: var(--on-dark-50); }
/* width: max-content обязателен: без него блочная ссылка растягивается на весь
   трек, треки идут встык и три колонки склеиваются в одну кликабельную полосу. */
.ftr__col a { display: block; width: max-content; margin-top: 15px;
              font-weight: 300; font-size: 14px; line-height: 21px;
              color: var(--on-dark-85); text-decoration: none; white-space: nowrap; }
.ftr__col a:nth-of-type(1) { margin-top: 22px; }
.ftr__line { grid-column: 2 / 6; grid-row: 4; margin-top: 61px;
             height: 1px; background: var(--on-dark-10); }
/* Начертание нижней строки футера — токеном .t-caption-13 в разметке. */
.ftr__copy { grid-column: 2 / 4; grid-row: 5; justify-self: start; margin-top: 24px;
             color: var(--on-dark-50); }
/* Ряд соцсетей сознательно остаётся на координатах. Флекс с одним gap его не
   воспроизводит: зазоры в макете 17.86 / 20.41 / 20.81, а наш шрифт шире
   макетного («VK» на 2.14px), и разница расползается по всему ряду.
   Поэтому при сужении ряд едет целиком, а не пересобирается: он вынут из
   сетки в свою коробку шириной 215 (от 1105 до правого поля 1320 на холсте
   1440), коробка прижата к правому полю, а координаты ссылок внутри стали
   отсчитываться от её левого края. На 1440 буквы стоят там же, где стояли:
   1105 / 1139 / 1210 / 1279. */
.ftr__soc { position: absolute; top: 350px; right: var(--gutter); width: 215px; }
.ftr__soc a { position: absolute; top: 0;
              color: var(--on-dark-50); text-decoration: none; }
.ftr__soc a:nth-of-type(1) { left: 0; }
.ftr__soc a:nth-of-type(2) { left: 34px; }
.ftr__soc a:nth-of-type(3) { left: 105px; }
.ftr__soc a:nth-of-type(4) { left: 174px; }

/* ============================================================
   ПОДВАЛ НИЖЕ 1024
   На холсте подвал идёт одним рядом: описание, три колонки ссылок и
   соцсети справа. На 768 ряд не держится. Логотип с описанием уходят
   наверх, три колонки ссылок встают под ними тремя равными долями —
   решение Сергея от 12 августа. Доля получает около 230, столько же
   занимает самый широкий заголовок колонки, поэтому ссылки остаются
   в одну строку. На 375 ряд рассыпается и колонки идут друг под другом.
   Ряд соцсетей выходит из абсолютных координат в поток: его коробка
   держалась правым полем страницы, а на узком ей держаться не за что.
   Зазоры между буквами в макете разные (17.86 / 20.41 / 20.81), здесь
   берётся один — 20. Разница видна только на холсте, а там координаты
   и остались.
   Жёсткие ряды 60 / 36 / 168 снимаются: они держали высоту 402, а на
   узком высота набирается содержимым.
   ============================================================ */
@media (max-width: 1023px) {
  .ftr { min-height: 0; padding-bottom: 40px;
         grid-template-columns: var(--gutter) repeat(3, minmax(0, 1fr)) var(--gutter);
         grid-template-rows: repeat(6, auto); }
  .ftr__logo { grid-column: 2 / 5; grid-row: 1; margin-top: 60px; }
  .ftr__desc { grid-column: 2 / 5; grid-row: 2; margin-top: 24px;
               width: min(260px, 100%); }
  .ftr__col { grid-row: 3; margin-top: 40px; }
  .ftr__col--1 { grid-column: 2; }
  .ftr__col--2 { grid-column: 3; }
  .ftr__col--3 { grid-column: 4; }
  .ftr__line { grid-column: 2 / 5; grid-row: 4; margin-top: 40px; }
  .ftr__copy { grid-column: 2 / 5; grid-row: 5; margin-top: 24px; }
  .ftr__soc { position: static; grid-column: 2 / 5; grid-row: 6;
              width: auto; margin-top: 16px; display: flex; gap: 20px; }
  .ftr__soc a { position: static; }
}

@media (max-width: 639px) {
  .ftr { grid-template-columns: var(--gutter) minmax(0, 1fr) var(--gutter);
         grid-template-rows: repeat(8, auto); }
  .ftr__logo,
  .ftr__desc,
  .ftr__col,
  .ftr__line,
  .ftr__copy,
  .ftr__soc { grid-column: 2; }
  .ftr__col--1 { grid-row: 3; }
  .ftr__col--2 { grid-row: 4; margin-top: 24px; }
  .ftr__col--3 { grid-row: 5; margin-top: 24px; }
  .ftr__line { grid-row: 6; }
  .ftr__copy { grid-row: 7; }
  .ftr__soc { grid-row: 8; }
}

/* ============================================================
   Кнопки — общий слой (используются и на контентных секциях)
   ============================================================ */
.btn { display: inline-flex; align-items: center; justify-content: center;
       border: 0; border-radius: 999px; font-family: var(--sans); white-space: nowrap;
       text-decoration: none; cursor: pointer; }
/* Ниже 768 кнопке разрешён перенос. Уменьшённого до 16px кегля не хватает:
   «Скачать презентацию процесса разработки» занимает 416 при доступных 335,
   а строка запрещена к переносу с холста, где места было вдоволь.
   Текст встаёт по центру — иначе вторая строка липнет к левому краю. */
@media (max-width: 767px) {
  .btn { white-space: normal; text-align: center; }
}
/* Обводка в Figma рисуется ВНУТРЬ бокса и в его размер не добавляется. Через
   border кнопка выходит 50px вместо 48 по макету, поэтому обводка — outline
   с offset −1px: она не участвует в раскладке. Проверено на s01 «Истории»:
   с border высота 50, с outline — ровно 48, как в эталоне. */
.btn--red { background: var(--red); color: var(--hero-bg);
            outline: 1px solid var(--red); outline-offset: -1px;
            padding: 14px 28px;
            transition: background 0.2s ease, outline-color 0.2s ease; }
.btn--red:hover { background: var(--red-hover); outline-color: var(--red-hover); }
.btn--outline { background: transparent; color: #000;
                outline: 1px solid #000; outline-offset: -1px;
                padding: 14px 28px; }
/* Белая обводка — для кнопки на тёмной секции. Была свёрстана на странице
   «Устойчивое развитие» и в каркас не возвращалась; поднята сюда как есть. */
.btn--outline-white { background: transparent; color: var(--white);
                      outline: 1px solid var(--white); outline-offset: -1px;
                      padding: 14px 28px; }
/* Сведена к общему способу обводки 7 августа 2026. Была на border с padding 13
   (border добавлял по пикселю с каждой стороны и держал высоту 48). С outline
   высота та же при padding 14, а ширина честнее на 2px: проверено на s03
   «Разработки продуктов» — сверка с эталоном 0.26/0.30% → 0.14/0.20%. */
.btn--outline-red { background: transparent; color: var(--red);
                    outline: 1px solid var(--red); outline-offset: -1px;
                    padding: 14px 32px; }

/* ============================================================
   ЗАГОЛОВОК СЕКЦИИ БЕЗ ЛИДА
   Одиночный заголовок контентной секции. Координат у него больше
   нет: место задаёт страница отступом или треком сетки, там же
   остаются ширина и цвет — они у каждой секции свои.
   position: relative нужен не для координат, а для порядка
   отрисовки. Все три секции с этим заголовком лежат на фотографии,
   а фотография стоит в разметке выше и на absolute: без relative
   заголовок ушёл бы под неё и пропал совсем.
   Заголовок, под которым идёт текст, берёт не это правило,
   а обёртку .sec__head ниже.
   ============================================================ */
.sec__h2 { position: relative; }

/* ============================================================
   СВЯЗКА «ЗАГОЛОВОК + ЛИД»
   Заголовок и текст под ним живут одним потоком внутри обёртки.
   Координату на странице держит обёртка (top и width задаёт
   страница), лид идёт следом на постоянном отступе. Заголовок
   стал длиннее или короче — лид едет за ним сам, координату
   руками не правим.
   Приём в проекте не новый: так уже собраны колонка формы
   (.cta__col) и «шапки» секций на «Устойчивом развитии»
   (.sNN__head). Здесь он поднят в общий слой.
   Отступ между заголовком и текстом на сайте один — 32px. Он не
   зависит ни от размера заголовка, ни от длины текста, ни от того,
   первый это экран или контентная секция. Решение Сергея от
   10 августа 2026: в макете отступ гулял (24, 32 и дыры до 156px,
   оставшиеся от замен текста), здесь он сведён к одному числу.
   Отдельных значений на страницах быть не должно.
   Координат у обёртки нет: она стоит в потоке колонки или в треке
   сетки секции. Место задаёт страница.
   ============================================================ */
.hero__head { color: #000; }
.sec__head > p,
.hero__head > p { margin-top: var(--gap-head); }

/* ============================================================
   ЛЕВАЯ КОЛОНКА СЕКЦИИ
   Блоки колонки идут друг за другом потоком и держатся друг за
   друга отступами. Координаты у блоков больше нет: текст выше
   стал длиннее или короче — всё, что ниже, едет за ним само.
   Ради этого расшивка и делается: при адаптиве блоки встанут
   друг за другом без второго комплекта правил.
   Координату самой колонки (top и width) задаёт страница.
   Отступ между блоками — тоже страница: он у каждой секции свой
   и снят с макета, общего числа тут нет.
   ============================================================ */
/* Колонка сама тоже в потоке. position: relative остаётся ради порядка
   отрисовки: без него фото секции кросслинка накрывает заголовок.
   Ширина 1200 обязательна: в потоке колонка без ширины растянулась бы
   на всю канву 1440. Страница сужает её своим числом там, где нужно.
   Левое поле — общее поле страницы. Потолок ширины нужен из-за страниц:
   они задают колонке свои числа (1035 на первом экране «Разработки
   продуктов», 924 на таблице, 860 на слайдере «Истории»), и без потолка
   эти числа переживают сужение окна и вылезают за край. На 1440 потолок
   равен прежним 1200 и ничего не режет. */
.sec__col { position: relative; width: var(--container);
            max-width: calc(100% - 2 * var(--gutter)); margin-left: var(--gutter); }

/* ============================================================
   КРУГЛАЯ СТРЕЛКА
   Красный круг 36×36 со стрелкой. Стоит на всех пяти страницах:
   в карточках кросслинка и в карточке вакансии.
   border-radius сведён к 18px: на боксе 36×36 и 18px, и 999px дают
   один и тот же круг, поэтому запись выровнена по большинству (3 из 5).
   Способ постановки (absolute с координатами или margin-top в потоке)
   остаётся на странице — он зависит от устройства карточки.
   ============================================================ */
/* flex: none — круг стоит внутри колоночного флекса карточки. Без запрета
   на сжатие он в тесной карточке съезжает в овал: высота 36 отдаётся под
   текст, ширина остаётся. Видно на 768 в «Проведении испытаний». */
.arrow-btn { width: 36px; height: 36px; flex: none; border-radius: 18px; background: var(--red); color: var(--white); display: flex; align-items: center; justify-content: center; font-family: var(--arrow); font-weight: 700; font-size: 14px; }

/* ============================================================
   КРОССЛИНК: ФОНОВОЕ ИЗОБРАЖЕНИЕ
   Подложка секции кросслинка. Кадр шире канвы и поднят вверх —
   числа сняты с макета, на четырёх страницах они совпадают полностью.
   Размер держится числом и при сужении окна не пересчитывается: фотография
   сохраняет масштаб, а лишнее срезает край секции. Привязка левым краем
   выбрана сознательно — видимая часть кадра остаётся той же, что на 1440,
   и уходит под обрез только правая, которой на холсте и так не было.
   --bleed: 1 — метка намеренного вылета для _build/узкие.py.
   ============================================================ */
.crosslink__bg { --bleed: 1;
                 position: absolute; left: -3px; top: -128px;
                 width: 2262px; height: 1056px; object-fit: cover; }
/* Ниже 1024 кадр держится центром, а не левым краем. На холсте привязка
   левым краем оставляла видимой ту же часть снимка, что и в макете, но на
   375 от кадра шириной 2262 в окно попадает первая шестая часть — край
   фотографии, где сюжета нет. Центр возвращает в окно середину кадра.
   Размер по-прежнему держится числом, лишнее срезает секция. */
@media (max-width: 1023px) {
  .crosslink__bg { left: 50%; transform: translateX(-50%); }
}

/* ============================================================
   КРОССЛИНК: КАРТОЧКА
   Стеклянная карточка перехода на смежный раздел.
   Раскладка внутри карточки остаётся на странице: где-то это три
   абсолютные карточки с фиксированной высотой, где-то — флекс-ряд.
   ============================================================ */
/* Ширину карточки задаёт трек ряда, а не она сама. Порядок правок жёсткий:
   width: auto без сетки в ряду ломает раскладку — во flex карточка берёт
   ширину по тексту и три штуки встают на 596 / 217 / 344 вместо 386.
   backdrop-filter держит систему координат для стрелки внутри карточки:
   снимать размытие можно только после того, как стрелка уйдёт в поток. */
.crosslink__card { width: auto; padding: 24px; border-radius: 10px;
                   display: flex; flex-direction: column;
                   background: var(--glass); backdrop-filter: blur(12px); color: var(--white); }

/* ============================================================
   ФЛИП-КАРТОЧКА (flip.*)
   Переворот по наведению на десктопе, по тапу на тач-устройствах.
   Разметка: [data-flip] на сетке, [data-flip-card] на каждой карточке.
   Логика — _shared/flip.js.
   ============================================================ */
.flip { position: relative; height: 250px; perspective: 1200px; z-index: 1; isolation: isolate;
        display: block; text-decoration: none; color: inherit; cursor: pointer; }
.flip.is-flipped { z-index: 5; }
.flip__in { position: absolute; inset: 0; transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1);
            transform-style: preserve-3d; will-change: transform; }
.flip.is-flipped .flip__in { transform: rotateY(180deg); }
.flip__f { position: absolute; inset: 0; backface-visibility: hidden; -webkit-backface-visibility: hidden;
           border: 1px solid var(--card-border); border-radius: 10px; background: var(--white);
           padding: 24px; display: flex; flex-direction: column; overflow: hidden; }
.flip__city { color: var(--red); }
.flip__list { margin-top: 12px; font-weight: 300; font-size: 14px; line-height: 1.5; color: #6f6f6f; }
.flip__hint { margin-top: auto; font-weight: 700; font-size: 12px; text-transform: uppercase;
              letter-spacing: 0.08em; color: #bdbdbd; }
.flip__hint::after { content: 'наведите'; }
@media (hover: none) {
  .flip__hint { display: none; }
}
.flip__b { transform: rotateY(180deg); padding: 0; align-items: center; justify-content: center;
           background: #f0f0ee; }
.flip__b img { width: 100%; height: 100%; object-fit: cover; }
.flip__logo { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;
              background: #f6f6f4; }
/* Правка 7.1 (ревью 18 августа 2026): логотип на обороте карточки завода был
   растянут — в плашке читалась одна буква.
   Ширину правило задавало (64%), а высоту и способ вписывания — нет, и они
   доставались от .flip__b img выше по файлу: height: 100% плюс object-fit:
   cover. Логотип 628×92 растягивался на всю высоту карточки и обрезался по
   бокам. Высота отдана пропорции, вписывание — contain. */
.flip__logo img { width: 64%; height: auto; object-fit: contain; opacity: 0.85; }
.flip__cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 12px 16px;
             background: linear-gradient(180deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.72));
             color: var(--white); font-weight: 700; font-size: 14px; }

/* ============================================================
   ЖЁСТКИЕ ПЕРЕНОСЫ СТРОК
   В разметке пяти страниц стоит 79 тегов <br>. Все они сняты с
   холста 1440: дизайнер ломал строку руками, и вёрстка повторила
   разбивку буква в букву. Ниже холста колонки уже, текст ломается
   ещё и сам — переносы складываются, и абзац рассыпается в лесенку.
   Видно на «Инженерном подходе» и в «Устойчивом социальном
   развитии», где часть подзаголовков идёт в строку, а часть с
   переносом при одинаковой длине.
   Ниже 1440 переносы гасятся, текст течёт по ширине колонки.
   display: none убирает <br> из дерева боксов целиком — строка
   в этом месте не ломается. На самом холсте разбивка остаётся
   ровно та, что принята.
   Правка Сергея от 14 августа 2026.
   ============================================================ */
/* Правка 8.3 и 0.3 (ревью 18 августа 2026): перенос гасится пробелом, а не
   удалением.
   display: none убирал <br> из дерева боксов целиком — вместе с переносом
   пропадал и промежуток между словами. В разметке переносы стоят вплотную
   («одним<br>кузовом», «Юридический адрес:<br>107045»), поэтому ниже холста
   слова склеивались: «с однимкузовом», «адрес:107045». Видно было на
   «Структурах кузова», «Дистрибуции» и в подвале всех страниц.
   content: " " оставляет элемент в потоке, но подменяет его содержимое
   пробелом: перенос не срабатывает, промежуток остаётся. */
@media (max-width: 1439px) {
  .stage br { content: " "; }
}

/* Интеграционный слой шаблона Битрикс. Общая шапка и подвал вынесены из
   статичных страниц, поэтому главная кладёт шапку поверх hero. */
.stage { position: relative; }
.site-main { display: block; min-height: 1px; }
.site-header { width: 100%; }
.page-main .site-header,
.has-overlay-header .site-header { position: absolute; inset: 0 0 auto; z-index: 20; }
.has-overlay-header .site-main > .hero:first-child { padding-top: 69px; }
.hdr__search { text-decoration: none; }
.hdr__nav a[aria-current="page"] { text-decoration: underline; text-underline-offset: 4px; }
.cta__status { grid-column: 1 / -1; margin: 16px 0 0; color: var(--white); }
/* `hidden` создаёт scroll-контейнер и ломает sticky-сцену этапов на главной.
   `clip` так же обрезает горизонтальный выход, но сохраняет прокрутку окна. */
html, body { overflow-x: clip; }

/* End */


/* Start:/local/templates/mgc/home.css?178726482430623*/
/* ============================================================
   MGC GROUP — главная_2026-08-16
   Геометрия страницы. Общий слой — _shared/theme.css
   ============================================================ */

/* --- s01 hero --- */
.page-main .s01 { min-height: 800px; padding-top: 69px; padding-bottom: 80px; background: var(--hero-bg); overflow: visible; }
/* Правка 5.1 (ревью 18 августа 2026): кадр первого экрана сдвинут вправо —
   бампер автомобиля наезжал на строку лида.
   object-position тут бессилен: кадр 2880×1600 и бокс 1440×800 — одна и та же
   пропорция 1.8, при cover запаса на сдвиг нет вовсе.
   Первая версия правки сдвигала сам бокс (left: 120), и слева обнажалась
   полоса фона в 120px — переделано 18 августа по второму кругу ревью.
   Теперь бокс остаётся прижатым к левому краю, а шире окна становится он сам:
   лишнее уходит за правый край под обрезку секции. Кадр при этом доходит до
   левого края, а сюжет съезжает вправо.
   Пятый круг ревью: 120px вылета оказались перебором — правый край машины
   уходил за границу экрана. Вылет уменьшен вдвое, до 60px. */
/* Обёртка занимает всю секцию и режет по её краю. Обрезку нельзя повесить на
   саму секцию: под шапкой раскрывается панель меню, она уходит вниз за границу. */
.page-main .s01__bgwrap { position: absolute; inset: 0; overflow: hidden; z-index: 0; }
.page-main .s01__bg { --bleed: 1;
              position: absolute; left: 0; top: 0; width: calc(100% + 60px); height: 100%;
              object-fit: cover; object-position: center; }
.page-main .s01 > .hdr { position: relative; z-index: 2; }
.page-main .s01 > .sec__col { position: relative; z-index: 1; margin-top: 108px; }
.page-main .s01 .hero__h1 { max-width: 640px; line-height: 1.04; }
.page-main .s01 .hero__h1-line { display: block; }
.page-main .s01 .hero__lead { margin-top: 28px; width: min(520px, 100%); color: var(--subtitle); }
.page-main .s01 .hero__cta { margin-top: 40px;
              display: flex; flex-direction: column; align-items: flex-start; gap: 16px; }

/* --- s02 tiles.4 — полоса цифр --- */
.page-main .s02 { min-height: 250px; padding: 0; background: var(--red); color: var(--white); }
.page-main .s02::before { content: ""; position: absolute; top: 0; bottom: 0; left: 50%;
              transform: translateX(-50%); width: 100vw; background: var(--red); z-index: -1; }
.page-main .s02__row { margin: 0 var(--gutter); min-height: 250px;
              display: flex; align-items: center; justify-content: space-between; gap: 20px; }
/* Правка (пятый круг ревью): цифры выровнены по левому краю — по той же
   вертикали, на которой стоит текст соседних блоков (поле страницы).
   На холсте каждая цифра центрировалась внутри своей доли ряда, и левые
   края четырёх показателей не совпадали ни между собой, ни с заголовками
   выше и ниже — ряд читался как поставленный на глаз.
   Теперь и цифра, и подпись начинаются от левого края своей колонки, а
   первая колонка стоит на поле страницы. */
.page-main .s02__item { text-align: left; flex: 1; min-width: 0; }
.page-main .s02__cap { margin: 16px 0 0; max-width: 155px; line-height: 1.25; }

/* --- s03 cards.7 — 10 направлений --- */
.page-main .s03 { min-height: 0; padding-bottom: 90px; background: var(--grey-bg); }
.page-main .s03 > .sec__col { margin-top: 80px; }
.page-main .s03__grid { margin-top: 48px; display: grid;
              grid-template-columns: repeat(4, minmax(0, 1fr));
              gap: 1px; background: #e9e9e9;
              outline: 1px solid #e9e9e9; outline-offset: -1px; }
.page-main .s03__card { position: relative; background: var(--white); padding: 24px;
              min-height: 300px; overflow: hidden;
              display: flex; flex-direction: column; color: inherit; text-decoration: none; }
.page-main .s03__card h3 { line-height: 1.15; text-transform: uppercase; color: var(--text); }
.page-main .s03__card p { margin-top: 10px; color: var(--card-caption); max-width: 250px; line-height: 1.32; }
.page-main .s03__card img { margin-top: auto; width: calc(100% + 8px); margin-left: -4px;
              height: 136px; object-fit: contain; object-position: center bottom; }
.page-main .s03__card--cta { justify-content: space-between; }
.page-main .s03__card--cta p { margin-top: 0; color: var(--text); max-width: none; font-size: 16px; }
.page-main .s03__card--cta .btn { align-self: flex-start; margin-top: 20px; }
.page-main .s03__card--empty { min-height: 0; padding: 0; background: transparent; }

/* --- s04 stages.8 — sticky кросс-фейд --- */
.page-main .s04.stages { overflow: visible; padding: 0; min-height: 0;
              height: calc(690px * 8); background: var(--white); }
.page-main .s04__pin { position: sticky; top: 0; height: 100vh; min-height: 690px; overflow: hidden; }
.page-main .s04__slide { position: absolute; left: 50%; top: 50%;
              transform: translate(-50%, -50%); width: min(1440px, 100%);
              height: 690px; background: var(--white); opacity: 0;
              transition: opacity .5s ease; pointer-events: none; }
.page-main .s04__slide.is-on { opacity: 1; pointer-events: auto; }
.page-main .s04__text { position: absolute; left: var(--gutter); top: 80px; width: min(450px, 42%); }
.page-main .s04__num { text-transform: uppercase; letter-spacing: .09em; opacity: .5; }
.page-main .s04__h2 { margin-top: 50px; line-height: 1.04; }
.page-main .s04__h2 .accent { color: var(--red); }
.page-main .s04__desc { margin-top: 28px; max-width: 390px; color: var(--subtitle); line-height: 1.5; }
.page-main .s04__links { margin-top: 26px; display: flex; flex-wrap: wrap; gap: 14px; }
.page-main .s04__link { display: inline-flex; align-items: center;
              padding: 13px 28px; border-radius: 999px;
              border: 1.5px solid rgba(20, 20, 20, .4); color: rgba(20, 20, 20, .6);
              font-size: 16px; font-weight: 700; text-decoration: none;
              transition: background .2s ease, color .2s ease, border-color .2s ease; }
.page-main .s04__link:hover { background: #1a1a1a; color: var(--white); border-color: #1a1a1a; }
.page-main .s04__img { position: absolute; right: var(--gutter); top: 50%;
              transform: translateY(-50%); width: min(800px, 52%); max-height: 580px;
              object-fit: contain; object-position: center; }
.page-main .s04__dots { position: absolute; left: var(--gutter); bottom: 40px;
              display: flex; gap: 8px; z-index: 5; }
.page-main .s04__dot { width: 26px; height: 3px; border-radius: 2px; background: var(--dot-idle); }
.page-main .s04__dot.is-on { background: var(--red); }

/* --- s05 innov --- */
.page-main .s05 { min-height: 859px; padding-bottom: 80px; color: var(--white); overflow: visible; }
.page-main .s05__bg { --bleed: 1;
              position: absolute; left: 50%; top: 0; transform: translateX(-50%);
              width: 100vw; height: 100%;
              object-fit: cover; object-position: 0% 42%; z-index: 0; }
.page-main .s05__scrim { --bleed: 1; position: absolute; left: 50%; top: 0; transform: translateX(-50%);
              width: 100vw; height: 100%; z-index: 0;
              background: linear-gradient(90deg, rgba(0,0,0,.6), rgba(0,0,0,.25) 60%, rgba(0,0,0,.55)); }
.page-main .s05__mask { --bleed: 1; position: absolute; right: calc((100% - 100vw) / 2); bottom: 0;
              width: min(48vw, 760px); height: 460px; z-index: 0; pointer-events: none;
              background: radial-gradient(135% 135% at 100% 100%, rgba(11,11,13,1) 48%, rgba(11,11,13,0) 82%); }
.page-main .s05 > .sec__col { position: relative; z-index: 1; margin-top: 0; padding-top: 80px; }
.page-main .s05__lead { margin-top: var(--gap-head); width: min(560px, 100%); line-height: 1.4; }
/* Правки 5.2 и 5.3 (ревью 18 августа 2026): плашки и кнопка стояли в верхней
   трети блока, а нижняя треть секции (859px) оставалась пустой. Оба отступа
   увеличены — ряд плашек и кнопка опускаются, содержимое расходится по
   высоте секции. Высота секции не менялась: свободное место в ней уже было. */
.page-main .s05__cols { margin-top: 150px; display: flex; flex-wrap: wrap; gap: 18px; }
.page-main .s05__col { width: min(388px, 100%); padding: 26px 24px;
              background: rgba(164, 154, 154, .055);
              backdrop-filter: blur(26px); -webkit-backdrop-filter: blur(26px);
              border-radius: 10px; }
.page-main .s05__col p { margin-top: 14px; line-height: 1.4; opacity: .9; }
.page-main .s05__more { display: inline-flex; margin-top: 72px;
              padding: 15px 32px; border-radius: 999px;
              border: 1.5px solid rgba(255,255,255,.85); color: var(--white);
              font-weight: 700; text-decoration: none;
              transition: background .2s ease, color .2s ease; }
.page-main .s05__more:hover { background: var(--white); color: #111; }

/* --- s06 esg --- */
/* Обрезка вернулась вместе с правкой 5.7: графика с «Устойчивого развития»
   шире холста в полтора раза и поднята над секцией — при overflow: visible
   она вылезала за правый край окна и давала горизонтальную прокрутку на
   753px. На эталонной странице этот же вектор обрезается секцией; здесь
   обрезка была снята ради стеклянной маски, а маски больше нет. */
.page-main .s06 { min-height: 800px; padding-bottom: 80px; color: var(--white); overflow: hidden; }
/* Правка 5.7 (ревью 18 августа 2026): кадр блока заменён на снимок со
   страницы «Устойчивое развитие» (блок «Экологическая повестка») вместе с
   наложенной поверх полупрозрачной графикой. Точка кадрирования взята оттуда
   же (50% / 37.54%) — иначе на широком экране в кадр попадает только небо. */
.page-main .s06__bg { --bleed: 1;
              position: absolute; left: 50%; top: 0; transform: translateX(-50%);
              width: 100vw; height: 100%;
              object-fit: cover; object-position: 50% 37.54%; z-index: 0; }
.page-main .s06__scrim { --bleed: 1; position: absolute; left: 50%; top: 0; transform: translateX(-50%);
              width: 100vw; height: 320px; z-index: 0;
              background: linear-gradient(180deg, rgba(24,26,30,.26), rgba(24,26,30,0)); }
/* Графика поверх кадра — та же, что на «Устойчивом развитии»: широкий
   вектор 2383.83 при холсте 1440, поднятый над секцией. Все три числа —
   доли от 1440, поэтому на холсте геометрия совпадает с эталонной страницей,
   а на другой ширине графика едет вместе с ней.
   Стеклянная маска прежнего паттерна (.s06__glass) снята: она была прорезана
   по старому знаку и с новой графикой давала второй, спорящий с ней рисунок.
   Блок в разметке тоже убран. */
/* Правка 3.4 (второй круг ревью): графика не доходила до низа блока —
   у неё кончались фигуры примерно на трёх четвертях высоты. Масштаб поднят
   с 2383.83 до 3200 при холсте 1440, подъём над секцией пересчитан в той же
   пропорции (656 → 880): рисунок идёт во всю высоту, наклон полос прежний. */
.page-main .s06__pat { --bleed: 1;
              position: absolute; left: calc(100% * -420 / 1440); top: 0;
              margin-top: calc(-100% * 880 / 1440);
              width: calc(100% * 3200 / 1440); height: auto;
              aspect-ratio: 2383.83 / 2010.73;
              z-index: 0; pointer-events: none; }
/* Вуаль эталонного блока: лёгкое затемнение поверху, чтобы надзаголовок и
   заголовок не садились прямо на облака. */
.page-main .s06__veil { position: absolute; left: 0; top: 0; width: 100%; height: 488px;
              z-index: 0; pointer-events: none;
              background: linear-gradient(to top,
                rgba(43, 42, 42, 0) 0%, rgba(43, 42, 42, 0.3) 100%); }
.page-main .s06 > .sec__col { position: relative; z-index: 1; margin-top: 0; padding-top: 80px; }
.page-main .s06__ey { text-transform: uppercase; letter-spacing: .09em;
              text-shadow: 0 1px 18px rgba(0,0,0,.28); }
.page-main .s06__h2 { margin-top: 18px; max-width: 1010px; line-height: 1;
              text-shadow: 0 1px 18px rgba(0,0,0,.28); }
.page-main .s06__lead { margin-top: 48px; width: min(620px, 100%); line-height: 1.4;
              text-shadow: 0 1px 18px rgba(0,0,0,.28); }
.page-main .s06__cols { margin-top: 48px; display: flex; flex-wrap: wrap; gap: 18px; }
.page-main .s06__col { width: min(388px, 100%); }
.page-main .s06__col p { margin-top: 14px; line-height: 1.4; opacity: .92; }
.page-main .s06__more { display: inline-flex; margin-top: 48px;
              padding: 15px 32px; border-radius: 999px;
              border: 1.5px solid rgba(255,255,255,.85); color: var(--white);
              font-weight: 700; text-decoration: none;
              transition: background .2s ease, color .2s ease; }
.page-main .s06__more:hover { background: var(--white); color: #111; }

/* --- s07 media --- */
.page-main .s07 { min-height: 0; padding-bottom: 90px; background: #c9dadf; }
.page-main .s07 > .sec__col { margin-top: 80px; }
.page-main .s07__head { display: flex; align-items: baseline; justify-content: space-between;
              gap: 20px; flex-wrap: wrap; }
/* Правка 3.5 (второй круг ревью): надзаголовок «Медиацентр» стоял вплотную
   к заголовку — отступа между ними не было вовсе. Взято то же число, что в
   соседних блоках с такой же парой: 18px в «Устойчивом развитии» (.s06__h2)
   и в «Карьере» (.s08__h2). */
.page-main .s07__head h2 { margin-top: 18px; }
.page-main .s07__all { color: var(--red); text-decoration: underline; text-underline-offset: 4px; }
.page-main .s07__brand { white-space: nowrap; }
/* ------------------------------------------------------------
   Правка 7 (второй круг ревью): плитки медиацентра переведены
   из вертикальных в горизонтальные — тот же шаблон, что на
   «Новостях» и «Мероприятиях»: кадр полосой сверху, тело с
   текстом под ним, высота набирается содержимым вместо 598.
   Ряд из трёх карточек стал сеткой из двух столбцов, третья
   карточка уходит на второй ряд.
   Цвета и картинки — прежние, новостные.
   ------------------------------------------------------------ */
.page-main .s07__row { margin-top: 48px; display: grid;
              grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 21px; }
.page-main .s07__card { width: auto; min-height: 0; border-radius: 10px; padding: 0;
              display: flex; flex-direction: column; position: relative; overflow: hidden; }
.page-main .s07__card > img { display: block; width: 100%; height: 261px;
              object-fit: cover; flex: none; margin: 0; }
.page-main .s07__body { display: flex; flex-direction: column; flex: 1;
              padding: 24px; min-height: 196px; box-sizing: border-box; background: transparent; }
.page-main .s07__card--img { color: var(--white); background: #1f232b; border: none; }
.page-main .s07__card--light { background: #dfe7ea; color: var(--text); border: 1px solid rgba(0,0,0,.3); }
.page-main .s07__card--dark { background: #2d2d2d; color: var(--white); border: none; }
.page-main .s07__card h3 { line-height: 1.2; margin-bottom: 14px; }
.page-main .s07__card p { line-height: 1.35; opacity: .92; flex: 1; }
.page-main .s07__date { margin-top: auto; padding-top: 36px;
              text-transform: uppercase; letter-spacing: .08em; opacity: .5; font-weight: 700; }
/* Знак тянется по высоте карточки, а она теперь набирается содержимым. */
.page-main .s07__mark { position: absolute; left: -36.69%; top: 0; width: 371.83%; height: 100%;
              max-width: none; z-index: 0; pointer-events: none; }
.page-main .s07__card--dark > :not(.s07__mark) { position: relative; z-index: 1; }

/* --- s08 career --- */
.page-main .s08 { min-height: 911px; padding-bottom: 80px; color: var(--white); overflow: visible; }
.page-main .s08__bg { --bleed: 1;
              position: absolute; left: 50%; top: 0; transform: translateX(-50%);
              width: 100vw; height: 100%;
              object-fit: cover; z-index: 0; }
.page-main .s08__panel { --bleed: 1; position: absolute; left: calc((100% - 100vw) / 2); bottom: 0;
              width: 100vw; height: 470px; z-index: 0; pointer-events: none;
              background: linear-gradient(180deg, rgba(6,8,12,0) 0%, rgba(6,8,12,.20) 45%, rgba(6,8,12,.31) 100%);
              backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
              -webkit-mask: linear-gradient(180deg, transparent 0%, #000 30%);
              mask: linear-gradient(180deg, transparent 0%, #000 30%); }
.page-main .s08 > .sec__col { position: relative; z-index: 1; margin-top: 0; padding-top: 488px; }
.page-main .s08__ey { text-transform: uppercase; letter-spacing: .09em; }
.page-main .s08__h2 { margin-top: 18px; max-width: 820px; line-height: 1.05; }
.page-main .s08__lead { margin-top: var(--gap-head); max-width: 620px; line-height: 1.4; }
.page-main .s08__btns { margin-top: 40px; display: flex; flex-wrap: wrap; gap: 16px; }
.page-main .s08__btn { display: inline-flex; align-items: center; justify-content: center;
              padding: 16px 34px; border-radius: 999px; font-size: 18px; font-weight: 700;
              text-decoration: none; transition: background .2s ease, color .2s ease, border-color .2s ease; }
.page-main .s08__btn--w { background: var(--hero-bg); color: #111; }
.page-main .s08__btn--w:hover { background: var(--red); color: var(--white); }
.page-main .s08__btn--g { background: transparent; color: var(--white); border: 1.5px solid var(--white); }
.page-main .s08__btn--g:hover { background: var(--white); color: #111; }

/* --- s09 CTA --- */
.page-main .s09 { min-height: 800px; padding-bottom: 72px; }
.page-main .s09 .cta__h2 { width: min(720px, 100%); }
.page-main .s09 .cta__lead { width: min(610px, 100%); }

/* --- footer --- */
.page-main .ftr__desc { max-width: 280px; }

/* ============================================================
   Адаптив
   ============================================================ */
@media (max-width: 1023px) {
  /* Как на «Разработке» / «Инновациях»: полоса по низу, кнопки поверх, верх в фон. */
  .page-main .s01 { min-height: 0; padding-bottom: 200px; }
  .page-main .s01__bg { left: 50%; right: auto; top: auto; bottom: 0;
              transform: translateX(-50%); width: 100vw; height: 440px;
              object-fit: cover; object-position: center bottom;
              -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 42%);
                      mask-image: linear-gradient(to bottom, transparent 0, #000 42%); }
  .page-main .s01 > .sec__col { margin-top: 72px; padding-bottom: 0; }
  .page-main .s01 .hero__cta .btn--outline { background: var(--white); }
  /* Правка 5.4 (ревью 18 августа 2026): цифры выровнены по левому краю.
     На холсте четыре показателя стоят в ряд и центрируются каждый в своей
     доле — так их и перенесли на узкий экран. Но в столбик центрирование
     читается как случайный разброс: цифра «8» и «10 000+» встают на разные
     вертикали. Ряд и подписи переведены на левый край страницы. */
  .page-main .s02__row { flex-wrap: wrap; justify-content: flex-start; padding: 40px 0; min-height: 0; }
  .page-main .s02__item { flex: 0 1 40%; text-align: left; }
  .page-main .s02__cap { margin-left: 0; margin-right: 0; }
  .page-main .s03__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .page-main .s03__card--empty { display: none; }
  /* ----------------------------------------------------------
     Правка 5.5 (ревью 18 августа 2026): переключение слайдов
     работает и на узком экране.
     Раньше ниже 1024 механика выключалась целиком: слайды
     разворачивались в столбик из восьми блоков, точки прятались,
     и восемь этапов производства читались просто длинной
     простынёй — на телефоне пропадало то, ради чего блок сделан.
     Механика оставлена та же, что на холсте: липкий экран плюс
     переключение по прогрессу прокрутки. Скрипт трогать не
     пришлось — он считает прогресс от высоты секции и работает
     на любой ширине; выключала его только эта раскладка.
     Внутри слайда раскладка своя: текст сверху, кадр под ним —
     рядом они на 375 не поместятся.
     Высота шага уменьшена с 690 до 480: на телефоне это тот же
     жест, но лист прокрутки короче на 1680px.
     ---------------------------------------------------------- */
  .page-main .s04.stages { height: calc(480px * 8); }
  .page-main .s04__pin { position: sticky; top: 0; height: 100vh; min-height: 480px; }
  .page-main .s04__slide { width: 100%; height: 100%;
                padding: 60px var(--gutter) 40px; box-sizing: border-box;
                display: flex; flex-direction: column; }
  .page-main .s04__text { position: static; width: 100%; }
  .page-main .s04__h2 { margin-top: 14px; }
  .page-main .s04__img { position: static; transform: none;
                width: 100%; flex: 1 1 auto; min-height: 0; max-height: none;
                margin-top: 24px; object-fit: contain; object-position: center; }
  /* Точки в этой раскладке — единственный указатель, что слайдов
     восемь и они листаются. Прижаты к низу липкого экрана. */
  .page-main .s04__dots { display: flex; bottom: 20px; }
  /* Отступ 150 у ряда плашек — правка 5.2, она про холст: там под лидом
     пустовала треть секции. На узком экране секция набирает высоту сама,
     и те же 150 читаются как дыра между подзаголовком и первой плашкой.
     Здесь отступ возвращается к обычному шагу (второй круг ревью). */
  .page-main .s05__cols { margin-top: 40px; }
  .page-main .s05__more { margin-top: 40px; }
  .page-main .s05__cols,
  .page-main .s06__cols { flex-direction: column; }
  .page-main .s07__row { flex-direction: column; }
  .page-main .s07__card { width: 100%; min-height: 0; }
  /* Правка 5.6 (ревью 18 августа 2026): под текстом оставалась пустая полоса.
     Секция держала высоту холста 911px и на узком экране: текст с кнопками
     кончался на 789, и последние 120px были просто фоном. Высоту теперь
     набирает содержимое, а верхний отступ (место под фотографию) уменьшен —
     кадр остаётся крупным, но не гонит блок в лишний экран. */
  .page-main .s08 { min-height: 0; padding-bottom: 48px; }
  .page-main .s08 > .sec__col { padding-top: 320px; }
}

@media (max-width: 639px) {
  .page-main .s02__item { flex: 0 1 100%; }
  .page-main .s03__grid { grid-template-columns: minmax(0, 1fr); }
  .page-main .s03__card { min-height: 260px; }
  .page-main .s01 .hero__h1 { max-width: 100%; }
  .page-main .s01 { padding-bottom: 180px; }
  .page-main .s01__bg { height: 400px; }
  .page-main .s01 .hero__cta { margin-top: 40px; }
}

/* ------------------------------------------------------------
   Правка 7 (третий круг ревью): плитки идут по три в ряд и
   одинаковы по высоте.
   На двух столбцах карточка получала 590px ширины при кадре
   261 — плитка выходила громоздкой. Три столбца дают 386px,
   ровно ширину карточки холста; кадр уменьшен до 200, тело —
   до 168, чтобы пропорция кадр/текст осталась прежней.
   grid-auto-rows: 1fr равняет и соседние ряды: карточка с
   коротким текстом не делает свой ряд ниже.
   ------------------------------------------------------------ */
.page-main .s07__grid,
.page-main .s07__row { grid-template-columns: repeat(3, minmax(0, 1fr));
            grid-auto-rows: 1fr; gap: 21px; }
.page-main .s07__card > img { height: 200px; }
.page-main .s07__body { min-height: 168px; padding: 20px; }
.page-main .s07__date { padding-top: 24px; }

@media (max-width: 1023px) {
  .page-main .s07__grid,
  .page-main .s07__row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 639px) {
  .page-main .s07__grid,
  .page-main .s07__row { grid-template-columns: minmax(0, 1fr); grid-auto-rows: auto; }
}

/* ------------------------------------------------------------
   Правка 7 (четвёртый круг ревью): плитка стала горизонтальной.
   На трёх столбцах карточка получает 386px ширины, а высота у
   неё набиралась под 400 — выходил вертикальный прямоугольник.
   Карточка мероприятия шире, чем выше (590×457), и здесь нужна
   та же пропорция в уменьшенном виде: кадр 140 вместо 261,
   тело компактнее, заголовок с 24 на 20, текст с 16 на 14 и
   обрезан тремя строками — иначе длинная новость снова тянет
   карточку вверх. Итог около 386×300 — горизонтальная.
   ------------------------------------------------------------ */
.page-main .s07__card > img { height: 132px; }
.page-main .s07__body { min-height: 0; padding: 16px; }
.page-main .s07__card h3 { font-size: 20px; line-height: 1.15; margin-bottom: 10px;
            letter-spacing: -0.2px; }
.page-main .s07__card h3 a { color: inherit; text-decoration: none; }
.page-main .cta__status { grid-column: 1 / -1; margin: 12px 0 0; color: var(--white); }
.page-main .s07__card p { font-size: 14px; line-height: 1.35;
            display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
            overflow: hidden; }
.page-main .s07__date { padding-top: 10px; font-size: 11px; }

/* Тело карточки фиксировано по высоте (четвёртый круг ревью).
   min-height не спасал: карточки лежат в сетке, ряд равняется по самой
   высокой, а текст внутри растягивался флексом — плитка с длинным
   заголовком тянула вверх весь ряд, и все становились вертикальными.
   С фиксированной высотой плитка всегда 386×300 — горизонтальная, как
   карточка мероприятия в уменьшенном виде. Текст, который не поместился,
   обрезается многоточием (line-clamp выше). */
.page-main .s07__body { height: 168px; min-height: 0; }
.page-main .s07__card p { flex: none; }

/* End */
/* /local/templates/mgc/styles.css?178727008667412 */
/* /local/templates/mgc/home.css?178726482430623 */
