/* ============================================================
   GPM Design System  —  по макету Figma «groooose DS»
   fileKey SMqlczjwtXaLAbuGQWIzRP, node 8888-30739
   Токены: цвета, типографика, отступы, радиусы + светлая/тёмная тема
   Логика акцента: красный = частным лицам, зелёный = корпоративным
   ============================================================ */

/* Шрифт Manrope подключён в HTML-шаблонах напрямую через <link rel="preconnect">
   + <link rel="stylesheet"> — параллельная загрузка шрифта одновременно с
   design-system.css вместо последовательного @import (экономия ~200-400 мс на
   первый рендер). fallback-стек прописан ниже в `--ds-font`. */

/* ---------- ТОКЕНЫ: СВЕТЛАЯ ТЕМА (по умолчанию) ---------- */
:root {
  /* Шрифт */
  --ds-font: "Manrope", "Inter Tight", -apple-system, Segoe UI, Roboto, Arial, sans-serif;
  --ds-fw-regular: 400;
  --ds-fw-medium: 500;   /* заголовки */
  --ds-fw-semibold: 600;

  /* Поверхности / текст */
  --ds-bg: #f1f5f9;            /* surface/background */
  --ds-surface: #ffffff;      /* surface/section   */
  --ds-surface-alt: #f7f9fc;
  --ds-text: #020617;         /* primary/text      */
  --ds-text-2: #1e293b;       /* text/secondary    */
  --ds-text-3: rgba(2, 6, 23, .5); /* text/tertiary */
  --ds-border: #cbd5e1;
  --ds-border-soft: #e2e8f0;

  /* Бренд — КРАСНЫЙ (частным лицам) */
  --ds-brand: #ef4444;        /* brand/bodyNormal  */
  --ds-brand-rgb: 239, 68, 68;  /* тот же цвет в RGB — для rgba()-подсветок:
                                   меняя бренд, меняем и все свечения разом */
  --ds-brand-hover: #dc2626;
  --ds-on-brand: #f8fafc;     /* brand/text        */
  --ds-brand-soft: rgba(var(--ds-brand-rgb), .10);   /* мягкая подсветка для ховеров */
  --ds-brand-soft-2: rgba(var(--ds-brand-rgb), .18);

  /* Корпоративный акцент — ЗЕЛЁНЫЙ (бизнесу) */
  --ds-corporate: #22c55e;
  --ds-corporate-hover: #16a34a;
  --ds-on-corporate: #f8fafc;

  /* Дополнительные акценты */
  --ds-accent: #f43f5e;       /* rose  (accent)    */
  --ds-accent-border: #f43f5e66;
  --ds-accent-soft: #f43f5e14;
  --ds-info: #a855f7;         /* purple (info/бейджи) */
  --ds-info-border: #a855f766;
  --ds-info-soft: #a855f714;

  /* Радиусы */
  --ds-r-block: 28px;
  --ds-r-card: 20px;
  --ds-r-md: 16px;
  --ds-r-sm: 12px;
  --ds-r-pill: 999px;

  /* ── Компоненты форм — единый стандарт (эталон: Главная) ──────────────────
     Поле обычной формы 46px, hero-формы 56px; радиус поля 16, кнопки формы 20.
     Используем эти токены вместо литералов, чтобы формы совпадали на всех страницах. */
  --ds-field-h: 56px;              /* ЕДИНАЯ высота текстового поля на всём сайте */
  --ds-field-h-sm: 46px;           /* компактное поле (узкие боковые формы)       */
  --ds-field-h-ta: 118px;          /* минимальная высота textarea                 */
  --ds-field-pad-x: 20px;
  --ds-field-pad-y-ta: 16px;       /* верт. отступ в textarea (у input — центр)   */
  --ds-field-r: var(--ds-r-md);    /* 16px */
  --ds-field-pad-l-tel: 54px;      /* поле телефона: место под флаг РФ            */
  --ds-form-btn-r: var(--ds-r-card); /* 20px — кнопка отправки формы */
  --ds-checkbox-size: 18px;        /* нативный чекбокс с accent-color             */

  /* Ошибка валидации — один цвет на все формы */
  --ds-danger: #e11d48;
  --ds-danger-soft: rgba(225, 29, 72, .14);

  /* Кнопки: высота = как у поля-собрата, чтобы вставали в одну линию */
  --ds-btn-h: 47px;                /* стандарт (CTA в шапке)                      */
  --ds-btn-h-sm: 38px;             /* компактная (в таблицах/карточках)           */
  --ds-btn-h-lg: 56px;             /* крупная (отправка формы)                    */
  --ds-btn-pad-x: 28px;
  --ds-btn-r: var(--ds-r-md);      /* 16px                                        */
  /* Состояния кнопки. Переопределяются ТОЛЬКО как токены (см. corporate.css),
     сами правила состояний не дублируются нигде. */
  --ds-btn-glow: 0 8px 20px rgba(var(--ds-brand-rgb), .35);   /* тень при наведении       */
  --ds-btn-ring: 0 0 0 3px rgba(var(--ds-brand-rgb), .35);    /* кольцо фокуса            */
  --ds-btn-lift: -1px;             /* подъём при наведении                        */

  /* ── Переиспользуемые SVG-ассеты (одно определение вместо копий по файлам) ── */
  /* скрепка для «Прикрепить файл» (маска, красится currentColor) */
  --ds-ic-clip: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M21.44%2011.05l-9.19%209.19a6%206%200%200%201-8.49-8.49l9.19-9.19a4%204%200%200%201%205.66%205.66l-9.2%209.19a2%202%200%200%201-2.83-2.83l8.49-8.48'/%3E%3C/svg%3E");
  /* флаг РФ для поля телефона (фоновая картинка) */
  --ds-ic-flag-ru: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='28'%20height='20'%20viewBox='0%200%2028%2020'%3E%3Crect%20width='28'%20height='20'%20rx='3'%20fill='%23fff'/%3E%3Crect%20y='6.67'%20width='28'%20height='6.67'%20fill='%230039A6'/%3E%3Crect%20y='13.33'%20width='28'%20height='6.67'%20fill='%23D52B1E'/%3E%3C/svg%3E");

  /* Сетка / отступы */
  --ds-container: 2560px; /* было 1440px: даём контенту растягиваться на широких экранах, чтобы боковой отступ оставался СТАТИЧНЫМ (var(--ds-gutter)=60px), а не рос от центрирования */
  --ds-content: 1320px;
  --ds-gutter: 60px; /* СТАТИЧНЫЙ боковой отступ (одно место для всего сайта; мобильные значения — в @media ниже) */
  --ds-block-gap: 60px;   /* между секциями */
  --ds-gap: 24px;
  --ds-hgap: 20px;
  --ds-vgap: 16px;

  /* Типографика (px из Figma: size / line-height) */
  --ds-h1: 68px;  --ds-h1-lh: 76px;
  --ds-h2: 50px;  --ds-h2-lh: 56px;
  --ds-h3: 46px;  --ds-h3-lh: 52px;
  --ds-h4: 42px;  --ds-h4-lh: 48px;
  --ds-h5: 34px;  --ds-h5-lh: 40px;
  --ds-h6: 22px;  --ds-h6-lh: 32px;
  --ds-body-l: 22px; --ds-body-l-lh: 32px;
  --ds-body-m: 17px; --ds-body-m-lh: 24px;
  --ds-body-s: 12px; --ds-body-s-lh: 20px;

  /* Тени */
  --ds-shadow-card: 0 8px 30px rgba(2, 6, 23, .06);
  --ds-shadow-soft: 0 2px 10px rgba(2, 6, 23, .05);

  --ds-transition: .18s ease;
}

/* ---------- ТОКЕНЫ: ТЁМНАЯ ТЕМА ---------- */
/* Значения выверены по макету Figma «groooose DS», node 8888-33586 */
:root[data-theme="dark"] {
  --ds-bg: #020617;            /* surface/background */
  --ds-surface: #0f172a;       /* surface/section    */
  --ds-surface-alt: #1a2438;
  --ds-text: #f1f5f9;          /* primary/text       */
  --ds-text-2: #cbd5e1;        /* text/secondary     */
  --ds-text-3: rgba(241, 245, 249, .5); /* text/tertiary */
  --ds-border: #334155;
  --ds-border-soft: #1e293b;

  /* Бренд в тёмной теме мягче (brand/bodyNormal = #f87171) */
  --ds-brand: #f87171;
  --ds-brand-rgb: 248, 113, 113;
  --ds-brand-hover: #fca5a5;
  --ds-on-brand: #f1f5f9;      /* brand/text         */
  --ds-brand-soft: rgba(var(--ds-brand-rgb), .14);
  --ds-brand-soft-2: rgba(var(--ds-brand-rgb), .22);

  --ds-corporate: #22c55e;
  --ds-corporate-hover: #4ade80;
  --ds-on-corporate: #04140a;

  --ds-accent: #fb7185;        /* accent/text        */
  --ds-accent-border: #fb718566;
  --ds-accent-soft: #fb718514;
  --ds-info: #c084fc;          /* info/text          */
  --ds-info-border: #c084fc66;
  --ds-info-soft: #c084fc14;

  --ds-danger: #f87171;
  --ds-danger-soft: rgba(248, 113, 113, .18);

  --ds-shadow-card: 0 8px 30px rgba(0, 0, 0, .45);
  --ds-shadow-soft: 0 2px 10px rgba(0, 0, 0, .4);
}

/* Системная тёмная тема, если пользователь не выбрал вручную */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --ds-bg: #020617;
    --ds-surface: #0f172a;
    --ds-surface-alt: #1a2438;
    --ds-text: #f1f5f9;
    --ds-text-2: #cbd5e1;
    --ds-text-3: rgba(241, 245, 249, .5);
    --ds-border: #334155;
    --ds-border-soft: #1e293b;
    --ds-brand: #f87171;
    --ds-brand-rgb: 248, 113, 113;
    --ds-brand-hover: #fca5a5;
    --ds-brand-soft: rgba(var(--ds-brand-rgb), .14);
    --ds-brand-soft-2: rgba(var(--ds-brand-rgb), .22);
    --ds-accent: #fb7185;
    --ds-danger: #f87171;
    --ds-danger-soft: rgba(248, 113, 113, .18);
    --ds-info: #c084fc;
    --ds-info-border: #c084fc66;
    --ds-info-soft: #c084fc14;
    --ds-shadow-card: 0 8px 30px rgba(0, 0, 0, .45);
  }
}

/* ---------- АУДИТОРИЯ: корпоратив → зелёный ---------- */
/* Ставится на секции/страницы для юрлиц: <... data-audience="corporate"> */
[data-audience="corporate"] {
  --ds-brand: var(--ds-corporate);
  --ds-brand-hover: var(--ds-corporate-hover);
  --ds-on-brand: var(--ds-on-corporate);
  --ds-brand-soft: rgba(34, 197, 94, .12);
  --ds-brand-soft-2: rgba(34, 197, 94, .20);
}

/* ============================================================
   БАЗА САЙТА — применяется НА ВСЕХ СТРАНИЦАХ.
   Раньше эти правила жили только в home-figma.css (грузится только на
   Главной) → тёмная тема и логотип не работали на остальных страницах.
   ============================================================ */

/* Фон страницы + шрифт. Перебиваем белый фон легаси-темы. margin: 0 убирает
   дефолтные 8px браузера — иначе <header> и <footer> (прямые дети body)
   отступают от края viewport, и подложка шапки/подвала обрывается тонкой
   полоской по бокам (у footer другой фон, чем у body — видно особенно). */
html body { background: var(--ds-bg); color: var(--ds-text); font-family: var(--ds-font); margin: 0; }

/* Плавный переход при смене темы */
body, .newhead, section, .theme_button, .button, input, textarea, .card, .ds-card {
  transition: background-color var(--ds-transition), color var(--ds-transition), border-color var(--ds-transition);
}

/* Типографика (шкала Figma) */
h1 { font-family: var(--ds-font); font-weight: var(--ds-fw-medium); font-size: var(--ds-h1); line-height: var(--ds-h1-lh); letter-spacing: -.01em; color: var(--ds-text); }
h2, .section_header { font-family: var(--ds-font); font-weight: var(--ds-fw-medium); font-size: var(--ds-h2); line-height: var(--ds-h2-lh); letter-spacing: -.01em; color: var(--ds-text); }
h3 { font-family: var(--ds-font); font-weight: var(--ds-fw-medium); font-size: var(--ds-h3); line-height: var(--ds-h3-lh); color: var(--ds-text); }
h4 { font-family: var(--ds-font); font-weight: var(--ds-fw-medium); font-size: var(--ds-h4); line-height: var(--ds-h4-lh); }
h5 { font-family: var(--ds-font); font-weight: var(--ds-fw-medium); font-size: var(--ds-h5); line-height: var(--ds-h5-lh); }
h6 { font-family: var(--ds-font); font-weight: var(--ds-fw-medium); font-size: var(--ds-h6); line-height: var(--ds-h6-lh); }
p, li, .black, .body-text { font-family: var(--ds-font); }
p { color: var(--ds-text-2); }

/* Секции: прозрачные — показывают фон страницы; контентные — поверхность */
section.bl, section { background: transparent; }
body > section.bl,
body > section[class*="section_padding"] { background: transparent; }
body > div.bl,
body > section.ls,
.card, .card-body,
.content-card.with_white_background { background: var(--ds-surface); }

/* Ссылки-акценты */
a.link, .black a, .text-accent { color: var(--ds-brand); }
a.link:hover { color: var(--ds-brand-hover); }

/* Шапка — фон = фон страницы */
.newhead { background: var(--ds-bg); }
.header__text, .header__menu, .menu a, .links-menu a { color: var(--ds-text); }

/* Футер — на фоне страницы */
body > footer { background: var(--ds-bg); color: var(--ds-text); }
body > footer a { color: var(--ds-text-2); }
body > footer a:not([class*="button"]):not(.ds-btn):hover { color: var(--ds-brand); }
body > footer > .container-fluid,
body > footer [class*="my-pt"] { padding-top: 48px; }

/* ---------- ТЁМНАЯ ТЕМА (общее для всех страниц) ---------- */
/* Текст на токенах: перебиваем хардкод #333 легаси-темы */
:root[data-theme="dark"] body,
:root[data-theme="dark"] p,
:root[data-theme="dark"] li,
:root[data-theme="dark"] h1, :root[data-theme="dark"] h2, :root[data-theme="dark"] h3,
:root[data-theme="dark"] h4, :root[data-theme="dark"] h5, :root[data-theme="dark"] h6,
:root[data-theme="dark"] .section_header, :root[data-theme="dark"] .h2, :root[data-theme="dark"] .h3,
:root[data-theme="dark"] .black,
:root[data-theme="dark"] .menu a, :root[data-theme="dark"] .links-menu a,
:root[data-theme="dark"] .header__text, :root[data-theme="dark"] .header__menu a { color: var(--ds-text); }
:root[data-theme="dark"] .header__text .no-color,
:root[data-theme="dark"] p { color: var(--ds-text-2); }

/* Шапка в тёмной теме — поверхность (не белая) */
:root[data-theme="dark"] .newhead,
:root[data-theme="dark"] header .my-fixed-top,
:root[data-theme="dark"] header { background: var(--ds-surface); }

/* Картинки/оверлеи на белом фоне */
:root[data-theme="dark"] .bg-white,
:root[data-theme="dark"] .top-overlap-small-ux { background: var(--ds-surface); }

/* Границы */
:root[data-theme="dark"] .card,
:root[data-theme="dark"] .card-body,
:root[data-theme="dark"] input,
:root[data-theme="dark"] textarea { border-color: var(--ds-border); }

/* Карточки отзывов (.rv-card заданы инлайн под светлую тему — белый фон/тёмный текст) */
:root[data-theme="dark"] .rv-card {
  background: var(--ds-surface); border: 1px solid var(--ds-border);
  box-shadow: 0 2px 16px rgba(0, 0, 0, .40);
}
:root[data-theme="dark"] .rv-card__name { color: var(--ds-text); }
:root[data-theme="dark"] .rv-card__text { color: var(--ds-text-2); }
:root[data-theme="dark"] .rv-card__date { color: var(--ds-text-3); }
:root[data-theme="dark"] .rv-avatar { background: var(--ds-brand); }

/* ---------- ЛОГОТИП — светлая тема: logo.png; тёмная — logo-white.png ----------
   `<img src="/verstka/img/logo.png">` подставлен в шапке/футере/модалках.
   На тёмной теме подменяем через `content: url()` — <img>, alt и SEO не тронуты. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .newhead img.logo,
  :root:not([data-theme="light"]) .newhead .logo img,
  :root:not([data-theme="light"]) footer.newtemplate .first .logo img,
  :root:not([data-theme="light"]) footer .logo img,
  :root:not([data-theme="light"]) .fancybox-content:has(#ajaxForm-mainHelp) .help_specialist_block_logo img,
  :root:not([data-theme="light"]) .fancybox-content:has(#ajaxForm-mainHelp) .logo_img {
    content: url("/verstka/img/logo-white.png");
  }
}
:root[data-theme="dark"] .newhead img.logo,
:root[data-theme="dark"] .newhead .logo img,
:root[data-theme="dark"] footer.newtemplate .first .logo img,
:root[data-theme="dark"] footer .logo img,
:root[data-theme="dark"] .fancybox-content:has(#ajaxForm-mainHelp) .help_specialist_block_logo img,
:root[data-theme="dark"] .fancybox-content:has(#ajaxForm-mainHelp) .logo_img {
  content: url("/verstka/img/logo-white.png");
}

/* ============================================================
   БАЗОВЫЕ КОМПОНЕНТЫ (класс .ds-*) — переиспользуемые
   ============================================================ */

.ds-container { max-width: var(--ds-content); margin: 0 auto; padding: 0 20px; }
.ds-section { padding: var(--ds-block-gap) 0; }

/* Типографика */
.ds-h1 { font: var(--ds-fw-medium) var(--ds-h1)/var(--ds-h1-lh) var(--ds-font); letter-spacing: -.01em; }
.ds-h2 { font: var(--ds-fw-medium) var(--ds-h2)/var(--ds-h2-lh) var(--ds-font); letter-spacing: -.01em; }
.ds-h3 { font: var(--ds-fw-medium) var(--ds-h3)/var(--ds-h3-lh) var(--ds-font); }
.ds-h4 { font: var(--ds-fw-medium) var(--ds-h4)/var(--ds-h4-lh) var(--ds-font); }
.ds-h5 { font: var(--ds-fw-medium) var(--ds-h5)/var(--ds-h5-lh) var(--ds-font); }
.ds-h6 { font: var(--ds-fw-medium) var(--ds-h6)/var(--ds-h6-lh) var(--ds-font); }
.ds-body-l { font: var(--ds-fw-regular) var(--ds-body-l)/var(--ds-body-l-lh) var(--ds-font); }
.ds-body-m { font: var(--ds-fw-regular) var(--ds-body-m)/var(--ds-body-m-lh) var(--ds-font); }
.ds-body-s { font: var(--ds-fw-regular) var(--ds-body-s)/var(--ds-body-s-lh) var(--ds-font); }

/* ── Вертикальный ритм секций (легаси-классы, оставшиеся в разметке) ─────────
   Единый ритм. Раньше объявления были размазаны по home-figma.css.
   Контекстные страницы переопределяют локально (пример: .corp-page — 36px). */
.section_padding_140 { padding-top: 40px; padding-bottom: 40px; }
.section_padding_100 { padding-top: 40px; padding-bottom: 40px; }
.section_padding_top_100 { padding-top: 40px; }
.section_padding_bottom_50 { padding-bottom: 40px; }
.section_padding_40 { padding-top: 32px; padding-bottom: 32px; }
/* Форма с фотом менеджера — плотнее */
.bl.section_padding_100:has(picture) { padding-top: 16px; padding-bottom: 16px; }

/* Кнопки */
/* ── Кнопка ────────────────────────────────────────────────────────────────
   Эталон — Главная. Класс ДОБАВЛЯЕТСЯ к существующим (theme_button/button-red
   и т.п.), а не заменяет их: легаси-JS продолжает находить свои классы.
   Размер задаётся высотой, чтобы кнопки совпадали построчно с полями форм.
   ────────────────────────────────────────────────────────────────────────── */
.ds-btn,
/* Алиасы: классы, которые уже стоят в разметке CMS. Благодаря им компонент
   применяется без правки HTML — легаси-JS продолжает работать со своими классами. */
.theme_button,
.button:not(.whatsapp):not(.telegram),
.button-red,
.button-magic,
a.button,
button.theme_button {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  box-sizing: border-box;
  padding: 16px var(--ds-btn-pad-x);
  font-family: var(--ds-font); font-weight: var(--ds-fw-medium);
  font-size: var(--ds-body-m); line-height: 1; letter-spacing: 0; text-transform: none;
  border: 1px solid transparent; border-radius: var(--ds-btn-r); box-shadow: none;
  background: var(--ds-brand); color: var(--ds-on-brand);
  text-decoration: none; cursor: pointer;
  transition: background var(--ds-transition), color var(--ds-transition),
              border-color var(--ds-transition), box-shadow var(--ds-transition),
              transform .1s ease;
}

/* ── Состояния ─────────────────────────────────────────────────────────────
   Единственное место, где они описаны. На страницах меняем ТОЛЬКО токены
   (--ds-brand-hover / --ds-btn-glow / --ds-btn-ring), а не сами правила.
   Эталон — CTA в шапке Главной: подъём + подсветка на hover, «вдавливание»
   на active, кольцо на focus-visible.
   ────────────────────────────────────────────────────────────────────────── */
.ds-btn:hover,
.theme_button:hover,
.button:not(.whatsapp):not(.telegram):hover,
.button-red:hover, .button-magic:hover, a.button:hover, button.theme_button:hover {
  background: var(--ds-brand-hover); color: var(--ds-on-brand);
  border-color: transparent; text-decoration: none;
  box-shadow: var(--ds-btn-glow); transform: translateY(var(--ds-btn-lift));
}
.ds-btn:active,
.theme_button:active,
.button:not(.whatsapp):not(.telegram):active,
.button-red:active, .button-magic:active, a.button:active, button.theme_button:active {
  transform: translateY(0); box-shadow: none;
}
.ds-btn:focus-visible,
.theme_button:focus-visible,
.button:not(.whatsapp):not(.telegram):focus-visible,
.button-red:focus-visible, .button-magic:focus-visible,
a.button:focus-visible, button.theme_button:focus-visible {
  outline: none; box-shadow: var(--ds-btn-ring);
}
.ds-btn[disabled], .ds-btn.is-disabled,
.theme_button[disabled], .button[disabled], .button-red[disabled],
button.theme_button[disabled], [type="submit"][disabled] {
  opacity: .45; cursor: not-allowed; pointer-events: none;
  box-shadow: none; transform: none;
}

/* Легаси-класс .color1 (в чанке tpl.AjaxForm.mainHelp) — раньше делал
   кнопку контурной. Убрано: везде одинаковая брендовая кнопка. */

/* ── Размеры и варианты ────────────────────────────────────────────────────
   ВАЖНО про специфичность: базовый селектор попадает по алиасу
   `.button:not(.whatsapp):not(.telegram)` — это (0,3,0). Поэтому модификаторы
   несут ту же защиту `:not(.whatsapp):not(.telegram)`: она и по смыслу верна
   (соц-кнопки — не кнопки-компоненты), и уравнивает вес, а идут они ниже по
   файлу и потому выигрывают. Без неё `.ds-btn--outline` (0,1,0) молча
   проигрывал бы базе и вариант не применялся.
   ────────────────────────────────────────────────────────────────────────── */
.ds-btn--sm:not(.whatsapp):not(.telegram) { height: var(--ds-btn-h-sm); padding: 0 22px; }
.ds-btn--md:not(.whatsapp):not(.telegram) { height: var(--ds-btn-h);    padding: 0 var(--ds-btn-pad-x); }
.ds-btn--lg:not(.whatsapp):not(.telegram) { height: var(--ds-btn-h-lg); padding: 0 40px; border-radius: var(--ds-r-card); font-size: var(--ds-h6); }

.ds-btn--pill:not(.whatsapp):not(.telegram)  { border-radius: var(--ds-r-pill); }
.ds-btn--block:not(.whatsapp):not(.telegram) { display: flex; width: 100%; }
/* контурная нейтральная */
.ds-btn--ghost:not(.whatsapp):not(.telegram) { background: transparent; color: var(--ds-text); border-color: var(--ds-border); }
.ds-btn--ghost:not(.whatsapp):not(.telegram):hover { background: transparent; border-color: var(--ds-brand); color: var(--ds-brand); box-shadow: none; }
/* контурная брендовая */
.ds-btn--outline:not(.whatsapp):not(.telegram) { background: transparent; color: var(--ds-brand); border-color: var(--ds-brand); }
.ds-btn--outline:not(.whatsapp):not(.telegram):hover { background: var(--ds-brand-soft); color: var(--ds-brand); border-color: var(--ds-brand); box-shadow: none; }
.ds-btn--corporate:not(.whatsapp):not(.telegram) { background: var(--ds-corporate); color: var(--ds-on-corporate); }
.ds-btn--corporate:not(.whatsapp):not(.telegram):hover { background: var(--ds-corporate-hover); }

/* ── Карточка ──────────────────────────────────────────────────────────────
   Эталон — «Наш автопарк»/«FAQ»/«Наши гарантии»: белый фон, радиус 20,
   рамка 1px, мягкая тень. Класс ДОБАВЛЯЕТСЯ к разметке; часто разметку CMS
   не поменять — поэтому перечисляем встречающиеся легаси-селекторы алиасами.
   Padding не фиксируем в базе: разные блоки имеют разный внутренний ритм
   (24-32), задаётся отдельным правилом контекста.
   ────────────────────────────────────────────────────────────────────────── */
.ds-card,
.auto-card,
.news-list_item,
.faq-item,
.our_guarantees .pixel-guarantees__item,
.clients .client,
.uslugi-svc-card,
.reviews-soc__item-border,
.contact-card,
.vacancies_template .card,
.vacancies_template .vacancies_item,
.vacancies_template .response,
.vacancies_template .container_interview .col-md-6,
.vacancies_template .telegram_bot,
.newtemplate .card-row .card,
.newtemplate .switch .tab-content > .tab-pane,
.newtemplate .switch .tab-pane,
.corp-page .switch .tab-pane,
.newtemplate .solution .row.my-row > .col-sm-6,
.corp-page .solution .row.my-row > .col-sm-6,
.autopark .row.my-row > [class*="col-"],
.pixel-delivery .delivery__block,
.col-md-4:has(p.grey.text-center),
:is(.newtemplate, section.ls) .pixel-calculator {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-r-card);
  box-shadow: var(--ds-shadow-soft);
  color: var(--ds-text);
}

/* Варианты */
.ds-card--elevated { box-shadow: var(--ds-shadow-card); }
.ds-card--flat     { box-shadow: none; }
.ds-card--outlined { box-shadow: none; }        /* только рамка */
.ds-card--surface-alt { background: var(--ds-surface-alt); }

/* Модификатор внутреннего отступа (типовой из макета) */
.ds-card--pad-sm { padding: 16px; }
.ds-card--pad    { padding: 24px; }
.ds-card--pad-lg { padding: 32px; }

/* ── Бейдж-«пилюля» ────────────────────────────────────────────────────────
   Мягкая брендовая подложка + рамка того же тона. Алиасами подключены
   легаси-селекторы: облако тегов, «характеристики» табов, теги вакансий.
   Смена бренда на корп-странице автоматически перекрашивает и их.
   ────────────────────────────────────────────────────────────────────────── */
.ds-badge,
.newtemplate .tags-cloud a,
.corp-page .tags-cloud a,
.newtemplate .switch .tab-pane .spans > span,
.corp-page .switch .tab-pane .spans > span,
.vacancies_template .vacancies_item-tags > * {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 14px; border-radius: var(--ds-r-pill);
  background: var(--ds-brand-soft); color: var(--ds-brand);
  border: 1px solid var(--ds-brand-soft-2, transparent);
  font: var(--ds-fw-medium) var(--ds-body-s)/1.15 var(--ds-font);
  text-decoration: none;
  transition: background var(--ds-transition), color var(--ds-transition), border-color var(--ds-transition);
}
/* Цвет тегов-ссылок в контентных секциях перебивают легаси-правила ссылок
   ('.bl.section_padding_40 a { color: var(--ds-text) underline }' и т.п.).
   Держим брендовый цвет с приоритетом, чтобы бейдж читался как бейдж. */
.newtemplate .tags-cloud a,
.corp-page .tags-cloud a { color: var(--ds-brand); text-decoration: none; }

/* Кликабельный бейдж/тег: на ховер — заливка брендом */
a.ds-badge:hover,
.newtemplate .tags-cloud a:hover,
.corp-page .tags-cloud a:hover {
  background: var(--ds-brand); color: var(--ds-on-brand); border-color: var(--ds-brand);
}

/* Варианты */
.ds-badge--accent   { background: var(--ds-accent-soft); color: var(--ds-accent); border-color: var(--ds-accent-border); }
.ds-badge--info     { background: var(--ds-info-soft); color: var(--ds-info); border-color: var(--ds-info-border); }
.ds-badge--outline  { background: transparent; }

/* ── Контейнер секции ──────────────────────────────────────────────────────
   Все секции сайта имеют одинаковую обёртку: максимальная ширина + статичный
   гутер. Одно правило вместо 9 копий по файлам (было .ls > .container,
   .corp-page ..., .autopark, .clients, .letters, .solution, .intro_section2 и т.д).
   Специфичность приподнята через `body`, чтобы бить bootstrap-`.container`. */
body .ls > .container,
body section.ls > .container,
body .corp-page .bl.section_padding_40 .container,
body .corp-page .switch .my-container-lg,
body .corp-page .switch > .container,
body .corp-page .row:has(.reviews-carousel),
body .corp-page .row:has(.reviews-soc__wrapper),
body .corp-page .solution,
body .corp-page .autopark,
body .corp-page .clients,
body .corp-page .letters,
body .letters,
body .intro_section2_ux > .container,
body .bl.section_padding_40 > .container,
body .container:has(.framed-heading),
body .container:has(.table-wrapper),
body .container:has(.testimonials-carousel),
body .container > div:has(> .row.columns_margin_bottom_20),
body > .section_header,
body section.ls .section_header,
body .ls > .section_header,
body .corp-page > h2.section_header,
body .corp-page > .section_header,
body .corp-page .our_guarantees {
  max-width: var(--ds-container, 1440px); margin-left: auto; margin-right: auto;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}

/* ── «Прикрепить файл» ─────────────────────────────────────────────────────
   Пунктирная кнопка со скрепкой. Раньше блок был описан 5 раз (hero, услуги,
   модалка, статьи…) с почти одинаковыми правилами. Здесь общий вид, ширину
   и padding задаёт контекст (в hero — inline-chip 11/18, в форме — full-width 16/20).
   Иконка-скрепка (::before) — тоже общая. */
.custom-file-upload {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  cursor: pointer; box-sizing: border-box; margin: 0;
  border: 1px dashed var(--ds-border);
  border-radius: 12px;
  background: var(--ds-surface); color: var(--ds-text-2);
  font: var(--ds-fw-regular) var(--ds-body-m)/1 var(--ds-font);
  transition: border-color var(--ds-transition), color var(--ds-transition), background var(--ds-transition);
}
.custom-file-upload::before {
  content: ""; flex: 0 0 auto; width: 18px; height: 18px;
  background-color: currentColor;
  -webkit-mask: var(--ds-ic-clip) center / contain no-repeat;
          mask: var(--ds-ic-clip) center / contain no-repeat;
}
/* Спрятанный <input type=file> сопровождает лейбл во всех формах */
.custom-file-upload input[type="file"],
input[type="file"].sr-only { display: none !important; }

/* ── Заголовки блоков-секций .h2 (легаси-класс на p/div/span) ──────────────
   .solution / .autopark / .corp-dogovor. Одиннадцать копий свёл к одному
   правилу + одному медиа-запросу. */
.newtemplate .solution p.h2, .newtemplate .solution .h2,
.newtemplate .autopark p.h2, .newtemplate .autopark .h2,
.corp-page .solution p.h2, .corp-page .solution .h2,
.corp-page .autopark p.h2, .corp-page .autopark .h2,
.corp-page .corp-dogovor .section_header,
.autopark p.h2, .autopark .h2 {
  font: var(--ds-fw-medium) var(--ds-h2)/var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); margin: 0 0 10px;
}
.autopark p.h2, .autopark .h2 { text-align: center; }
/* Интро-абзац секции «Автопарк» («Наши грузчики не приходят одни…») — по
   центру + ограничим ширину, чтобы визуально стоял под заголовком «Наш
   автопарк», а не растекался во всю ширину контейнера. Раньше `.my-container-xl`
   наследовал `text-align: start` — вводный текст уходил влево. */
.autopark > .my-container-xl,
.autopark > .my-container-xl > noindex,
.autopark > .my-container-xl > p,
.autopark > .my-container-xl > noindex > p {
  text-align: center;
}
/* max-width только на интро-абзац (noindex/p БЕЗ класса .h2). Иначе селектор
   `>p` ловил и заголовок p.h2 → сжимал его до 720.
   <noindex> — inline по умолчанию, поэтому max-width на нём игнорировался;
   принудительно делаем блочным. */
.autopark > .my-container-xl > noindex { display: block; }
.autopark > .my-container-xl > noindex,
.autopark > .my-container-xl > p:not(.h2):not([class*="h2"]),
.autopark > .my-container-xl > noindex > p {
  max-width: 720px; margin-left: auto; margin-right: auto;
}
/* Мобилка — единый размер заголовков секций (--ds-h2 = 28px). Раньше здесь
   .solution/.autopark/.corp-dogovor ужимались до --ds-h4 (23px), из-за чего
   заголовки блоков «Готовые решения», «Наш автопарк», «Наши клиенты»
   выглядели мельче остальных section_header. */

/* ── Hover для .custom-file-upload ─────────────────────────────────────────
   На всех формах реакция одинаковая: бренд-подсветка. */
.custom-file-upload:hover {
  background: var(--ds-brand-soft);
  color: var(--ds-brand);
  border-color: var(--ds-brand);
}
/* Подпись «Прикрепить файл» / имя загруженного файла */
.custom-file-upload .file-name {
  color: inherit; font: inherit;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 260px;
}
/* Размер файла — маленьким серым справа */
.custom-file-upload .remove-file {
  color: var(--ds-text-3); font: var(--ds-fw-regular) var(--ds-body-s)/1 var(--ds-font);
  margin-left: auto; padding-left: 8px; cursor: pointer;
}
.custom-file-upload .remove-file:empty { display: none; }
/* Подтверждение выбранного файла — брендовая рамка + подложка */
.custom-file-upload.file-add { border-style: solid; border-color: var(--ds-brand); color: var(--ds-brand); background: var(--ds-brand-soft); }

/* Состояние ошибки (валидация типа/размера файла) */
.custom-file-upload.file-error { border-color: var(--ds-accent); color: var(--ds-accent); background: var(--ds-accent-soft); }
.custom-file-upload.file-error .file-name { color: var(--ds-accent); }

/* ── Hover карточки (общий эффект «поднятие + рамка бренд + тень») ─────────
   .news-list_item, .auto-card, .card-row .card, .vacancies_template .card1. */
.news-list_item:hover,
.auto-card:hover,
.newtemplate .card-row a:hover .card,
.vacancies_template .card1:hover, .vacancies_template .card2:hover {
  transform: translateY(-4px);
  box-shadow: var(--ds-shadow-card);
  border-color: var(--ds-brand);
}

/* ── Форма-«менеджер»: заявка + фото сотрудника ────────────────────────────
   Две реализации в CMS: `.container.order` (внизу страниц услуг) и
   `.bl.section_padding_100:has(picture)` (нижний CTA-блок Главной/корп).
   Раньше блоки были описаны отдельно с почти идентичными правилами.
   Здесь — общий каркас: контейнер, заголовок, 2-колоночная сетка (форма-фото),
   ширина колонки формы, кнопка на всю ширину. Специфика (картинка в ::after
   у .container.order vs <picture> у .bl…has(picture)) описана точечно ниже. */

/* Контейнер секции формы */
.container.order,
.bl.section_padding_100:has(picture) > .container {
  max-width: var(--ds-container, 1440px); margin: 0 auto; box-sizing: border-box;
  padding: 24px var(--ds-gutter);
}
.container.order { margin-top: 24px; padding-top: 8px; padding-bottom: 20px; background-image: none !important; }

/* ── Утилита .sr-only (screen-reader only) ──────────────────────────────────
   Стандартный WCAG-паттерн: элемент остаётся в DOM для скрин-ридеров, но
   визуально не занимает места. Используется на подписях полей форм, где
   плейсхолдер уже даёт визуальную подсказку («Имя», «Телефон»), а сам label
   нужен только для доступности. Разметку CMS помечаем классом sr-only —
   тогда работает без специальных селекторов по контексту. */
.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* Заголовок над формой */
.container.order .h2, .container.order p.h2,
.bl.section_padding_100:has(picture) .to_animate .h2 {
  display: block;
  font: var(--ds-fw-medium) var(--ds-h4)/var(--ds-h4-lh) var(--ds-font);
  color: var(--ds-text); margin: 0 0 8px;
}
.container.order .h2, .container.order p.h2 { text-align: center; }
.bl.section_padding_100:has(picture) .to_animate {
  text-align: left; margin: 0 0 16px;
  font: var(--ds-fw-medium) var(--ds-h4)/var(--ds-h4-lh) var(--ds-font);
  color: var(--ds-text);
}
.bl.section_padding_100:has(picture) .to_animate noindex p,
.bl.section_padding_100:has(picture) .to_animate > p:not(:has(.h2)) {
  font: var(--ds-fw-regular) var(--ds-body-m)/var(--ds-body-m-lh) var(--ds-font);
  color: var(--ds-text-2); margin: 0;
}
/* Убираем лишний <br> и margin у <p> с заголовком → компактная шапка формы */
.bl.section_padding_100:has(picture) .to_animate br,
.container.order .to_animate br { display: none; }
.bl.section_padding_100:has(picture) .to_animate > p,
.bl.section_padding_100:has(picture) .to_animate p.text-center,
.container.order .to_animate > p { margin: 0 0 4px; line-height: 1.2; }
.bl.section_padding_100:has(picture) .to_animate noindex,
.container.order .to_animate noindex { display: block; }

/* 2-колоночная сетка «форма | фото».
   max-width НЕ ограничиваем — форма занимает всю доступную ширину контейнера
   (у `.container.order` свои padding: 24px var(--ds-gutter)). Иначе колонка
   формы получалась ~484px, тогда как на Главной (col-md-5 в container) она
   ~639px — визуально «уже», не совпадала с эталонной формой. */
.container.order form.ajax_form {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 32px; align-items: center; max-width: none; margin: 0 auto; position: relative;
}
.bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) {
  display: grid !important; grid-template-columns: 1fr 1fr; gap: 32px;
  align-items: stretch; margin: 0;
}
.bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > [class*="col-"] {
  width: auto !important; max-width: none !important; min-width: 0 !important;
  float: none !important; padding: 0; margin: 0;
}

/* Колонка формы */
.container.order form.ajax_form .row.my-row {
  grid-column: 1; display: flex; flex-direction: column; gap: 14px; margin: 0; padding: 0;
}
.container.order form.ajax_form .col-sm-6 { width: 100%; max-width: none; float: none; padding: 0; margin: 0; }
.container.order form.ajax_form .col-sm-6 > div { display: flex; flex-direction: column; gap: 14px; }
.container.order form.ajax_form br { display: none; }
.bl.section_padding_100 .quote-form { display: flex; flex-wrap: wrap; gap: 12px; text-align: left; }
.bl.section_padding_100 .quote-form > .form-group,
.bl.section_padding_100 .quote-form > .input-group,
.bl.section_padding_100 .quote-form > .row { flex: 1 1 100%; width: 100%; margin: 0; min-width: 0; }

/* Фото менеджера */
.container.order form.ajax_form::after {
  content: ""; grid-column: 2; align-self: center; justify-self: center;
  width: 100%; max-width: 400px; aspect-ratio: 480 / 720;
  background: url("/assets/template/newdesign/images/operator-gpm.png") center / cover no-repeat;
  border-radius: 28px;
}
.bl.section_padding_100:has(picture) [class*="col-"]:has(picture) {
  display: flex; align-self: center; justify-content: center; align-items: center;
}
/* Картинка формы «Оставьте заявку» на Главной. Раньше picture растягивался на
   всю высоту формы (~600px, стретч колонки) и получал object-fit:cover; исходник
   операторши — портретный 760×1140 (2:3), поэтому в широком боксе верх и низ
   срезались — обрезалась голова. Ограничиваем ширину до 400px и фиксируем
   портретный аспект 2:3 — так же, как у `.container.order form.ajax_form::after`
   на страницах услуг (визуально одинаковая карточка сотрудника). */
.bl.section_padding_100:has(picture) picture {
  position: relative; display: block;
  width: 100%; max-width: 400px; aspect-ratio: 480 / 720; box-sizing: border-box;
  background: linear-gradient(135deg, #f3ecfd 0%, #fdeef1 100%);
  border-radius: var(--ds-r-block, 28px); overflow: hidden;
}
.bl.section_padding_100:has(picture) picture img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; object-position: center; display: block; margin: 0; border-radius: 0;
}
/* сетка формы+картинки: картинка фиксированного портретного аспекта, центрируется
   по вертикали относительно формы (была стретч на всю высоту — приводило к обрезке
   портрета «под альбом» и срезу головы). */
.bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) { align-items: center !important; }

/* Кнопка отправки — на всю ширину; вид/состояния из .ds-btn */
.container.order [type="submit"],
.container.order button[type="submit"],
.bl.section_padding_100 .quote-form .theme_button,
.bl.section_padding_100 .quote-form button[type="submit"],
.bl.section_padding_100 .quote-form .btn_main_form {
  display: flex; width: 100%; height: 56px; margin-top: 12px;
  align-items: center; justify-content: center;
  font-size: var(--ds-body-m);
}

/* Отступ строки согласия/кнопки в .quote-form (было точечно в services.css) */
.bl.section_padding_100 .quote-form .text-center,
.bl.section_padding_100 .quote-form > .row > [class*="col-"]:has(button[type="submit"]) { width: 100%; }
.bl.section_padding_100 .quote-form > .row > [class*="col-"]:has(button[type="submit"]),
.bl.section_padding_100 .quote-form > .row > [class*="col-"]:has(.theme_button) { margin-top: 20px; }

/* Мобилка: 1 колонка, фото сверху над формой — визуально одинаково с
   `.bl.section_padding_100:has(picture)` (order:-1 у колонки с picture). */
@media (max-width: 899px) {
  .container.order form.ajax_form {
    display: flex; flex-direction: column; gap: 20px;
    grid-template-columns: none;
    /* На десктопе форма — grid с align-items: center (вертикально по центру
       фото); в flex-col это же значение центрирует поля по горизонтали, и
       ряды получают меньшую внутреннюю ширину — поля выглядят «уже», чем на
       Главной. Сбрасываем на stretch, чтобы ряды занимали всю ширину формы. */
    align-items: stretch;
  }
  .container.order form.ajax_form::after {
    order: -1; grid-column: auto; align-self: center;
    /* max-width 400 — как у picture на Главной (design-system правило выше);
       в узком контейнере реальная ширина ограничится гуттером, но пропорция
       остаётся портретной 2:3. */
    width: 100%; max-width: 400px; aspect-ratio: 480 / 720;
  }
}
@media (max-width: 767px) {
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) { grid-template-columns: 1fr; gap: 30px; }
  /* Порядок на мобилке: заголовок → текст → картинка → поля. Раньше здесь
     col с picture получал order:-1 и уходил ПЕРЕД заголовком/текстом (они
     внутри соседнего col-md-5). Делаем col-md-5 сеткой прозрачной через
     display: contents — .to_animate (заголовок+текст) и form.quote-form
     становятся прямыми grid-item'ами row'а; тогда picture-колонку через
     order:2 ставим между ними. */
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > [class*="col-"]:not(:has(picture)) {
    display: contents;
  }
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > .to_animate,
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > [class*="col-"]:not(:has(picture)) > .to_animate { order: 1; }
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > [class*="col-"]:has(picture) { order: 2; }
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > form,
  .bl.section_padding_100:has(picture) .row:has(> [class*="col-"] > picture) > [class*="col-"]:not(:has(picture)) > form { order: 3; }
}

/* ── Блок «Готовые решения для бизнеса» (.solution) ────────────────────────
   Раньше блок был описан в service.css и corporate.css почти построчно
   (~35 строк × 2). Общий каркас: контейнер, 2-колоночная сетка, карточка,
   типографика, цена-акцент, CTA-строка. */
.newtemplate .solution,
.corp-page .solution {
  max-width: var(--ds-container, 1440px); margin: 56px auto 0;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}
.newtemplate .solution p.h2, .newtemplate .solution .h2 { text-align: center; }
.newtemplate .solution .row.my-row,
.corp-page .solution .row.my-row {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin: 0;
}
.newtemplate .solution .col-sm-6,
.corp-page .solution .col-sm-6 { width: auto; max-width: none; float: none; }
/* Карточка (фон/рамка/радиус — .ds-card). Здесь только padding. */
.newtemplate .solution .row.my-row > .col-sm-6 { padding: 28px 28px 40px; box-sizing: border-box; margin: 0; }
.corp-page .solution .row.my-row > .col-sm-6  { padding: 24px 26px; box-sizing: border-box; margin: 0; }
/* Внутри карточки: заголовки и «цена/акцент» */
.newtemplate .solution .sol-card,
.corp-page .solution .sol-card { display: flex; flex-direction: column; align-items: flex-start; text-align: left; height: 100%; }
.newtemplate .solution .sol-card > *,
.corp-page .solution .sol-card > * { text-align: left; align-self: flex-start; margin-left: 0; }
.newtemplate .solution .sol-card .h3,
.newtemplate .solution .col-sm-6 .h3,
.newtemplate .solution .col-sm-6 strong,
.corp-page .solution .col-sm-6 h2, .corp-page .solution .col-sm-6 h3,
.corp-page .solution .col-sm-6 .h2, .corp-page .solution .col-sm-6 .h3,
.corp-page .solution .col-sm-6 strong {
  font: var(--ds-fw-medium) var(--ds-h5)/var(--ds-h5-lh) var(--ds-font);
  color: var(--ds-text); margin: 0 0 8px; display: block;
}
.newtemplate .solution .sol-card .alt,
.newtemplate .solution .col-sm-6 p:last-child,
.newtemplate .solution [class*="price"],
.corp-page .solution .col-sm-6 p:last-child,
.corp-page .solution [class*="price"], .corp-page .solution .red {
  color: var(--ds-brand); font-weight: var(--ds-fw-medium);
}
.newtemplate .solution .sol-card .alt,
.newtemplate .solution .col-sm-6 p:last-child { margin-top: auto; padding-top: 14px; }
.newtemplate .solution .sol-card .alt span,
.newtemplate .solution .col-sm-6 p span { color: var(--ds-brand); font-weight: var(--ds-fw-semibold); }
/* CTA-строка снизу */
.newtemplate .solution .my-d-flex,
.corp-page .solution .my-d-flex {
  display: flex; justify-content: center; gap: 16px; margin-top: 28px; flex-wrap: wrap;
}
/* Мобилка */
@media (max-width: 767px) {
  .newtemplate .solution .row.my-row,
  .corp-page .solution .row.my-row { grid-template-columns: 1fr; }
  .corp-page .solution .my-d-flex { flex-direction: column; gap: 12px; margin-top: 24px; padding: 0; }
  .corp-page .solution .my-d-flex .button,
  .corp-page .solution .my-d-flex .button-red,
  .corp-page .solution .my-d-flex a { width: 100%; margin: 0; box-sizing: border-box; justify-content: center; }
}

/* ── Блок «Наши гарантии» (.our_guarantees) ─────────────────────────────────
   Раньше две независимые реализации в services.css и uslugi.css. Единый компонент. */
.our_guarantees,
.corp-page .our_guarantees {
  max-width: var(--ds-container, 1440px); margin-left: auto; margin-right: auto;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}
.our_guarantees .pixel-guarantees { max-width: var(--ds-content); margin: 0 auto; padding: 0; }
.our_guarantees .pixel-guarantees__list {
  display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: 20px !important; margin: 0;
}
/* Карточка: фон/рамка/радиус — компонент .ds-card. Здесь раскладка + hover.
   !important нужен: в разметке чанка есть инлайновый <style> с .pixel-guarantees__list .item{display:grid;...} */
.our_guarantees .pixel-guarantees__item {
  padding: 32px 24px; margin: 0; box-sizing: border-box;
  display: flex !important; flex-direction: column !important; align-items: center !important; text-align: center;
  transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;
}
.our_guarantees .pixel-guarantees__item:hover {
  transform: translateY(-6px); border-color: var(--ds-brand); box-shadow: var(--ds-shadow-card);
}
/* Иконка в скруглённом бейдже (!important — инлайновый <style> в разметке даёт 124×124) */
.our_guarantees .item__image {
  width: 84px !important; height: 84px !important; box-sizing: border-box;
  border-radius: 20px; margin: 0 auto 20px !important;
  background: var(--ds-brand-soft); color: var(--ds-brand);
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .22s ease, transform .22s ease;
}
.our_guarantees .item__image img,
.our_guarantees .item__image svg { width: 40px !important; height: 40px !important; }
.our_guarantees .item__image span { display: inline-flex; color: var(--ds-brand); }
.our_guarantees .pixel-guarantees__item:hover .item__image {
  background: var(--ds-brand); transform: rotate(-6deg) scale(1.06);
}
/* !important — перебивает инлайновый color:var(--ds-brand) на span,
   иначе на hover иконка (stroke:currentColor) остаётся на цвете бренда */
.our_guarantees .pixel-guarantees__item:hover .item__image span,
.our_guarantees .pixel-guarantees__item:hover .item__image svg { color: var(--ds-on-brand) !important; }
.our_guarantees .item__title {
  font: var(--ds-fw-medium) 20px / 1.3 var(--ds-font); color: var(--ds-text); margin: 0 0 10px;
  width: 100%; text-wrap: balance; overflow-wrap: break-word; hyphens: none;
}
.our_guarantees .item__subtitle {
  font: var(--ds-fw-regular) var(--ds-body-m) / var(--ds-body-m-lh) var(--ds-font);
  color: var(--ds-text-2); margin: 0; width: 100%; text-wrap: pretty;
}
@media (max-width: 900px) { .our_guarantees .pixel-guarantees__list { grid-template-columns: repeat(2, 1fr) !important; } }
@media (max-width: 560px) { .our_guarantees .pixel-guarantees__list { grid-template-columns: 1fr !important; } }

/* ── Блок «Наши клиенты» (.clients) ────────────────────────────────────────
   Сетка логотипов-плиток. Компонент: контейнер, заголовок, сетка 4-3-2,
   фон-логотип. Раньше блок был в services.css со схожей стилизацией в corp. */
.bl:has(.clients) > .clients,
.container-fluid:has(.clients) > .clients,
.clients {
  max-width: var(--ds-container, 1440px); margin: 0 auto;
  padding: 44px var(--ds-gutter); box-sizing: border-box;
}
.clients > p.h2 {
  font: var(--ds-fw-medium) var(--ds-h2)/var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); text-transform: none; text-align: center; margin: 0 0 10px;
}
.clients .pod-text {
  font: var(--ds-fw-regular) var(--ds-body-m)/var(--ds-body-m-lh) var(--ds-font);
  color: var(--ds-text-2); text-align: center; max-width: 720px; margin: 0 auto 34px;
}
.clients .row:has(.client) {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 32px; margin: 0;
}
/* ── Мега-меню «Корпоративным клиентам» — зелёная тема ────────────────────
   Верхнее меню — общее (красный бренд), но конкретный dropdown корп-раздела
   переопределяет токен `--ds-brand` на зелёный. Работает через :has() — CSS
   узнаёт нужный <li> по ссылке `korporativnym-klientam`. Красная кнопка
   «Подробнее» в правой колонке использует хардкод rgb(239,68,68) — форсим
   на токен, чтобы тоже была зелёной. */
.newhead li:has(> a[href*="korporativnym-klientam"]) {
  --ds-brand: #115e59;
  --ds-brand-hover: #0f4c47;
  --ds-brand-soft: #ecfdf5;
  --ds-brand-rgb: 17, 94, 89;
  --ds-accent: #115e59;
}
.newhead li:has(> a[href*="korporativnym-klientam"]) .hiddenly a:hover,
.newhead li:has(> a[href*="korporativnym-klientam"]) .persent a:hover,
.newhead li:has(> a[href*="korporativnym-klientam"]) .hover-red { color: var(--ds-brand) !important; }
.newhead li:has(> a[href*="korporativnym-klientam"]) .more {
  background-color: var(--ds-brand) !important;
  border-color: var(--ds-brand) !important;
}
.newhead li:has(> a[href*="korporativnym-klientam"]) .more:hover {
  background-color: var(--ds-brand-hover) !important;
}

/* .client — плашка-логотип: изображение бренда полностью заливает плашку
   (аспект 348/220 = точная пропорция файлов), скруглённые углы 20px.
   По умолчанию ч/б, при наведении — цвет и лёгкий подъём. */
.clients .client {
  width: auto !important; max-width: none !important; padding: 0; margin: 0;
  float: none !important; box-sizing: border-box !important;
  aspect-ratio: 348 / 220; height: auto !important; min-height: 0;
  background-size: cover; background-repeat: no-repeat; background-position: center;
  background-color: transparent; overflow: hidden;
  border-radius: var(--ds-r-card, 20px);
  filter: grayscale(1); opacity: .85;
  transition: filter .25s ease, opacity .25s ease, box-shadow .2s ease, transform .2s ease;
}
.clients .client:hover {
  filter: grayscale(0); opacity: 1;
  box-shadow: var(--ds-shadow-soft); transform: translateY(-2px);
}
/* Планшет: 3 колонки — на 8 плашек 3-3-2 (последний ряд короче) */
@media (max-width: 900px) {
  .clients .row:has(.client) {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 20px;
  }
}
/* Мобилка ≤560px: 2 колонки — плашки вдвое крупнее, лого читаются */
@media (max-width: 560px) {
  .bl:has(.clients) > .clients { padding: 16px; }
  .clients .row:has(.client) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
  }
}

/* ── Типографика внутри .autopark .auto-card ───────────────────────────────
   3 копии в content.css (страница /avtopark/) и services.css. */
.autopark .auto-card p.auto {
  font: var(--ds-fw-semibold) 18px/1.25 var(--ds-font) !important;
  color: var(--ds-text) !important; margin: 0 !important;
}
.autopark .auto-card p.small {
  font: var(--ds-fw-regular) var(--ds-body-s)/1.45 var(--ds-font) !important;
  color: var(--ds-text-3) !important; margin: 0 !important;
}
.autopark .auto-card p.about-auto,
.autopark .auto-card p.about-bold {
  font: var(--ds-fw-medium) var(--ds-body-s)/1.4 var(--ds-font) !important;
  color: var(--ds-text-2) !important; margin: 4px 0 2px !important;
  text-transform: none;
}

/* ── Блок «Наш автопарк» (.autopark) ───────────────────────────────────────
   Раньше блок был описан 3 раза: в service.css (страницы услуг), corporate.css
   (корп) и services.css (страница /o-kompanii/avtopark/) — 45+ правил суммарно.
   Общий каркас (контейнер, 3-колоночная сетка, карточка-колонка, фото сверху,
   типографика в карточке, кнопка) — здесь. Специфика (какие именно фото машин
   ставятся ::before) остаётся в service.css / corporate.css / services.css.
   ────────────────────────────────────────────────────────────────────────── */
.autopark {
  max-width: var(--ds-container, 1440px); margin: 56px auto 0;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}
.autopark .row.my-row {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin: 0;
}
/* Карточка-колонка. Фон/рамка/радиус — компонент .ds-card. */
.autopark .row.my-row > [class*="col-"] {
  width: auto; max-width: none; float: none;
  padding: 24px 26px; box-sizing: border-box; margin: 0;
  display: flex; flex-direction: column;
}
/* Фото машины — сверху карточки; URL картинки задаёт страница отдельно */
.autopark .row.my-row > [class*="col-"]::before {
  content: ""; display: block; flex: 0 0 auto;
  width: 100%; aspect-ratio: 360 / 254;
  margin: 0 0 16px; border-radius: var(--ds-r-md, 16px);
  background: var(--ds-brand-soft) center / cover no-repeat;
}
:root[data-theme="dark"] .autopark .row.my-row > [class*="col-"]::before { background-color: var(--ds-surface-alt); }
/* Фото машин (одинаково на страницах услуг и корп-странице) */
.autopark .row.my-row > [class*="col-"]:nth-child(1)::before { background-image: url('/assets/template/newdesign/images/corp/car1.png'); }
.autopark .row.my-row > [class*="col-"]:nth-child(2)::before { background-image: url('/assets/template/newdesign/images/corp/car2.png'); }
.autopark .row.my-row > [class*="col-"]:nth-child(3)::before { background-image: url('/assets/template/newdesign/images/corp/car3.png'); }
/* Прячем встроенный «.img» (в разметке идёт как фон, у нас реальные фото ::before) */
.autopark .auto-card .img { display: none; }

/* Типографика внутри карточки */
.autopark [class*="col-"] h2,
.autopark [class*="col-"] h3,
.autopark [class*="col-"] .h3,
.autopark [class*="col-"] strong,
.autopark [class*="col-"] p.auto {
  font: var(--ds-fw-medium) var(--ds-h5)/var(--ds-h5-lh) var(--ds-font);
  color: var(--ds-text); margin: 0 0 8px; display: block;
}
.autopark [class*="col-"] p {
  color: var(--ds-text-2);
  font-size: var(--ds-body-m); line-height: var(--ds-body-m-lh);
  margin: 0 0 6px;
}
.autopark [class*="col-"] p:last-of-type { margin-bottom: 16px; }

/* Кнопка «Заказать машину» — компонент .ds-btn; здесь только положение */
.autopark .button, .autopark a.button,
.autopark .button-red, .autopark a.button-red {
  margin-top: auto; align-self: flex-start;
}

/* Мобилка: одна колонка, кнопка на всю ширину */
@media (max-width: 900px) {
  .autopark .row.my-row { grid-template-columns: 1fr; }
  .autopark .button, .autopark .button-red { align-self: stretch; text-align: center; justify-content: center; }
}

/* ── .section_header (заголовок секции) ────────────────────────────────────
   Одно правило вместо ~6 копий (framed-heading / testimonials-carousel /
   faq_wrapper / reviews-carousel / vacancies_template и т.п.). */
.section_header,
.framed-heading .section_header,
.container:has(.testimonials-carousel) .section_header,
.container:has(.faq_wrapper) .section_header,
.container:has(.table-wrapper) .section_header,
.bl.section_padding_40:has(.reviews-carousel) > .container .section_header,
.corp-page > h2.section_header, .corp-page > .section_header,
body > .section_header, section.ls .section_header, .ls > .section_header,
.vacancies_template .page_testimonials .section_header,
.reviews-section .section_header {
  font-family: var(--ds-font); font-weight: var(--ds-fw-medium);
  color: var(--ds-text); text-transform: none; letter-spacing: -.01em;
}
/* Все .section_header — единый размер --ds-h2. Раньше подвыборки (FAQ,
   testimonials-carousel, table-wrapper, reviews) шли на --ds-h4, из-за чего
   на мобилке заголовки секций были разнокалиберные. */
.section_header { font-size: var(--ds-h2); line-height: var(--ds-h2-lh); }

/* ── .my-container-lg / -xl (легаси bootstrap-обёртка «сброс контейнера») ──
   `max-width: none; padding: 0` — раньше 5 копий по service/corporate.
   body-префикс — чтобы бить общий .container { padding: 0 gutter } из
   компонента контейнера выше. */
body .newtemplate .switch .my-container-lg,
body .newtemplate .solution .my-container-lg,
body .autopark .my-container-xl, body .autopark .my-container-lg,
body .corp-page .solution .my-container-lg { max-width: none; padding: 0; }

/* ── Адаптивный гутер контейнера ──────────────────────────────────────────
   На узких вьюпортах — компактнее (24 → 16). Одним правилом вместо десятка. */
@media (max-width: 760px) {
  .container > div:has(> .row.columns_margin_bottom_20),
  .container:has(.framed-heading),
  .container:has(.table-wrapper),
  .container:has(p.grey.text-center),
  .container:has(.testimonials-carousel),
  .bl.section_padding_40 > .container { padding-left: 24px; padding-right: 24px; }
}
@media (max-width: 460px) {
  .container > div:has(> .row.columns_margin_bottom_20),
  .container:has(.framed-heading),
  .container:has(.table-wrapper),
  .container:has(p.grey.text-center),
  .container:has(.testimonials-carousel),
  .bl.section_padding_40 > .container,
  .intro_section2_ux > .container { padding-left: 16px; padding-right: 16px; }
}

/* ── Абзацы в 2-колоночных карточках .solution / .autopark ─────────────────
   4 копии одного правила: body-m + text-2, margin. */
.newtemplate .solution .col-sm-6 p,
.corp-page .solution .col-sm-6 p,
.newtemplate .autopark [class*="col-"] p,
.corp-page .autopark [class*="col-"] p {
  color: var(--ds-text-2);
  font-size: var(--ds-body-m); line-height: var(--ds-body-m-lh);
  margin: 0 0 6px;
}

/* ── Контентная типографика ────────────────────────────────────────────────
   Общий скоуп для «текстовых» контейнеров: `.text-cont` (страницы услуг,
   статьи), `.corp-page .bl.section_padding_40` (корп-контент), `.container.order`
   (форма-менеджер), `.vacancies_template` (Вакансии).

   Заголовки идут по одной шкале, абзац — body-l, буллиты — брендовые кружки.
   Раньше это же было описано отдельно в service.css / vacancies.css /
   corporate.css / content.css. */
/* .container.order сюда не входит — у неё свои padding (24px var(--ds-gutter))
   выше в файле, иначе поля формы прижимались бы к краю экрана на мобилке. */
.newtemplate .text-cont,
.corp-page .bl.section_padding_40,
.vacancies_template .text-cont { padding: 8px 0 8px; }

/* h2 контента / .h2 в вакансиях */
.newtemplate .text-cont h2,
.container.order h2, .container.order .h2, .container.order p.h2,
.vacancies_template .h2,
.corp-page .bl.section_padding_40 h2 {
  font: var(--ds-fw-medium) var(--ds-h2)/var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); letter-spacing: -.01em; margin: 40px 0 20px;
}

/* h3 */
.newtemplate .text-cont h3,
.vacancies_template .h3:not(.card .h3),
.corp-page .bl.section_padding_40 h3 {
  font: var(--ds-fw-medium) var(--ds-h4)/var(--ds-h4-lh) var(--ds-font);
  color: var(--ds-text); margin: 28px 0 12px;
}

/* Абзац контента */
.newtemplate .text-cont p,
.corp-page .bl.section_padding_40 p {
  font: var(--ds-fw-regular) var(--ds-body-l)/1.7 var(--ds-font);
  color: var(--ds-text-2); margin: 0 0 14px;
}

/* Ссылки в контентной области — бренд + ВСЕГДА подчёркивание (стандартная
   аффорданс-подсказка «это ссылка»); hover — brand-hover.
   Кнопки (a.button/.theme_button/.ds-btn) исключены — иначе текст на брендовой
   подложке кнопки красится в тот же бренд и становится невидимым (баг был на
   .theme_button в таблицах цен). Аналогично исключаем .tags-cloud__tag — это
   бейджи-«пилюли», их цвет управляет компонент .ds-badge. */
.newtemplate .text-cont a:not([class*="button"]):not(.ds-btn):not(.theme_button):not(.tags-cloud__tag),
.corp-page .bl.section_padding_40 a:not([class*="button"]):not(.ds-btn):not(.theme_button):not(.tags-cloud__tag) {
  color: var(--ds-brand); text-decoration: underline; text-underline-offset: 2px;
}
.newtemplate .text-cont a:not([class*="button"]):not(.ds-btn):not(.theme_button):not(.tags-cloud__tag):hover,
.corp-page .bl.section_padding_40 a:not([class*="button"]):not(.ds-btn):not(.theme_button):not(.tags-cloud__tag):hover {
  color: var(--ds-brand-hover);
}

/* Списки — фирменный буллит-круг */
.newtemplate .text-cont ul,
.corp-page .bl.section_padding_40 ul { list-style: none; margin: 6px 0 24px; padding: 0 0 0 14px; }
.newtemplate .text-cont ul li,
.corp-page .bl.section_padding_40 ul li {
  position: relative; padding: 0 0 16px 30px;
  font: var(--ds-fw-regular) var(--ds-body-m)/1.6 var(--ds-font);
  color: var(--ds-text-2);
}
.newtemplate .text-cont ul li:last-child { padding-bottom: 0; }
.newtemplate .text-cont ul li::before,
.corp-page .bl.section_padding_40 ul li::before {
  content: ""; position: absolute; left: 0; top: 5px;
  width: 16px; height: 16px; border-radius: 50%; background: var(--ds-brand-soft);
}
.newtemplate .text-cont ul li::after,
.newtemplate .text-cont ul.red-list li::after,
.corp-page .bl.section_padding_40 ul li::after {
  content: ""; position: absolute; left: 5px; top: 9px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--ds-brand);
}

/* Мобилка — заголовки контентных секций остаются на --ds-h2 (28px), единый
   размер со всеми section_header на сайте. Раньше здесь h2 ужимался до h4
   (23px), из-за чего внутри страниц услуг заголовки были разнокалиберные. */
@media (max-width: 900px) {
  .newtemplate .text-cont h2,
  .container.order h2, .container.order .h2, .container.order p.h2,
  .vacancies_template .h2,
  .corp-page .bl.section_padding_40 h2 { margin: 28px 0 14px; }
}

/* ── Табы (Bootstrap nav-pills, легаси-разметка .switch .nav-pills) ────────
   Подчёркнутые вкладки: hover/active — бренд. Общее правило для страниц услуг
   (.newtemplate) и корп-страницы (.corp-page). Раньше блок был продублирован. */
.newtemplate .switch .nav-pills,
.corp-page .switch .nav-pills {
  display: flex; flex-wrap: wrap; gap: 4px; list-style: none;
  padding: 0; margin: 0 0 24px;
  border: 0; border-bottom: 2px solid var(--ds-border);
}
.newtemplate .switch .nav-pills > li,
.corp-page .switch .nav-pills > li { margin: 0 0 -2px; float: none; list-style: none; }
.newtemplate .switch .nav-pills > li > a,
.newtemplate .switch .nav-pills .nav-link,
.corp-page .switch .nav-pills > li > a,
.corp-page .switch .nav-pills .nav-link {
  display: inline-flex; align-items: center; padding: 12px 20px; border-radius: 0;
  background: transparent; color: var(--ds-text-2);
  border: 0; border-bottom: 3px solid transparent; cursor: pointer;
  text-decoration: none; font: var(--ds-fw-medium) var(--ds-body-l)/1 var(--ds-font);
  transition: color var(--ds-transition), border-color var(--ds-transition);
}
.newtemplate .switch .nav-pills > li > a:hover,
.newtemplate .switch .nav-pills > li.active > a,
.newtemplate .switch .nav-pills .nav-link.active,
.corp-page .switch .nav-pills > li > a:hover,
.corp-page .switch .nav-pills > li.active > a,
.corp-page .switch .nav-pills .nav-link.active {
  background: transparent; color: var(--ds-brand); border-bottom-color: var(--ds-brand);
}
/* Табы: мобилка — горизонтальный скролл */
@media (max-width: 767px) {
  .newtemplate .switch .nav-pills,
  .corp-page .switch .nav-pills {
    flex-wrap: nowrap; overflow-x: auto; gap: 0; margin: 0 0 18px;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .newtemplate .switch .nav-pills::-webkit-scrollbar,
  .corp-page .switch .nav-pills::-webkit-scrollbar { display: none; }
}

/* ── Блок «Рекомендательные письма» (.letters + slick) ─────────────────────
   Полный компонент: контейнер, заголовок, нативная раскладка slick (сам
   slick.css удалён — используем свою минимальную раскладку), стрелки,
   карточка с фото и подписью. Раньше блок был описан 2 раза (service.css
   для страниц услуг и corporate.css) — ~30 строк дубля. */
.letters {
  position: relative; max-width: var(--ds-container, 1440px);
  margin: 56px auto 64px;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}
.letters .h2, .letters p.h2 {
  font: var(--ds-fw-medium) var(--ds-h2)/var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); text-align: center; margin: 0 0 26px;
}
.letters .letter-slider, .letters .row { margin: 0; }
.letters .slider-item { padding: 0 8px; box-sizing: border-box; }
/* нативная раскладка slick — сам slick.css удалён, оставляем минимум */
.letters .slick-slider { position: relative; display: block; box-sizing: border-box; }
.letters .slick-list { position: relative; display: block; overflow: hidden; margin: 0; padding: 0; }
.letters .slick-track { position: relative; top: 0; left: 0; display: block; margin: 0 auto; }
.letters .slick-track::before, .letters .slick-track::after { display: table; content: ''; }
.letters .slick-track::after { clear: both; }
.letters .slick-slide { display: none; float: left; height: auto; min-height: 1px; }
.letters .slick-initialized .slick-slide { display: block; }
.letters .slick-slide, .letters .slider-item { height: auto; }
/* стрелки — компонент .ds-carousel__btn (алиас .slick-arrow); здесь только размер */
.letters .slick-arrow { width: 44px; height: 44px; top: 42%; z-index: 3; }
.letters .slick-prev { left: 4px; }
.letters .slick-next { right: 4px; }
.letters .slick-dots li.slick-active button::before { color: var(--ds-brand) !important; }
/* фото документа — целиком, ФОН всегда белый (сканы писем) */
.letters .let-img {
  background: #fff !important; background-image: none !important;
  height: 380px; display: flex; align-items: center; justify-content: center;
  overflow: hidden; padding: 12px; box-sizing: border-box;
}
/* подпись под фото */
.letters .letter > p {
  margin: 0; padding: 14px 16px; text-align: center;
  font: var(--ds-fw-medium) var(--ds-body-m)/1.3 var(--ds-font);
  color: var(--ds-text); border-top: 1px solid var(--ds-border);
  background: var(--ds-surface);
}
/* дата письма (как на проде, страница «О компании») — под подписью */
.letters .letter > .letter__date {
  display: block; margin: -8px 0 0; padding: 0 16px 14px; text-align: center;
  font: var(--ds-fw-regular) var(--ds-body-s) / var(--ds-body-s-lh) var(--ds-font);
  color: var(--ds-text-3); background: var(--ds-surface);
}
.letters .letter > .letter__text { padding: 0 16px 14px; font: var(--ds-fw-regular) var(--ds-body-s) / var(--ds-body-s-lh) var(--ds-font); color: var(--ds-text-2); }
/* Тёмная тема: раньше подложка + рамка карточки письма были тонированы зелёным
   (наследие старой темы). Фон/цвет наследуем от DS-поверхности (базовое правило),
   рамка/подпись — брендовая красная (объединено ниже вместе с .letter). */
/* мобилка */
@media (max-width: 600px) {
  .letters { margin-bottom: 40px; }
  .letters .slider-item { padding: 0 4px; }
  .letters .let-img { height: 340px; }
}

/* Карточка письма — тонкая рамка + тень (унаследовано от старой версии) */
.letters .letter {
  background: var(--ds-surface); border: 1px solid var(--ds-border); border-radius: 16px;
  overflow: hidden; box-shadow: 0 8px 24px rgba(2, 6, 23, .08);
  display: flex; flex-direction: column;
}
.letters .let-img img {
  max-width: 100%; max-height: 100%; width: auto; height: auto;
  object-fit: contain; border: 0; box-shadow: none; border-radius: 0;
}
:root[data-theme="dark"] .letters .letter,
:root[data-theme="dark"] .letters .letter > p { border-color: rgba(var(--ds-brand-rgb), .30); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .letters .letter,
  :root:not([data-theme="light"]) .letters .letter > p { border-color: rgba(var(--ds-brand-rgb), .30); }
}

/* ── Блок «Отзывы Яндекс» (.reviews-soc) ────────────────────────────────────
   CSS-звёзды (без sprite-шрифта) + плашка «Яндекс Карты». Общее для страниц
   услуг (.uslugi-i-tseny) и корп. */
.reviews-soc__stars,
.corp-page .reviews-soc__stars { position: relative; width: 108px; height: 20px; }
.reviews-soc__stars::before,
.corp-page .reviews-soc__stars::before {
  content: "★★★★★"; position: absolute; inset: 0;
  color: var(--ds-border-soft); font-size: 19px; line-height: 20px;
  letter-spacing: 3px; white-space: nowrap;
}
.reviews-soc__stars > div,
.corp-page .reviews-soc__stars > div { position: relative; height: 100%; overflow: hidden; }
.reviews-soc__stars > div::before,
.corp-page .reviews-soc__stars > div::before {
  content: "★★★★★"; position: absolute; inset: 0;
  color: #fbbf24; font-size: 19px; line-height: 20px;
  letter-spacing: 3px; white-space: nowrap;
}
.reviews-soc__logo .ya-badge,
.corp-page .reviews-soc__logo .ya-badge {
  display: inline-flex; align-items: center; gap: 9px;
  font-family: var(--ds-font); font-weight: var(--ds-fw-medium);
  font-size: var(--ds-body-m); color: var(--ds-text); white-space: nowrap;
}
.ya-badge__ya {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 50%;
  background: #fc3f1d; color: #fff;
  font-weight: 700; font-size: 18px; line-height: 1;
  font-family: Arial, "Helvetica Neue", sans-serif;
}
.ya-badge__logo { display: block; flex: 0 0 auto; width: 30px; height: 30px; object-fit: contain; }

/* ── Подзаголовок секции (.pod-text) ───────────────────────────────────────
   Один центрированный подзаголовок под .h2/.section_header в .solution / .autopark. */
.pod-text,
.newtemplate .solution .pod-text,
.newtemplate .autopark .pod-text,
.corp-page .solution .pod-text,
.corp-page .autopark .pod-text {
  color: var(--ds-text-2); font-size: var(--ds-body-m);
  margin: 0 auto 24px; max-width: 720px; text-align: center;
}

/* ── Хлебные крошки ────────────────────────────────────────────────────────
   Одинаковые на всех страницах. Разметка: <section class="page_breadcrumbs">
   → h1 + <ul class="B_crumbBox">. У Вакансий обёртка .vacancies-crumbs —
   подключаем алиасом. */
.page_breadcrumbs,
.vacancies_template .vacancies-crumbs {
  font-family: var(--ds-font); color: var(--ds-text);
  background: transparent;
  /* Верхний отступ = как у страниц услуг («эталон»). Иначе секции с крошками
     на «страницах компании» (Контакты, Оплата и т.п.) сидели на 20 px ниже. */
  padding: 24px 0 4px;
}
.page_breadcrumbs > .container {
  max-width: var(--ds-content); margin: 0 auto; width: 100%;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}
/* H1 в шапке страницы — ЕДИНЫЙ на всём сайте (эталон — страницы услуг:
   `.newtemplate .main .h1`). Легаси-класс `.text-uppercase dark` на «страницах
   компании» (Контакты, Оплата, Фото, FAQ, Автопарк, Статьи) давал UPPERCASE
   и другую типографику — сбрасываем text-transform и приводим к эталону.
   Специфичность правила приподнята через тег и класс, чтобы бить те легаси. */
.page_breadcrumbs h1,
section.page_breadcrumbs h1.text-uppercase,
section.page_breadcrumbs h1.dark,
.page_breadcrumbs .h1,
.newtemplate .main h1,
.newtemplate .main .h1 {
  font: var(--ds-fw-semibold) var(--ds-h1)/var(--ds-h1-lh) var(--ds-font);
  color: var(--ds-text); letter-spacing: -.01em;
  margin: 0 0 12px; max-width: 820px;
  text-transform: none;
}
/* На средних экранах уменьшаемся до H3, чтобы не разрывать строку */
@media (max-width: 900px) {
  .page_breadcrumbs h1,
  section.page_breadcrumbs h1.text-uppercase,
  section.page_breadcrumbs h1.dark,
  .page_breadcrumbs .h1,
  .newtemplate .main h1,
  .newtemplate .main .h1 { font: var(--ds-fw-semibold) var(--ds-h3)/1.15 var(--ds-font); }
}

.B_crumbBox,
.vacancies-crumbs .B_crumbBox {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  font: var(--ds-fw-regular) var(--ds-body-m)/var(--ds-body-m-lh) var(--ds-font);
}
.B_crumbBox li { display: inline-flex; align-items: center; gap: 8px; margin: 0; list-style: none; }
.B_crumbBox li:not(:last-child)::after { content: "/"; color: var(--ds-text-3); }
/* Специфичность усилена (0,3,1), чтобы перебивать легаси-правила ссылок в
   контентных секциях: `section.ls .col-sm-12 a:not(...)` в content.css красит
   ЛЮБУЮ ссылку внутри контентной колонки в бренд. */
.page_breadcrumbs .B_crumbBox a,
.vacancies_template .vacancies-crumbs .B_crumbBox a { color: var(--ds-text-3); text-decoration: none; transition: color var(--ds-transition); }
.page_breadcrumbs .B_crumbBox a:hover,
.page_breadcrumbs .B_crumbBox a:focus,
.vacancies_template .vacancies-crumbs .B_crumbBox a:hover,
.vacancies_template .vacancies-crumbs .B_crumbBox a:focus { color: var(--ds-brand); text-decoration: none; }
.B_crumbBox li:last-child span { color: var(--ds-text-2); }

@media (max-width: 600px) {
  .page_breadcrumbs { padding-top: 28px; }
  /* Мобильный H1 фиксирован 28px явно (а не через `--ds-h2`), чтобы не
     зависеть от локальных переопределений токена внутри `.newtemplate`
     (service.css при ≤760px опускает `--ds-h2` до 28px) — иначе на страницах,
     где service.css не подключён, H1 давал бы дефолтные 50px.
     Класс-варианты `.text-uppercase` и `.dark` перечислены явно, чтобы
     специфичность совпала с базовыми `section.page_breadcrumbs h1.dark` из
     этого же файла — иначе базовые правила при `≤900px` (там `--ds-h3` мобилки
     = 25px) выигрывали и H1 отображался 25px. */
  section.page_breadcrumbs h1,
  section.page_breadcrumbs h1.text-uppercase,
  section.page_breadcrumbs h1.dark,
  .newtemplate .main h1,
  .newtemplate .main .h1 { font: var(--ds-fw-semibold) 28px/1.15 var(--ds-font); }
}

/* ── ПРОИЗВОДИТЕЛЬНОСТЬ: content-visibility на секциях ниже фолда ───────────
   Chrome 85+ / Firefox 125+ / Safari 18+ пропускают layout+paint для секций,
   которые не в вьюпорте, пока пользователь до них не докрутит. Для остальных
   свойство — no-op (силовой fallback не нужен). `contain-intrinsic-size`
   выделяет условную высоту, чтобы избежать CLS при появлении секции.
   Применяем только к «тяжёлым» блокам, которые ВСЕГДА ниже фолда: карусели
   отзывов, FAQ-аккордеон, теги-облако, футер-разделы городов/услуг. ── */
.reviews-carousel_wrapper,
.reviews-soc__wrapper,
.faq_wrapper.faq-accordion,
.tags-cloud,
.sities_mo_block { content-visibility: auto; contain-intrinsic-size: 1px 800px; }

/* ── Поле формы ────────────────────────────────────────────────────────────
   Эталон — форма первого экрана Главной: высота 56, радиус 16, отступ 20.
   Класс ДОБАВЛЯЕТСЯ к существующим; `.form-control` — алиас, он уже стоит в
   разметке CMS почти во всех формах, поэтому HTML править не нужно.
   Исключение `.search_input` — поиск в шапке, у него свой безрамочный вид.
   Вид и ВСЕ состояния описаны только здесь; страницы меняют лишь токены.
   ────────────────────────────────────────────────────────────────────────── */
.ds-field,
.form-control:not(.search_input),
.form__input {
  box-sizing: border-box; width: 100%; margin: 0;
  height: var(--ds-field-h);
  padding: 0 var(--ds-field-pad-x);
  font: var(--ds-fw-regular) var(--ds-body-m)/1.2 var(--ds-font);
  color: var(--ds-text);
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-field-r);
  box-shadow: none;
  transition: border-color var(--ds-transition), box-shadow var(--ds-transition);
}

/* Многострочное: высота по контенту, вертикальные отступы вместо центрирования */
textarea.ds-field,
textarea.form-control:not(.search_input) {
  height: var(--ds-field-h-ta);   /* перебивает атрибут rows — иначе высота пляшет */
  min-height: var(--ds-field-h-ta);
  padding: var(--ds-field-pad-y-ta) var(--ds-field-pad-x);
  line-height: 1.4; resize: vertical;
}

/* ── Состояния поля ────────────────────────────────────────────────────────
   Единственное место. Не дублировать по страницам — менять токены.
   ────────────────────────────────────────────────────────────────────────── */
.ds-field::placeholder,
.form-control:not(.search_input)::placeholder,
.form__input::placeholder { color: var(--ds-text-3); opacity: 1; }

.ds-field:hover,
.form-control:not(.search_input):hover,
.form__input:hover { border-color: var(--ds-text-3); }

.ds-field:focus,
.form-control:not(.search_input):focus,
.form__input:focus {
  outline: none; border-color: var(--ds-brand);
  box-shadow: 0 0 0 3px var(--ds-brand-soft);
}

/* Ошибка валидации (класс вешает наш JS) */
.ds-field.field-invalid,
.form-control.field-invalid,
.form__input.field-invalid {
  border-color: var(--ds-danger);
  box-shadow: 0 0 0 3px var(--ds-danger-soft);
}
/* Подпись под полем (всегда переносится на новую строку — flex-basis:100%
   на случай, если родитель поля — .input-group внутри flex-ряда формы). */
.field-error-msg {
  display: block; flex-basis: 100%; width: 100%;
  margin: 6px 2px 0; color: var(--ds-danger);
  font: var(--ds-fw-regular) var(--ds-body-s)/1.35 var(--ds-font);
}

.ds-field[disabled], .ds-field[readonly],
.form-control[disabled], .form__input[disabled] {
  opacity: .55; cursor: not-allowed; background: var(--ds-surface-alt);
}

/* ── Ритм полей формы (.form-group как обёртка поля) ──────────────────────────
   Единый вертикальный отступ между полями во всех формах: hero, модалки,
   формы страниц, комментарии. Раньше было объявлено ~10 раз в разных файлах
   с одним и тем же значением 14px. */
.ajax_form .form-group,
.fancybox-content:has(.ajax_form) .form-group,
#ajaxForm-mainForm .form-group,
.news-detail_comments .form-group,
#ajaxForm-reviewForm .form-group { margin: 0 0 14px; }
.ajax_form .form-group:last-of-type,
.fancybox-content:has(.ajax_form) form .form-group:last-of-type { margin-bottom: 0; }

/* ── Кастомный дропдаун-поле формы (.gpm-select как поле формы) ───────────────
   JS-обёртка над нативным <select>. Используется в калькуляторе грузчиков,
   форме доставки, форме грузо-перевозок. Раньше 5+ независимых реализаций
   (page-pixel-delivery.css, service.css, services.css) с разными высотами
   и стилями — сведены в один компонент, размер = .ds-field (56px).
   NB: `.newhead .gpm-select` — это ДРУГОЙ компонент (dropdown-меню городов),
   он inline-flex/без рамки и живёт в header-figma.css.
   ────────────────────────────────────────────────────────────────────────── */
.pixel-calculator .gpm-select,
.pixel-delivery .delivery__form .gpm-select,
.delivery__form .gpm-select,
.gpm-select--field {
  position: relative; display: block; width: 100%;
}
.pixel-calculator .gpm-select > select,
.pixel-delivery .delivery__form .gpm-select > select,
.delivery__form .gpm-select > select,
.gpm-select--field > select { display: none !important; }

.pixel-calculator .gpm-select__trigger,
.pixel-delivery .delivery__form .gpm-select__trigger,
.delivery__form .gpm-select__trigger,
.gpm-select--field .gpm-select__trigger {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; height: var(--ds-field-h);
  padding: 0 46px 0 var(--ds-field-pad-x);
  background: var(--ds-surface); color: var(--ds-text);
  border: 1px solid var(--ds-border); border-radius: var(--ds-field-r);
  font: var(--ds-fw-regular) var(--ds-body-m)/1.2 var(--ds-font);
  cursor: pointer; text-align: left; box-sizing: border-box; position: relative;
  transition: border-color var(--ds-transition), box-shadow var(--ds-transition);
}
.pixel-calculator .gpm-select__trigger:hover,
.pixel-delivery .delivery__form .gpm-select__trigger:hover,
.delivery__form .gpm-select__trigger:hover,
.gpm-select--field .gpm-select__trigger:hover { border-color: var(--ds-brand); }

.pixel-calculator .gpm-select.open .gpm-select__trigger,
.pixel-delivery .delivery__form .gpm-select.open .gpm-select__trigger,
.delivery__form .gpm-select.open .gpm-select__trigger,
.gpm-select--field.open .gpm-select__trigger {
  border-color: var(--ds-brand); box-shadow: 0 0 0 3px var(--ds-brand-soft);
}

.pixel-calculator .gpm-select__label.is-placeholder,
.pixel-delivery .delivery__form .gpm-select__label.is-placeholder,
.delivery__form .gpm-select__label.is-placeholder,
.gpm-select--field .gpm-select__label.is-placeholder { color: var(--ds-text-3); }

.pixel-calculator .gpm-select__chevron,
.pixel-delivery .delivery__form .gpm-select__chevron,
.delivery__form .gpm-select__chevron,
.gpm-select--field .gpm-select__chevron {
  position: absolute; right: 20px; top: 50%; margin-top: -3px;
  color: var(--ds-brand); opacity: 1;
}

/* Список пунктов (форм-версии): full-width поля */
.pixel-calculator .gpm-select__list,
.pixel-delivery .delivery__form .gpm-select__list,
.delivery__form .gpm-select__list,
.gpm-select--field .gpm-select__list {
  left: 0; right: 0; min-width: 0; width: 100%;
}
.pixel-calculator .gpm-select__item.is-placeholder,
.gpm-select--field .gpm-select__item.is-placeholder { display: none; }

/* Поле поиска внутри списка (dropdown с длинным списком) */
.pixel-delivery .gpm-select__search,
.gpm-select--field .gpm-select__search {
  display: block; width: calc(100% - 12px); box-sizing: border-box;
  margin: 2px 6px 8px; padding: 10px 12px; height: 40px;
  border: 1px solid var(--ds-border); border-radius: 10px;
  background: var(--ds-surface); color: var(--ds-text);
  font: var(--ds-fw-regular) var(--ds-body-s)/1.3 var(--ds-font);
  position: sticky; top: 0; z-index: 2;
  appearance: none; -webkit-appearance: none;
}
.pixel-delivery .gpm-select__search:focus,
.gpm-select--field .gpm-select__search:focus { outline: none; border-color: var(--ds-brand); }
.pixel-delivery .gpm-select__search::placeholder,
.gpm-select--field .gpm-select__search::placeholder { color: var(--ds-text-3); }

/* ── Чекбокс ───────────────────────────────────────────────────────────────
   Всегда НАТИВНЫЙ input с accent-color — кастомные боксы на ::before/::after
   криво выравниваются и разъезжаются между страницами. Алиасами подключены
   классы, которые уже стоят в разметке CMS.
   ────────────────────────────────────────────────────────────────────────── */
.ds-checkbox,
.ajax_form input[type="checkbox"],
.quote-form input[type="checkbox"],
.form__checkbox,
.calc__checkbox input[type="checkbox"],
.small-legal input[type="checkbox"],
.fancybox-content .small input[type="checkbox"],
.delivery__form input[type="checkbox"] {
  appearance: auto; -webkit-appearance: auto;
  position: static; opacity: 1; clip: auto;
  width: var(--ds-checkbox-size); height: var(--ds-checkbox-size);
  flex: 0 0 auto; margin: 0; padding: 0;
  accent-color: var(--ds-brand); cursor: pointer;
}
/* Невалидный чекбокс — подсвечиваем красным `--ds-danger`. Иначе на корп-странице
   (бренд = зелёный) невалидный чекбокс сохранял зелёный accent — визуально
   читалось как «валидно/успех», а не как ошибка. */
.ajax_form input[type="checkbox"].error,
.quote-form input[type="checkbox"].error,
.calc__checkbox input[type="checkbox"].error,
.small-legal input[type="checkbox"].error,
.fancybox-content .small input[type="checkbox"].error,
.delivery__form input[type="checkbox"].error,
.form__checkbox.error,
.ds-checkbox.error,
.main_form .small-legal > input[type="checkbox"].error {
  accent-color: var(--ds-danger) !important;
  outline: 2px solid var(--ds-danger); outline-offset: 1px;
}

/* Строка «чекбокс + подпись» */
.ds-check-label,
label.custom-legal,
label.small-legal,
.fancybox-content:has(.ajax_form) .small,
.payment .form__group_checkbox,
.banners_form .checkbox, .banners_form label.small,
.ajax_form .checkbox, .ajax_form label.checkbox-inline, .ajax_form .form-check,
label.calc__checkbox {
  display: flex; align-items: flex-start; gap: 10px; margin: 0; cursor: pointer;
  /* Если родитель — flex-строка формы, занимаем её целиком: иначе строка согласия
     сжимается по контенту и текст рвётся на 3-4 строки (было в «Помощи специалиста»). */
  flex: 1 1 100%; flex-wrap: wrap;
  /* line-height = высоте чекбокса: тогда при align-items:flex-start первая строка
     текста и чекбокс совпадают по центру ровно, без подгонки отступами.
     (Многострочное согласие при этом остаётся читаемым — 18px на 12px шрифт.) */
  font: var(--ds-fw-regular) var(--ds-body-s)/var(--ds-checkbox-size) var(--ds-font);
  color: var(--ds-text-3);
}
/* Чекбокс не сжимается + подпись занимает всю оставшуюся ширину строки —
   иначе при появлении ошибки текст согласия переносится на строку под чекбокс.
   Пропись «text-node → flex-basis 0» через первый span-обёртку не всегда работает
   (в разметке текст — TEXT NODE между <input> и <span class=error_>), поэтому
   растягиваем чекбокс+текст в одну flex-строку, а ошибка отдельно ниже. */
.ds-check-label > input[type="checkbox"],
label.custom-legal > input[type="checkbox"],
label.small-legal > input[type="checkbox"],
.fancybox-content:has(.ajax_form) .small > input[type="checkbox"],
.ajax_form .checkbox > input[type="checkbox"],
label.calc__checkbox > input[type="checkbox"] { flex: 0 0 auto; }
/* Текст рядом с чекбоксом (обёрнут в div/span) — должен растянуться на всю
   оставшуюся ширину строки и переноситься ВНУТРИ той же flex-строки, а не
   уходить целиком на следующую (это происходило с длинной подписью
   «Я согласен(-на) с политикой обработки персональных данных»). */
label.custom-legal > .custom-legal-text,
label.small-legal > .small-legal-text,
.ds-check-label > .ds-check-text { flex: 1 1 0; min-width: 0; }

/* Подпись ошибки внутри строки согласия — всегда на отдельной строке под чекбоксом,
   с order: 999, чтобы даже при появлении ошибки текст согласия остался на строке
   рядом с чекбоксом, а ошибка ушла в самый низ обёртки. Универсальное правило:
   любой label-обёртка чекбокса (small-legal, custom-legal, small, calc__checkbox,
   ds-check-label) — все её прямые span-ошибки уходят на новую строку. */
/* Ограничиваем до span/div — иначе селектор `.error` попадает на <input>,
   которому AjaxForm JS вешает `class="error"` (чекбокс уезжает на 100%
   ширины с order:999 → «сползает» под текст). */
.ds-check-label > span[class^="error_"],
.ds-check-label > span.error,
.ds-check-label > div[class^="error_"],
label.custom-legal > span[class^="error_"],
label.custom-legal > span.error,
label.small-legal > span[class^="error_"],
label.small-legal > span.error,
label.small > span[class^="error_"],
label.small > span.error,
label.calc__checkbox > span[class^="error_"],
label.calc__checkbox > span.error,
.fancybox-content:has(.ajax_form) .small > span[class^="error_"],
.fancybox-content:has(.ajax_form) .small > span.error {
  flex: 1 1 100%; width: 100%; margin: 4px 0 0; padding: 0; order: 999;
  color: var(--ds-danger);
  font: var(--ds-fw-regular) var(--ds-body-s)/1.35 var(--ds-font);
}
/* Пустая подпись не должна занимать место.
   Ограничиваем до span/div — иначе селектор `.error:empty` съедает <input>,
   которому AjaxForm JS вешает `class="error"` при submit-валидации
   (чекбокс становится width:0 → «пропадает» из вида). */
.ds-check-label > span[class^="error_"]:empty,
.ds-check-label > span.error:empty,
.ds-check-label > div[class^="error_"]:empty,
label.custom-legal > span[class^="error_"]:empty,
label.custom-legal > span.error:empty,
label.small-legal > span[class^="error_"]:empty,
label.small-legal > span.error:empty,
label.small > span[class^="error_"]:empty,
label.small > span.error:empty,
label.calc__checkbox > span[class^="error_"]:empty,
label.calc__checkbox > span.error:empty { display: none; margin: 0; }
.ds-check-label a, label.custom-legal a, label.small-legal a, .fancybox-content:has(.ajax_form) .small a, label.calc__checkbox a {
  color: var(--ds-brand); text-decoration: underline;
}

/* Размерный модификатор */
.ds-field--sm { height: var(--ds-field-h-sm); }

/* Поле «Телефон» — флаг РФ фоном. Одно правило на весь сайт; перечислены
   легаси-селекторы форм, где поле телефона нельзя пометить классом. */
.ds-field--tel,
.quote-form .input-group:has(#af_phone) .form-control,
.fancybox-content:has(.ajax_form) .input-group:has([id*="phone"]) .form-control,
#ajaxForm-mainForm input[name="phone"],
.main_form .input-group:has(#af_quote-phone) .form-control,
#ajaxForm-reviewForm input[name="phone"] {
  padding-left: var(--ds-field-pad-l-tel);
  background-image: var(--ds-ic-flag-ru);
  background-repeat: no-repeat;
  background-position: 18px center;
  background-size: 26px auto;
}

/* Переключатель тем (кнопка) */
.ds-theme-toggle {
  position: fixed; right: 18px; bottom: 20px; z-index: 9999;
  width: 48px; height: 48px; border-radius: var(--ds-r-pill);
  display: flex; align-items: center; justify-content: center;
  background: var(--ds-surface); color: var(--ds-text);
  border: 1px solid var(--ds-border); box-shadow: var(--ds-shadow-card);
  cursor: pointer; font-size: 22px; line-height: 1; transition: transform var(--ds-transition);
}
.ds-theme-toggle:hover { transform: translateY(-2px); }

/* ============================================================
   Кастомный скроллбар — в стиле DS, адаптируется к теме.
   Тонкий, скруглённый; при наведении подсвечивается брендом.
   ============================================================ */
:root { scrollbar-width: thin; scrollbar-color: var(--ds-border) transparent; }
::-webkit-scrollbar { width: 12px; height: 12px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  background: var(--ds-border);
  border: 3px solid var(--ds-bg);      /* «воздух» вокруг ползунка = фон страницы */
  border-radius: 999px;
  background-clip: padding-box;
  transition: background-color var(--ds-transition);
}
::-webkit-scrollbar-thumb:hover { background: var(--ds-brand); }
::-webkit-scrollbar-corner { background: transparent; }

/* Страница не «дёргается» при открытии/закрытии модалок:
   постоянный вертикальный скроллбар (не появляется/не исчезает) +
   стабильный жёлоб; компенсацию fancybox отключаем (двойного сдвига нет). */
/* Постоянный скроллбар + отключение компенсации fancybox в JS (hideScrollbar=false)
   → страница не сдвигается при открытии/закрытии модалок. margin body не трогаем. */
html { overflow-y: scroll; }

/* На мобилке — без принудительного/кастомного скроллбара (нативный оверлей),
   чтобы не было лишней полосы у прилипшей шапки. */
@media (max-width: 760px) {
  html { overflow-y: auto; }
  :root { scrollbar-width: none; }
  ::-webkit-scrollbar { width: 0 !important; height: 0 !important; }
}

/* ==========================================================================
   DS Carousel — ванильная карусель вместо owl («ФОТО ПЕРСОНАЛА», «Отзывы»)
   ========================================================================== */
.ds-carousel { position: relative; }
.ds-carousel__track {
  display: flex; gap: 20px; margin: 0; list-style: none;
  overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;
  padding: 4px 2px 18px; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.ds-carousel__track::-webkit-scrollbar { display: none; }
.ds-carousel__track > * { flex: 0 0 auto; scroll-snap-align: start; margin: 0 !important; float: none !important; }
/* ── Стрелка карусели ──────────────────────────────────────────────────────
   Нейтральная круглая кнопка навигации: полупрозрачная светлая подложка,
   тонкая рамка, лёгкая тень; на hover — бренд. Алиасами подключены легаси
   owl-carousel и slick-slider — HTML править не нужно.
   Иконка внутри — CSS-mask с шевроном (::after), красится currentColor.
   ────────────────────────────────────────────────────────────────────────── */
.ds-carousel__btn,
.owl-prev, .owl-next,
.slick-arrow {
  display: inline-flex !important; align-items: center; justify-content: center;
  position: absolute; z-index: 5; top: 50%; transform: translateY(-50%);
  width: 52px; height: 52px; padding: 0;
  border-radius: var(--ds-r-pill); cursor: pointer; user-select: none;
  background: rgba(255, 255, 255, .94); color: var(--ds-text);
  border: 1px solid var(--ds-border); box-shadow: 0 6px 22px rgba(2, 6, 23, .12);
  font-size: 0;                       /* прячем текстовую стрелку owl/slick */
  transition: background var(--ds-transition), border-color var(--ds-transition),
              transform var(--ds-transition), opacity var(--ds-transition);
}
.ds-carousel__btn:hover,
.owl-prev:hover, .owl-next:hover,
.slick-arrow:hover { background: var(--ds-brand); border-color: var(--ds-brand); color: var(--ds-on-brand); }
/* Тап-feedback: сохраняем translateY(-50%) чтобы не съезжать по вертикали */
.ds-carousel__btn:active,
.owl-prev:active, .owl-next:active,
.slick-arrow:active { transform: translateY(-50%) scale(.92); }

/* Иконка-стрелка — маска через ::after (для owl/slick, где внутри кнопки текст).
   Исключение: .ds-carousel__btn — там наш JS вставляет собственный <svg>,
   вторая стрелка через ::after дала бы дубль. */
.owl-prev::after, .owl-next::after,
.slick-arrow::after {
  content: ""; width: 22px; height: 22px; background-color: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.5'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M5%2012h14M13%206l6%206-6%206'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.5'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M5%2012h14M13%206l6%206-6%206'/%3E%3C/svg%3E") center / contain no-repeat;
}
.owl-prev::after, .slick-prev::after { transform: rotate(180deg); }

/* Позиции — переопределяются страницами (top у каруселей с картинками другой) */
.ds-carousel__btn--prev, .owl-prev, .slick-prev { left: 12px; }
.ds-carousel__btn--next, .owl-next, .slick-next { right: 12px; }

/* Выключенная стрелка */
.ds-carousel__btn:disabled,
.owl-prev.gpm-off, .owl-next.gpm-off,
.slick-arrow.slick-disabled { opacity: 0; pointer-events: none; }

/* Мобилка: стрелки .testimonials-carousel скрываем (свайп);
   .reviews-carousel — оставляем видимыми, но по центру карточек. */
@media (max-width: 760px) {
  .testimonials-carousel .owl-prev, .testimonials-carousel .owl-next { display: none !important; }
}

/* Тёмная тема: подложка стрелки = брендовая (нейтральный surface терялся на
   тёмном фоне страницы). Иконка — on-brand-белая, рамка бренд-полупрозрачная. */
:root[data-theme="dark"] .ds-carousel__btn,
:root[data-theme="dark"] .owl-prev, :root[data-theme="dark"] .owl-next,
:root[data-theme="dark"] .slick-arrow {
  background: var(--ds-brand); color: var(--ds-on-brand);
  border-color: rgba(var(--ds-brand-rgb), .60);
}
:root[data-theme="dark"] .ds-carousel__btn:hover,
:root[data-theme="dark"] .owl-prev:hover, :root[data-theme="dark"] .owl-next:hover,
:root[data-theme="dark"] .slick-arrow:hover {
  background: var(--ds-brand-hover); border-color: var(--ds-brand-hover);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .ds-carousel__btn,
  :root:not([data-theme="light"]) .owl-prev, :root:not([data-theme="light"]) .owl-next,
  :root:not([data-theme="light"]) .slick-arrow {
    background: var(--ds-brand); color: var(--ds-on-brand);
    border-color: rgba(var(--ds-brand-rgb), .60);
  }
  :root:not([data-theme="light"]) .ds-carousel__btn:hover,
  :root:not([data-theme="light"]) .owl-prev:hover, :root:not([data-theme="light"]) .owl-next:hover,
  :root:not([data-theme="light"]) .slick-arrow:hover {
    background: var(--ds-brand-hover); border-color: var(--ds-brand-hover);
  }
}

/* «ФОТО ПЕРСОНАЛА» */
.testimonials-carousel.ds-carousel__track > div { width: 300px; }
.testimonials-carousel article { margin: 0; border: 0; padding: 0; background: transparent; }
.testimonials-carousel .item-media { position: relative; border-radius: var(--ds-r-card); overflow: hidden; box-shadow: var(--ds-shadow-soft); margin: 0; }
.testimonials-carousel .item-media img { width: 100%; height: 300px; object-fit: cover; display: block; }
.testimonials-carousel .media-links a { position: absolute; inset: 0; }

/* «Отзывы» */
.reviews-carousel.ds-carousel__track > * { width: min(420px, 85vw); }

/* ============================================================================
   СТАТИЧНЫЙ боковой отступ --ds-gutter (единый источник для всего сайта:
   хедер .concat, все секции контента, футер). Значения фиксированы по
   брейкпоинтам — не «плавают» с шириной экрана (не резиновые).
   ============================================================================ */
@media (max-width: 1100px) { :root { --ds-gutter: 40px; } }
@media (max-width: 768px)  { :root { --ds-gutter: 24px; } }
@media (max-width: 480px)  { :root { --ds-gutter: 16px; } }


/* ============================================================
   БЛОКИ-СЕКЦИИ, переиспользуемые на множестве страниц.
   Раньше жили в services.css (уровень «Главная»), фактически
   применяются на 3-160 шаблонов/страниц.
   ============================================================ */

/* ---------- карточка услуги ---------- */
.a_service2 {
  display: flex !important; flex-direction: column; justify-content: space-between; gap: 14px;
  min-height: 260px; padding: 28px; border-radius: 16px; position: relative; overflow: hidden;
  text-decoration: none; color: var(--ds-on-brand); isolation: isolate;
  background: var(--ds-brand);
  transition: transform .18s ease, box-shadow .18s ease;
}
.a_service2:hover { transform: translateY(-3px); box-shadow: 0 14px 30px rgba(2, 6, 23, .12); }

/* фон-картинка (дублируется) + цветной оверлей поверх */
.a_service2::before {
  content: ""; position: absolute; inset: 0; z-index: -2;
  background: url("/assets/template/newdesign/images/svc-placeholder.png?r3") center bottom / cover no-repeat; background-image: image-set(url("/assets/template/newdesign/images/svc-placeholder.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-placeholder.png?r3") type("image/png"));
}
/* фото видно сильнее (как в макете): тонировка легче сверху, плотнее снизу под текст */
.a_service2::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(var(--ds-brand-rgb), .62) 0%, rgba(var(--ds-brand-rgb), .82) 100%);
}

/* УНИКАЛЬНОЕ фото под каждую услугу (все 12 разные) */
.a_service2[href*="gruzchiki"]::before            { background-image: image-set(url("/assets/template/newdesign/images/svc-loaders.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-loaders.png?r3") type("image/png")); }
.a_service2[href*="raznorabochie"]::before        { background-image: image-set(url("/assets/template/newdesign/images/svc-handyman.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-handyman.png") type("image/png")); }
.a_service2[href*="podsobniki"]::before           { background-image: image-set(url("/assets/template/newdesign/images/svc-podsobniki.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-podsobniki.png?r3") type("image/png")); }
.a_service2[href*="takelazh"]::before             { background-image: image-set(url("/assets/template/newdesign/images/svc-rigging.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-rigging.png?r3") type("image/png")); }
.a_service2[href*="vyivoz-musora"]::before        { background-image: image-set(url("/assets/template/newdesign/images/svc-placeholder.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-placeholder.png?r3") type("image/png")); }
.a_service2[href*="kvartirnyij-pereezd"]::before  { background-image: image-set(url("/assets/template/newdesign/images/svc-kvartira.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-kvartira.png?r3") type("image/png")); }
.a_service2[href*="gruzoperevozki"]::before       { background-image: image-set(url("/assets/template/newdesign/images/svc-gazelle.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-gazelle.png?r3") type("image/png")); }
.a_service2[href*="ofisnyij-pereezd"]::before     { background-image: image-set(url("/assets/template/newdesign/images/svc-office.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-office.png?r3") type("image/png")); }
.a_service2[href*="dachnyj-pereezd"]::before      { background-image: image-set(url("/assets/template/newdesign/images/svc-dacha.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-dacha.png?r3") type("image/png")); }
.a_service2[href*="gazel-dlya-pereezda"]::before  { background-image: url("/assets/template/newdesign/images/hero-mover.png"); }
.a_service2[href*="perevozka-mebeli"]::before     { background-image: image-set(url("/assets/template/newdesign/images/svc-mebel.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-mebel.png?r3") type("image/png")); }
.a_service2[href*="vyvoz-musora-na-gazeli"]::before { background-image: image-set(url("/assets/template/newdesign/images/svc-trash.webp") type("image/webp"), url("/assets/template/newdesign/images/svc-trash.png?r3") type("image/png")); }

/* ротация тонировки: красная / тёмная / фиолетовая — все с фото и белым текстом */
.row.columns_margin_bottom_20 > [class*="col-"]:nth-of-type(3n+2) .a_service2 { background: #2a2320; }
.row.columns_margin_bottom_20 > [class*="col-"]:nth-of-type(3n+2) .a_service2::after { background: linear-gradient(180deg, rgba(38, 32, 30, .58) 0%, rgba(38, 32, 30, .85) 100%); }
/* каждая 3-я карточка — светлый лилово-розовый градиент + фиолетовое свечение (как в макете),
   фото ОСТАЁТСЯ на фоне (градиент полупрозрачный), тёмный текст */
.row.columns_margin_bottom_20 > [class*="col-"]:nth-of-type(3n) .a_service2 { background: #f4ecfd; color: var(--ds-text); }
.row.columns_margin_bottom_20 > [class*="col-"]:nth-of-type(3n) .a_service2::after {
  background: radial-gradient(340px circle at 6% 100%, rgba(139, 92, 246, .32), rgba(139, 92, 246, 0) 62%), linear-gradient(135deg, rgba(244, 236, 253, .74) 0%, rgba(253, 238, 241, .80) 100%);
}
.row.columns_margin_bottom_20 > [class*="col-"]:nth-of-type(3n) .a_service2 .media-body__title { text-shadow: 0 1px 8px rgba(255, 255, 255, .65); }

/* раскрываем media/media-body, чтобы название и цена стали детьми карточки */
.a_service2 .media,
.a_service2 .media-body { display: contents; }
.a_service2 .media-left { display: none; }

/* название категории */
.a_service2 .media-body__title {
  order: 1; margin: 0; color: inherit;
  font: var(--ds-fw-medium) 30px / 34px var(--ds-font);
  text-transform: none; letter-spacing: -.01em;
  text-shadow: 0 1px 10px rgba(2, 6, 23, .22);
}

/* пустой первый <p> (только комментарий) — прячем */
.a_service2 .media-body p:not(.black) { display: none !important; }

/* цена — белая «пилюля» снизу со стрелкой */
.a_service2 .media-body p.black {
  order: 3; margin: auto 0 0; align-self: flex-start;
  display: inline-flex; align-items: center; gap: 10px; max-width: 100%;
  background: var(--ds-surface); color: var(--ds-text);
  border-radius: 16px; padding: 14px 20px;
  font: var(--ds-fw-medium) 17px / 1.1 var(--ds-font);
}
.a_service2 .media-body p.black::after {
  content: ""; width: 18px; height: 18px; flex: 0 0 auto; background-color: var(--ds-brand);
  -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.5'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M12.22%202h-.44a2%202%200%200%200-2%202v.18a2%202%200%200%201-1%201.73l-.43.25a2%202%200%200%201-2%200l-.15-.08a2%202%200%200%200-2.73.73l-.22.38a2%202%200%200%200%20.73%202.73l.15.1a2%202%200%200%201%201%201.72v.51a2%202%200%200%201-1%201.74l-.15.09a2%202%200%200%200-.73%202.73l.22.38a2%202%200%200%200%202.73.73l.15-.08a2%202%200%200%201%202%200l.43.25a2%202%200%200%201%201%201.73V20a2%202%200%200%200%202%202h.44a2%202%200%200%200%202-2v-.18a2%202%200%200%201%201-1.73l.43-.25a2%202%200%200%201%202%200l.15.08a2%202%200%200%200%202.73-.73l.22-.39a2%202%200%200%200-.73-2.73l-.15-.08a2%202%200%200%201-1-1.74v-.5a2%202%200%200%201%201-1.74l.15-.09a2%202%200%200%200%20.73-2.73l-.22-.38a2%202%200%200%200-2.73-.73l-.15.08a2%202%200%200%201-2%200l-.43-.25a2%202%200%200%201-1-1.73V4a2%202%200%200%200-2-2z'/%3E%3Ccircle%20cx='12'%20cy='12'%20r='3'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.5'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M12.22%202h-.44a2%202%200%200%200-2%202v.18a2%202%200%200%201-1%201.73l-.43.25a2%202%200%200%201-2%200l-.15-.08a2%202%200%200%200-2.73.73l-.22.38a2%202%200%200%200%20.73%202.73l.15.1a2%202%200%200%201%201%201.72v.51a2%202%200%200%201-1%201.74l-.15.09a2%202%200%200%200-.73%202.73l.22.38a2%202%200%200%200%202.73.73l.15-.08a2%202%200%200%201%202%200l.43.25a2%202%200%200%201%201%201.73V20a2%202%200%200%200%202%202h.44a2%202%200%200%200%202-2v-.18a2%202%200%200%201%201-1.73l.43-.25a2%202%200%200%201%202%200l.15.08a2%202%200%200%200%202.73-.73l.22-.39a2%202%200%200%200-.73-2.73l-.15-.08a2%202%200%200%201-1-1.74v-.5a2%202%200%200%201%201-1.74l.15-.09a2%202%200%200%200%20.73-2.73l-.22-.38a2%202%200%200%200-2.73-.73l-.15.08a2%202%200%200%201-2%200l-.43-.25a2%202%200%200%201-1-1.73V4a2%202%200%200%200-2-2z'/%3E%3Ccircle%20cx='12'%20cy='12'%20r='3'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* ---------- кнопка «Все услуги» ---------- */
.row.columns_margin_bottom_20 > .col-xs-12 a.button {
  display: flex !important; align-items: center; justify-content: center; width: 100%;
  background: var(--ds-brand); color: var(--ds-on-brand);
  border: 0; border-radius: var(--ds-btn-r); padding: 22px;
  font: var(--ds-fw-medium) 20px / 1 var(--ds-font); text-decoration: none;
  transition: background .18s ease;
}

/* ============================================================
   FAQ «ОТВЕТЫ НА ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ» — аккордеон в стиле DS.
   Разметка: .faq-answer = вопрос (шапка), .faq-question = ответ (тело).
   Только CSS+JS-класс .is-open; тексты/SEO не трогаем.
   ============================================================ */
.container:has(.faq_wrapper) {
  max-width: var(--ds-container, 1440px); margin-left: auto; margin-right: auto;
  padding: 44px var(--ds-gutter); box-sizing: border-box;
}
.container:has(.faq_wrapper) .section_header {
  font: var(--ds-fw-medium) var(--ds-h2) / var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); text-transform: none; letter-spacing: -.01em;
  margin: 0 0 10px;
}
.container:has(.faq_wrapper) .section_header .small { font-size: inherit; font-weight: inherit; }
.faq_wrapper.faq-accordion {
  max-width: none; width: 100%; margin: 30px auto 0; display: flex; flex-direction: column; gap: 12px;
}
/* фон/рамка/радиус — компонент .ds-card. Здесь только overflow (скрывает
   углы у вложенного .faq-answer) и transition. */
.faq-item {
  overflow: hidden;
  transition: border-color .2s ease, box-shadow .2s ease, background .2s ease;
}
/* наведение на закрытый вопрос */
.faq-item:not(.is-open):hover { border-color: var(--ds-brand-soft-2); background: var(--ds-surface-alt); }
.faq-item:not(.is-open):hover .faq-answer span { color: var(--ds-brand); }
.faq-item:not(.is-open):hover .faq-answer::after { background-color: var(--ds-brand-hover); transform: rotate(90deg); }
.faq-item.is-open { border-color: var(--ds-brand); box-shadow: var(--ds-shadow-soft); }
.faq-item .faq-answer {
  display: flex; align-items: flex-start; gap: 16px; cursor: pointer; padding: 20px 24px; margin: 0;
  -webkit-tap-highlight-color: transparent;
}
.faq-item .faq-answer:active { background: var(--ds-brand-soft); }
.faq-item .faq-answer span {
  flex: 1; font: var(--ds-fw-medium) var(--ds-body-l) / 1.4 var(--ds-font); color: var(--ds-text);
  transition: color .18s ease;
}
.faq-item .faq-answer::after {
  content: ""; flex: 0 0 auto; width: 24px; height: 24px; margin-top: 2px; background-color: var(--ds-brand);
  -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.5'%20stroke-linecap='round'%3E%3Cpath%20d='M12%205v14M5%2012h14'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.5'%20stroke-linecap='round'%3E%3Cpath%20d='M12%205v14M5%2012h14'/%3E%3C/svg%3E") center / contain no-repeat;
  transition: transform .28s cubic-bezier(.4, 0, .2, 1), background-color .18s ease;
}
.faq-item.is-open .faq-answer::after { transform: rotate(45deg); }
/* Ответ: раскрываем мгновенно (высота auto → нет лагов анимации высоты),
   с лёгким fade-in контента (opacity+сдвиг — GPU, плавно). */
.faq-item .faq-question { display: none !important; margin: 0; }
.faq-item.is-open .faq-question {
  display: block !important; animation: faqReveal .22s ease both;
}
@keyframes faqReveal {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: translateY(0); }
}
.faq-item .faq-question span {
  display: block; padding: 2px 24px 22px;
  font: var(--ds-fw-regular) var(--ds-body-m) / var(--ds-body-m-lh) var(--ds-font); color: var(--ds-text-2);
}
@media (max-width: 760px) {
  .container:has(.faq_wrapper) { padding: 16px 16px; }
/* .section_header размер — компонент в design-system.css */
  .faq-item .faq-answer { padding: 16px 18px; gap: 12px; }
  .faq-item .faq-answer span { font-size: var(--ds-body-m); }
  .faq-item .faq-question span { padding: 2px 18px 18px; }
}

/* ============================================================
   «Отзывы клиентов» — горизонтальная лента (owl-JS снят, карточки
   .rv-card стилизованы в main.css). Здесь — раскладка + стрелки.
   ============================================================ */
.bl.section_padding_40:has(.reviews-carousel) > .container {
  max-width: var(--ds-container, 1440px); margin: 0 auto; padding: 44px var(--ds-gutter); box-sizing: border-box;
}
.bl.section_padding_40:has(.reviews-carousel) > .container > .section_header {
  font: var(--ds-fw-medium) var(--ds-h2) / var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); text-transform: none; letter-spacing: -.01em; margin: 0 0 30px;
}
.reviews-carousel_wrapper { max-width: none !important; padding: 0; width: auto !important; }
.reviews-carousel_wrapper .row,
.reviews-carousel_wrapper .col-lg-12 { margin: 0; padding: 0; width: auto !important; max-width: none !important; }
/* Старый owl-путь (не используется — отзывы теперь на DS-карусели .ds-carousel__track).
   Оставлено только для не-DS состояния; DS-карусель сама скроллит трек (overflow-x:auto). */
.reviews-carousel:not(.ds-carousel__track) { position: relative; overflow: visible !important; }
.reviews-carousel .owl-stage-outer {
  overflow-x: auto !important; overflow-y: hidden !important; scroll-snap-type: x proximity;
  scrollbar-width: none; -ms-overflow-style: none;
}
.reviews-carousel .owl-stage-outer::-webkit-scrollbar { width: 0; height: 0; display: none; }
.reviews-carousel .owl-stage {
  display: flex !important; gap: 20px; width: max-content !important; transform: none !important;
  align-items: flex-start !important; /* разворот одного отзыва не растягивает соседние */
}
.reviews-carousel .owl-item {
  width: 400px !important; flex: 0 0 400px; margin: 0; scroll-snap-align: start; opacity: 1; display: flex; align-items: flex-start;
}
.reviews-carousel .owl-item .reviews-slider__item { width: 100%; }
/* по умолчанию все карточки одной высоты; развёрнутая растёт, соседей не трогает */
.reviews-carousel .owl-item .rv-card { min-height: 305px; height: auto; box-sizing: border-box; }
.reviews-carousel .owl-item .rv-card.rv-expanded { min-height: 0; }
.reviews-carousel-nav { display: none !important; }
/* стрелки на краях ленты (переносятся внутрь .reviews-carousel JS-ом) */
/* Стрелки — компонент .ds-carousel__btn. Здесь только положение. */
.reviews-carousel .owl-prev,
.reviews-carousel .owl-next { top: 153px; }
.reviews-carousel .owl-prev { left: -6px; }
.reviews-carousel .owl-next { right: -6px; }
/* иконка, hover, disabled — из компонента .ds-carousel__btn. */
@media (max-width: 760px) {
  .bl.section_padding_40:has(.reviews-carousel) > .container { padding: 16px 16px; }
/* .section_header размер — компонент в design-system.css */
  .reviews-carousel .owl-item { width: 300px !important; flex-basis: 300px; }
  /* Стрелки по центру карточек по вертикали */
  .reviews-carousel .owl-prev,
  .reviews-carousel .owl-next {
    width: 40px; height: 40px;
    top: 50% !important; transform: translateY(-50%);
  }
  .reviews-carousel .owl-prev:active,
  .reviews-carousel .owl-next:active { transform: translateY(-50%) scale(.92); }
  .reviews-carousel .owl-prev { left: 2px; }
  .reviews-carousel .owl-next { right: 2px; }
  .reviews-carousel .owl-prev::after, .reviews-carousel .owl-next::after { width: 18px; height: 18px; }
}

/* Футер: единый компонент в footer.css. */

/* ============================================================
   Видео-блок (RuTube) — превью 16:9 с кнопкой play; клик открывает
   видео (iframe добавляется JS-ом из data-src). Только CSS/JS.
   ============================================================ */
.container:has(> .youtube_video) {
  max-width: var(--ds-container, 1440px); margin: 0 auto; padding: 44px var(--ds-gutter); box-sizing: border-box;
}
.youtube_video { max-width: 960px; margin: 0 auto; }
.video-placeholder {
  position: relative; aspect-ratio: 16 / 9; border-radius: var(--ds-r-block, 28px); overflow: hidden;
  cursor: pointer; background: #000; box-shadow: var(--ds-shadow-card);
}
.video-placeholder .video-thumbnail {
  width: 100% !important; height: 100% !important; object-fit: cover; display: block;
  transition: transform .4s ease;
}
.video-placeholder:hover .video-thumbnail { transform: scale(1.04); }
.video-placeholder::after {
  content: ""; position: absolute; inset: 0; background: rgba(2, 6, 23, .18);
  transition: background .25s ease; pointer-events: none;
}
.video-placeholder:hover::after { background: rgba(2, 6, 23, .28); }
.video-placeholder .play-button {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  width: 84px !important; height: 84px !important; border-radius: 50%; border: 0;
  background: var(--ds-brand); cursor: pointer; z-index: 2; padding: 0;
  box-shadow: 0 10px 30px rgba(var(--ds-brand-rgb), .5); transition: transform .2s ease, background .2s ease;
}
.video-placeholder .play-button::before {
  content: ""; position: absolute; top: 50%; left: 54%; transform: translate(-50%, -50%);
  border-style: solid; border-width: 14px 0 14px 22px; border-color: transparent transparent transparent #fff;
}
.video-placeholder:hover .play-button { transform: translate(-50%, -50%) scale(1.08); background: var(--ds-brand-hover); }
.video-placeholder.is-playing { cursor: default; }
.video-placeholder.is-playing::after,
.video-placeholder.is-playing .play-button,
.video-placeholder.is-playing .video-thumbnail { display: none; }
.video-placeholder iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
@media (max-width: 760px) {
  .container:has(> .youtube_video) { padding: 16px 16px; }
  .video-placeholder { border-radius: var(--ds-r-card, 20px); }
  .video-placeholder .play-button { width: 64px !important; height: 64px !important; }
  .video-placeholder .play-button::before { border-width: 11px 0 11px 17px; }
}

/* ============================================================
   Отзывы: обрезка длинного текста + «Показать полностью» (кнопка
   добавляется JS-ом, разворот через класс .rv-expanded на карточке).
   ============================================================ */
.reviews-carousel .rv-card__text {
  display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden;
}
.reviews-carousel .rv-card.rv-expanded .rv-card__text {
  display: block; -webkit-line-clamp: unset; overflow: visible;
}
.reviews-carousel .rv-more {
  margin-top: 10px; padding: 0; border: 0; background: none; cursor: pointer; align-self: flex-start;
  font: var(--ds-fw-medium) var(--ds-body-s) / 1 var(--ds-font); color: var(--ds-brand);
  transition: color var(--ds-transition);
}
.reviews-carousel .rv-more:hover { color: var(--ds-brand-hover); }


/* ============================================================
   Блок «ФОТО ПЕРСОНАЛА» — галерея работ.
   Owl-карусель → горизонтальная лента скруглённых фото (те же фото).
   ============================================================ */
.container:has(.testimonials-carousel) {
  max-width: var(--ds-container, 1440px); margin-left: auto; margin-right: auto;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}
.container:has(.testimonials-carousel) .section_header {
  font: var(--ds-fw-medium) var(--ds-h2) / var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); text-transform: none; margin: 0 0 24px; letter-spacing: -.01em;
}
.container:has(.testimonials-carousel) .section_header .small { font-size: inherit; font-weight: inherit; }
/* лента — прокрутка стрелками/свайпом, видимую полосу прокрутки прячем */
.testimonials-carousel { position: relative; }
.testimonials-carousel .owl-stage-outer {
  overflow-x: auto !important; overflow-y: hidden !important;
  scroll-snap-type: x proximity;
  scrollbar-width: none; -ms-overflow-style: none;
}
.testimonials-carousel .owl-stage-outer::-webkit-scrollbar { width: 0; height: 0; display: none; }
.testimonials-carousel .owl-stage {
  display: flex !important; gap: 16px; width: max-content !important; transform: none !important;
}
.testimonials-carousel .owl-item {
  width: 360px !important; flex: 0 0 360px; margin: 0; scroll-snap-align: start; opacity: 1;
}
.testimonials-carousel .owl-item img {
  width: 100% !important; height: 280px; object-fit: cover; border-radius: var(--ds-r-card, 20px); display: block;
}
.testimonials-carousel .owl-dots { display: none !important; }
/* пустой контейнер навигации (стрелки перенесены внутрь ленты JS-ом) */
.testimonials-carousel-nav { display: none !important; }
/* нерабочая owl-навигация прочих каруселей — прячем */
.owl-prev, .owl-next { display: none !important; }

/* стрелки галереи «ФОТО ПЕРСОНАЛА» — круглые кнопки на краях фото-ленты */
/* Стрелки — компонент .ds-carousel__btn (алиас .owl-prev/.owl-next). Здесь только положение. */
.testimonials-carousel .owl-prev,
.testimonials-carousel .owl-next { top: 140px; }
.testimonials-carousel .owl-prev { left: 14px; }
.testimonials-carousel .owl-next { right: 14px; }
/* фото — курсор «увеличить» */
.testimonials-carousel .owl-item a[data-fancybox] { display: block; cursor: zoom-in; }

@media (max-width: 760px) {
/* .section_header размер — компонент в design-system.css */
  .testimonials-carousel .owl-item { width: 280px !important; flex-basis: 280px; }
  .testimonials-carousel .owl-item img { height: 220px; }
  .testimonials-carousel .owl-prev, .testimonials-carousel .owl-next { top: 110px; width: 44px; height: 44px; }
  .testimonials-carousel .owl-prev { left: 8px; }
  .testimonials-carousel .owl-next { right: 8px; }
  .testimonials-carousel .owl-prev::after, .testimonials-carousel .owl-next::after { width: 18px; height: 18px; }
}
@media (max-width: 460px) {
  .testimonials-carousel .owl-item { width: 240px !important; flex-basis: 240px; }
}

/* ============================================================
   Блок «Почему мы?» — карточки-преимущества в DS-стиле.
   (p.grey.text-center — уникальный маркер этого блока.)
   ============================================================ */
.container:has(p.grey.text-center) {
  max-width: var(--ds-container, 1440px); margin-left: auto; margin-right: auto;
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter);
  padding-top: 60px; padding-bottom: 60px; box-sizing: border-box;
}
.container:has(p.grey.text-center) .section_header {
  font: var(--ds-fw-medium) var(--ds-h2) / var(--ds-h2-lh) var(--ds-font);
  color: var(--ds-text); text-transform: none; margin: 0 0 8px; letter-spacing: -.01em;
}
/* сетка: заголовок на всю ширину, 3 карточки */
.row > noindex:has(p.grey.text-center) {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; align-items: stretch;
}
.row > noindex:has(p.grey.text-center) > .col-md-12 {
  grid-column: 1 / -1; width: auto !important; max-width: none !important; padding: 0; float: none !important; margin: 0 0 24px;
}
.row > noindex:has(p.grey.text-center) > .col-md-4 {
  width: auto !important; max-width: none !important; float: none !important; margin: 0;
}
/* карточка */
.col-md-4:has(p.grey.text-center) {
  background: var(--ds-surface); border: 1px solid var(--ds-border-soft); border-radius: var(--ds-r-card, 20px);
  padding: 56px 28px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 10px;
  transition: border-color .18s ease, box-shadow .18s ease;
}
.col-md-4:has(p.grey.text-center):hover { border-color: var(--ds-brand-soft-2); box-shadow: 0 10px 28px rgba(2, 6, 23, .06); }
.col-md-4:has(p.grey.text-center) > noindex { display: contents; }
/* иконка в мягком красном кружке */
.col-md-4:has(p.grey.text-center) p:has(img) {
  margin: 0 0 6px; width: 76px; height: 76px; border-radius: 50%;
  background: var(--ds-brand-soft); display: flex; align-items: center; justify-content: center;
}
.col-md-4:has(p.grey.text-center) p img { width: 38px; height: 38px; }
/* заголовок карточки */
.col-md-4:has(p.grey.text-center) p.grey {
  margin: 0; color: var(--ds-text);
  font: var(--ds-fw-medium) var(--ds-h6) / var(--ds-h6-lh) var(--ds-font);
}
/* описание */
.col-md-4:has(p.grey.text-center) p.lineheight_22 {
  margin: 0; color: var(--ds-text-2);
  font: var(--ds-fw-regular) var(--ds-body-m) / var(--ds-body-m-lh) var(--ds-font);
}

@media (max-width: 900px) {
  .row > noindex:has(p.grey.text-center) { grid-template-columns: 1fr; gap: 16px; }
  /* .container:has(p.grey.text-center) .section_header — размер --ds-h2 наследуется из общего правила выше. */
}

/* ============================================================================
   МОБИЛЬНАЯ УНИФИКАЦИЯ
   Одно место для мобильных правил, которые до этого разбегались по 4-5
   файлам или воспроизводились через !important. Только токены, никаких
   px-хардкодов. Раздел применяется на всех страницах.
   ============================================================================ */

/* Утилита `.text-center` (в новом дизайне без Bootstrap; в разметке CMS остаётся
   на десятках section_header). */
.text-center { text-align: center; }

@media (max-width: 767px) {
  /* Единый center-align для заголовков секций — иначе смотрится разношёрстно. */
  .newtemplate :is(h2, .section_header, p.h2, .h2) { text-align: center; }

  /* Блок «Готовые решения для бизнеса» (.solution) — заголовок и карточки
     крупноваты на мобиле. Возвращаем к body-size-скале, специфика тех же
     селекторов что в базовом объявлении выше. */
  :is(.newtemplate, .corp-page) .solution :is(p.h2, .h2) {
    font-size: var(--ds-h6); line-height: var(--ds-h6-lh);
  }
  :is(.newtemplate, .corp-page) .solution :is(.sol-card, .col-sm-6) :is(.h3, h2, h3, .h2, strong) {
    font-size: var(--ds-body-l); line-height: var(--ds-body-l-lh);
  }

  /* CTA-кнопки — на всю ширину (иконочные, поисковые и стрелки карусели —
     нет: у них своя фиксированная ширина). Классы: .ds-btn / .theme_button /
     .button / .button-red — все действия в контенте. */
  .newtemplate :is(.ds-btn, .theme_button, .button, .button-red):not(.ds-carousel__btn):not(.serach_btn):not([class*="carousel"]),
  :is(.newtemplate, .fancybox-content, .ajax_form) :is([type="submit"], button[type="submit"]),
  .fancybox-content :is(.ds-btn, .theme_button, .button, .button-red) {
    width: 100%; box-sizing: border-box; justify-content: center;
  }

  /* Заголовки и подписи внутри модалок Fancybox — по центру. */
  .fancybox-content :is(h1, h2, h3, .h1, .h2, .h3, .main_form__title, .main_form__subtitle, .main_form__text) {
    text-align: center;
  }
}

/* ── Подчёркивание ссылок в контенте (моб + десктоп) ──────────────────────
   Все обычные текстовые ссылки — с подчёркиванием (это стандартный интерактив,
   отличающий их от простого текста). Кнопки-ссылки (`.ds-btn`, `.theme_button`,
   `.button`, `.button-red` и т.п.), ссылки в шапке / подвале / крошках /
   навигации / карточках-ссылках — без подчёркивания. */
.newtemplate a { text-decoration: underline; text-underline-offset: 2px; }
.newtemplate :is(.ds-btn, .theme_button, .button, .button-red, [class*="btn"]),
.newtemplate :is(.newhead, .footer, footer, nav, .breadcrumb, .breadcrumbs, .card, .card-row, .card-body) a,
.newtemplate .fancybox-content :is(.ds-btn, .theme_button, .button, .button-red) {
  text-decoration: none;
}

/* ---- Popup with a list of links (fancybox inline content) ----------------
   Used e.g. by city homepage bento cards ("Заказать переезд", "Частным лицам").
   Markup: <div id=… class="ds-popup"><h3 class="ds-popup__title">…</h3>
           <ul class="ds-link-list"><li><a>…</a></li>…</ul></div>            */
.ds-popup { width: min(520px, calc(100vw - 2 * var(--ds-gutter))); }
.ds-popup__title {
  margin: 0 0 16px;
  font-family: var(--ds-font);
  font-size: var(--ds-h5);
  line-height: var(--ds-h5-lh);
  font-weight: var(--ds-fw-semibold);
  color: var(--ds-text);
}
.ds-link-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.ds-link-list a {
  display: block;
  padding: 10px 12px;
  border-radius: 10px;
  font-size: var(--ds-body-m);
  line-height: var(--ds-body-m-lh);
  color: var(--ds-text);
  text-decoration: none;
  transition: background .15s ease, color .15s ease;
}
.ds-link-list a:hover,
.ds-link-list a:focus-visible { background: var(--ds-brand-soft); color: var(--ds-brand); }

/* ==========================================================================
   ГОРОДСКИЕ КОМПОНЕНТЫ — элементы городских сайтов, у которых нет пары
   на московском сайте (контент городов не трогаем, только оформляем в DS).
   Ни один из селекторов ниже не встречается на страницах Москвы.
   ========================================================================== */

/* (класс удвоен: внутри .newtemplate/.corp-page общее правило списков текста
   `.newtemplate .text-cont ul li` иначе перебивает карточку — отступы, значок) */
/* ---- «Наши гарантии» списком (<ul><li><strong>Заголовок.</strong> текст) —
   та же сетка карточек, что у московского блока .pixel-guarantees ---------- */
.our_guarantees.our_guarantees > ul {
  list-style: none; margin: 0 auto; padding: 0; max-width: var(--ds-content);
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px;
}
.our_guarantees.our_guarantees > ul > li {
  position: relative; margin: 0; box-sizing: border-box;
  padding: 136px 24px 32px;                     /* место под иконку-бейдж */
  background: var(--ds-surface); border: 1px solid var(--ds-border); border-radius: var(--ds-r-card);
  box-shadow: var(--ds-shadow-soft); text-align: center;
  font: var(--ds-fw-regular) var(--ds-body-m) / var(--ds-body-m-lh) var(--ds-font); color: var(--ds-text-2);
  transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;
}
.our_guarantees.our_guarantees > ul > li::before {               /* бейдж 84×84 как .item__image */
  content: ""; position: absolute; top: 32px; left: 50%; width: 84px; height: 84px; margin-left: -42px;
  border-radius: 20px; background: var(--ds-brand-soft); transition: background .22s ease, transform .22s ease;
}
.our_guarantees.our_guarantees > ul > li::after {                /* иконка «щит с галочкой» */
  content: ""; position: absolute; top: 54px; left: 50%; width: 40px; height: 40px; margin-left: -20px;
  background: var(--ds-brand);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E") center / contain no-repeat;
}
.our_guarantees.our_guarantees > ul > li:hover { transform: translateY(-6px); border-color: var(--ds-brand); box-shadow: var(--ds-shadow-card); }
.our_guarantees.our_guarantees > ul > li:hover::before { background: var(--ds-brand); transform: rotate(-6deg) scale(1.06); }
.our_guarantees.our_guarantees > ul > li:hover::after { background: var(--ds-on-brand); }
.our_guarantees.our_guarantees > ul > li > strong:first-child {   /* заголовок карточки = .item__title */
  display: block; margin: 0 0 10px; font: var(--ds-fw-medium) 20px / 1.3 var(--ds-font); color: var(--ds-text);
  text-wrap: balance;
}
@media (max-width: 900px) { .our_guarantees.our_guarantees > ul { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .our_guarantees.our_guarantees > ul { grid-template-columns: 1fr; } }

/* ---- Список услуг на главной (getResources main.services_ux.tpl):
   «Показать ещё» и «Все цены» — кнопки DS ------------------------------------ */
.intro_section2_ux .service_wrap_more,
.intro_section2_ux .btn_all-prices {
  display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
  height: var(--ds-btn-h); padding: 0 var(--ds-btn-pad-x); margin: 24px 12px 0 0;
  font: var(--ds-fw-medium) var(--ds-body-m) / 1 var(--ds-font);
  border: 1px solid var(--ds-brand); border-radius: var(--ds-btn-r);
  background: transparent; color: var(--ds-brand); text-decoration: none;
  transition: background var(--ds-transition), color var(--ds-transition), box-shadow var(--ds-transition);
}
.intro_section2_ux .btn_all-prices { background: var(--ds-brand); color: var(--ds-on-brand); }
.intro_section2_ux .service_wrap > .service_wrap_more { grid-column: 1 / -1; justify-self: center; margin: 8px 0 0; }
.intro_section2_ux .container > .btn_all-prices { display: flex; width: fit-content; margin: 16px auto 0; }
.intro_section2_ux .service_wrap_more:hover { background: var(--ds-brand-soft); color: var(--ds-brand); }
.intro_section2_ux .btn_all-prices:hover { background: var(--ds-brand-hover); color: var(--ds-on-brand); box-shadow: var(--ds-btn-glow); }

/* ---- Ссылки внутри списков с красными маркерами (контент городов) ------- */
.red-list li a { color: var(--ds-brand); text-decoration: underline; text-underline-offset: 2px; }
.red-list li a:hover { color: var(--ds-brand-hover); }

/* ---- Уведомление о cookie (подключается городами чанком cookie_notice) ---- */
html body #cookie_notice {
  position: fixed; z-index: 9999999; right: 20px; bottom: 20px; left: auto;
  max-width: 420px; padding: 20px 24px; box-sizing: border-box;
  background: var(--ds-surface); color: var(--ds-text-2);
  border: 1px solid var(--ds-border-soft); border-radius: var(--ds-r-card);
  box-shadow: var(--ds-shadow-card);
  font: var(--ds-fw-regular) 14px / 20px var(--ds-font);
}
html body #cookie_notice a:not(.theme_button) { color: var(--ds-brand); text-decoration: underline; text-underline-offset: 2px; }
html body #cookie_notice .theme_button { height: var(--ds-btn-h-sm); padding: 0 22px; }
@media (max-width: 767px) { html body #cookie_notice { left: 16px; right: 16px; bottom: 16px; max-width: none; } }

/* ---- Информационные модалки без формы (напр. «Розыгрыш» #rozygrysh) —
   та же карточка, что у модалок с формой (modals.css) ------------------------ */
.fancybox-content.content-card:not(:has(.ajax_form)) {
  background: var(--ds-surface); color: var(--ds-text);
  border: 1px solid var(--ds-border-soft); border-radius: var(--ds-r-block, 28px);
  box-shadow: var(--ds-shadow-card); padding: 40px; max-width: 560px; width: 100%; box-sizing: border-box;
  font: var(--ds-fw-regular) var(--ds-body-m) / var(--ds-body-m-lh) var(--ds-font);
}
.fancybox-content.content-card:not(:has(.ajax_form)) .h4 {
  font: var(--ds-fw-medium) var(--ds-h6) / var(--ds-h6-lh) var(--ds-font);
  color: var(--ds-text); letter-spacing: -.01em; margin: 0 0 16px; text-transform: none;
}
.fancybox-content.content-card:not(:has(.ajax_form)) p { margin: 0 0 8px; color: var(--ds-text-2); }
.fancybox-content.content-card:not(:has(.ajax_form)) strong { color: var(--ds-text); font-weight: var(--ds-fw-semibold); }
.fancybox-content.content-card:not(:has(.ajax_form)) a:not([class]) { color: var(--ds-brand); text-decoration: underline; text-underline-offset: 2px; outline: none; }
.fancybox-content.content-card:not(:has(.ajax_form)) .text-center { margin-top: 16px; }

/* ---- Стикер-баннер акции (чанк top_banner): цвета бренда DS ---------------- */
html body .sticker-banner { background: var(--ds-brand); border-radius: var(--ds-r-card); font-family: var(--ds-font);
  box-shadow: 0 10px 30px rgba(var(--ds-brand-rgb), .35); }
html body .sticker-banner .sticker-badge,
html body .sticker-banner .sticker-cta { color: var(--ds-brand); }

/* ---- Контейнер текста вне .newtemplate (блок «Наши гарантии» на главной города,
   на «Услугах и ценах»): тот же боковой отступ, что у всех секций, — иначе на
   экранах уже 1440 карточки прилипали к краям ------------------------------------ */
.container.text-cont:not(.newtemplate .text-cont) {
  padding-left: var(--ds-gutter); padding-right: var(--ds-gutter); box-sizing: border-box;
}

/* ---- «pixel»-модалка заявки (городские таблицы цен .pixel-modal-call → /pixel/modal.html):
   свой механизм отправки города не трогаем, оформляем как модалки темы (modals.css).
   html body — modal.css грузится позже и перебил бы равные по весу правила ------------ */
html body .pixel-modal { background: rgba(2, 6, 23, .72); z-index: 99990; padding: 16px; box-sizing: border-box; }
html body .pixel-modal .pixel-modal-inner {
  width: min(460px, calc(100vw - 32px)); min-height: 0; box-sizing: border-box; padding: 40px;
  background: var(--ds-surface); color: var(--ds-text);
  border: 1px solid var(--ds-border-soft); border-radius: var(--ds-r-block, 28px); box-shadow: var(--ds-shadow-card);
  font-family: var(--ds-font);
}
html body .pixel-modal .pixel-modal-inner .pixel-modal-header {
  font: var(--ds-fw-medium) var(--ds-h5) / var(--ds-h5-lh) var(--ds-font);
  color: var(--ds-text); letter-spacing: -.01em; text-transform: none; text-align: left; margin: 0 0 16px;
}
html body .pixel-modal .pixel-modal-inner .pixel-modal-close {
  top: 16px; right: 16px; width: 36px; height: 36px; font-size: 16px;
  background: var(--ds-surface-alt); color: var(--ds-text-2); text-decoration: none; transition: background var(--ds-transition), color var(--ds-transition);
}
html body .pixel-modal .pixel-modal-inner .pixel-modal-close:hover { background: var(--ds-brand); color: var(--ds-on-brand); }
html body .pixel-modal .pixel-modal-inner .form-group { margin: 0 0 14px; }
html body .pixel-modal .pixel-modal-inner .form-control { border-radius: var(--ds-field-r); min-width: 0; }
html body .pixel-modal .pixel-modal-inner .pixel-modal-phone {
  padding-left: var(--ds-field-pad-l-tel); background-image: var(--ds-ic-flag-ru);
  background-repeat: no-repeat; background-position: 18px center;
}
/* согласие: нативный чекбокс с accent-color, как во всех формах темы (вместо тумблера) */
html body .pixel-modal .modal-policy { align-items: flex-start; gap: 8px; margin: 8px 0 20px; }
html body .pixel-modal .pixel-modal-inner input[type=checkbox] {
  visibility: visible; width: var(--ds-checkbox-size); height: var(--ds-checkbox-size); margin: 1px 0 0;
  flex: 0 0 auto; accent-color: var(--ds-brand); cursor: pointer;
}
html body .pixel-modal .pixel-modal-inner .modal-policy label { display: none; }
html body .pixel-modal .modal-policy span {
  margin: 0; font: var(--ds-fw-regular) var(--ds-body-s) / var(--ds-body-s-lh) var(--ds-font); color: var(--ds-text-2);
}
html body .pixel-modal .modal-policy span a { color: var(--ds-brand); }
html body .pixel-modal .modal-button {
  display: flex; align-items: center; justify-content: center; width: 100%; height: 54px; margin: 0;
  background: var(--ds-brand); color: var(--ds-on-brand); border: 0; border-radius: var(--ds-btn-r);
  font: var(--ds-fw-medium) var(--ds-body-m) / 1 var(--ds-font); cursor: pointer;
  transition: background var(--ds-transition), box-shadow var(--ds-transition), transform .1s ease;
}
html body .pixel-modal .modal-button:hover { background: var(--ds-brand-hover); color: var(--ds-on-brand); box-shadow: var(--ds-btn-glow); transform: translateY(var(--ds-btn-lift)); }
html body .pixel-modal .pixel-modal-error,
html body .pixel-modal .pixel-modal-success { border-radius: var(--ds-r-md); font: var(--ds-fw-medium) var(--ds-body-s) / 1.4 var(--ds-font); }
html body .pixel-modal .pixel-modal-error { background: var(--ds-danger-soft); color: var(--ds-danger); }
html body .pixel-modal .pixel-modal-success { background: rgba(34, 197, 94, .12); color: #15803d; }
@media (max-width: 960px) { html body .pixel-modal .pixel-modal-inner { padding: 32px 20px; } }

/* Ссылки в тексте первого экрана (головной gpm-workers.ru: «Грузчики в Москве», «…в Санкт-Петербурге» —
   переход на сайты городов). Как текстовые ссылки темы (.text-cont a): бренд + подчёркивание. */
.main_form .main_form__text a:not([class*="button"]):not(.ds-btn):not(.theme_button) {
  color: var(--ds-brand); text-decoration: underline; text-underline-offset: 2px;
  transition: color var(--ds-transition);
}
.main_form .main_form__text a:not([class*="button"]):not(.ds-btn):not(.theme_button):hover { color: var(--ds-brand-hover); }

/* Yandex SmartCaptcha (невидимая, js/smartcaptcha.js). Щит Яндекса скрыт, поэтому у каждой
   формы — обязательное уведомление об обработке данных: в стиле подписи согласия (.small-legal),
   на всю ширину строки в grid/flex-раскладках форм. Контейнер виджета места не занимает. */
form .smartcaptcha-notice {
  grid-column: 1 / -1; flex: 1 1 100%; width: 100%;
  margin: 10px 0 0; text-align: left;
  font: var(--ds-fw-regular) var(--ds-body-s)/var(--ds-body-s-lh) var(--ds-font);
  color: var(--ds-text-3);
}
form .smartcaptcha-notice a { color: inherit; text-decoration: underline; text-underline-offset: 2px; transition: color var(--ds-transition); }
form .smartcaptcha-notice a:hover { color: var(--ds-brand); }
form .smartcaptcha-box { position: absolute; width: 0; height: 0; }   /* без overflow: окно задания не обрезается */
form .smartcaptcha-notice .error_smart-token:not(:empty) { display: block; margin: 0 0 6px; color: var(--ds-danger); font-weight: var(--ds-fw-medium); }
/* форма «Оставьте заявку» на страницах услуг/корп (grid: поля | фото менеджера в ::after):
   подпись капчи — под полями в левой колонке, фото занимает обе строки справа. Без этого
   подпись шла на всю ширину отдельной строкой, и фото уезжало под неё (kr, 2026-10-14) */
@media (min-width: 900px) {
  .container.order form.ajax_form > .smartcaptcha-notice { grid-column: 1; grid-row: 2; align-self: start; margin-top: -18px; }
  .container.order form.ajax_form::after { grid-row: 1 / span 2; }
}

/* Хлебные крошки на «Корпоративным клиентам» Москвы: у неё свой шаблон (23, первый экран как на
   Главной), крошек в нём не было — на проде они есть (BreadcrumbList), SEO не теряем (2026-10-15).
   Над первым экраном, в той же сетке; вид — как у крошек на страницах городов (.newtemplate .main nav). */
.corp-page > .corp-crumbs {
  width: auto; max-width: var(--ds-container, 1440px); margin: 0 auto;
  padding: 24px var(--ds-gutter) 0; box-sizing: border-box;
}
.corp-crumbs nav { font-size: var(--ds-body-s); color: var(--ds-text-3); margin: 0; }
.corp-crumbs nav a { color: var(--ds-text-3); text-decoration: none; transition: color var(--ds-transition); }
.corp-crumbs nav a:hover { color: var(--ds-brand); }
.corp-page > .corp-crumbs + .main_form .container { padding-top: 24px; }
