/* ============================================================
   Health ProtectorGuard (UnitedHealthcare) — стили страницы продукта.

   Перенос из Figma: фрейм «Desktop» (node 619:2176). Пока на странице
   десять блоков — «Герой» (node 720:2348), «Средняя скидка сети»
   (node 717:6312), «На примере» (node 669:338), «Сколько стоит год на
   программе» (node 634:3771), «Мини-статистика» (node 717:6254), «Где
   доступно» (node 670:1660), «Порядок действий» (node 720:5244),
   «Услуги и выплаты» (node 679:7267), «Один на один» (node 672:5832) и
   «FAQ» (node 670:5531). Остальные блоки макета добавляются следующими
   задачами.

   Брейкпоинты — утверждённые проектом (.memory-bank/ui-rules.md):
     Mobile   ≤ 767px   (макет 375)
     Tablet   768–1023  (макет 800)
     Desktop  ≥ 1024px  (макет 1440)

   Макет есть только для десктопа, поэтому планшет и мобильный собраны
   по тем же пропорциям: колонка контента с 600px ужимается по ширине
   экрана, кегли и отступы уменьшаются токенами ниже.

   Файл подключается поверх base.css / landing.css, поэтому все правила
   скоупятся классом .hpg (и .hpg-page на <body>) — как это сделано для
   главной в landing/css/main.css. Блок «Нейтрализация» гасит только то,
   что base.css навязывает элементам внутри страницы.

   Шрифт Hanken Grotesk объявлен в static/css/fonts.css.
   ============================================================ */

/* --- Токены -------------------------------------------------
   Палитра — та же, что у главной и статей (landing/css/main.css).
   Геометрия и типографика — Desktop, значения сняты с макета.
   ----------------------------------------------------------- */
.hpg-page {
  /* палитра */
  --c-primary: #e25c42;
  --c-white: #ffffff;
  --c-page: #fdf8f4;
  --c-surface: #f5efe9;
  --c-border: #e4dcd5;
  --c-muted: #8a817b;
  --c-body: #4a433d;
  --c-ink: #2a2420;
  --c-green: #2e8b6e;
  /* Штат под курсором на карте — тот же тёмный оттенок, что на главной;
     цвет читает общий landing/css/us-map.css. */
  --c-hover: #c9462e;

  /* геометрия */
  --pad-x: 120px;
  --pad-y: 96px;
  --col-w: 600px;
  --chart-w: 700px;   /* полосы блока «Сколько стоит год» шире колонки текста */
  --wide-w: 1024px;   /* «Услуги и выплаты», переписка, ряд с формой и список FAQ */

  /* типографика */
  --fs-eyebrow: 22px;
  --lh-eyebrow: 30px;
  --fs-h1: 48px;      /* заголовок героя — единственный h1 страницы */
  --lh-h1: 58px;
  --fs-h2: 36px;
  --lh-h2: 44px;
  --fs-h4: 22px;      /* заголовок карточки FAQ и формы записи */
  --lh-h4: 30px;
  --fs-lead: 18px;
  --lh-lead: 28px;
  --fs-body: 16px;
  --lh-body: 24px;
  --fs-body-sm: 14px;
  --lh-body-sm: 20px;
  --fs-cap: 13px;
  --lh-cap: 18px;
  --fs-stat: 40px;        /* метрики блока «Где доступно» */
  --fs-stat-label: 14px;
  --lh-stat-label: 20px;
  --fs-example-value: 48px;   /* крупные суммы блока «На примере» */
  --lh-example-value: 58px;
  --fs-discount-value: 192px; /* «58%» блока «Средняя скидка сети» */
  --lh-discount-value: 192px;

  background-color: var(--c-page);
}

@media (max-width: 1023px) {
  /* Tablet 800 */
  .hpg-page {
    --pad-x: 40px;
    --pad-y: 72px;
    --fs-h1: 38px;
    --lh-h1: 46px;
    --fs-stat: 32px;
    --fs-example-value: 38px;
    --lh-example-value: 46px;
    --fs-discount-value: 120px;
    --lh-discount-value: 120px;
  }
}

@media (max-width: 767px) {
  /* Mobile 375 */
  .hpg-page {
    --pad-x: 16px;
    --pad-y: 56px;

    --fs-eyebrow: 15px;
    --lh-eyebrow: 22px;
    --fs-h1: 30px;
    --lh-h1: 38px;
    --fs-h2: 26px;
    --lh-h2: 32px;
    --fs-h4: 18px;
    --lh-h4: 26px;
    --fs-lead: 16px;
    --lh-lead: 24px;
    --fs-body: 15px;
    --lh-body: 22px;
    --fs-body-sm: 14px;
    --lh-body-sm: 20px;
    --fs-cap: 12px;
    --lh-cap: 16px;
    --fs-stat: 28px;
    --fs-stat-label: 12px;
    --lh-stat-label: 16px;
    --fs-example-value: 30px;
    --lh-example-value: 36px;
    --fs-discount-value: 84px;
    --lh-discount-value: 88px;
  }
}

/* --- Нейтрализация -----------------------------------------
   base.css задаёт глобальную типографику и отступы разделам
   (section { margin-top: 12rem }, h1/h2 в rem, p 2rem и т.д.).
   Внутри страницы они гасятся, дальше типографику задают классы.
   ----------------------------------------------------------- */
.hpg *,
.hpg *::before,
.hpg *::after {
  box-sizing: border-box;
}

.hpg section,
.hpg article {
  margin: 0;
  padding: 0;
  overflow: visible;
}

.hpg h1,
.hpg h2,
.hpg h3,
.hpg p,
.hpg span,
.hpg th,
.hpg td {
  margin: 0;
  padding: 0;
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
  font-weight: inherit;
  color: inherit;
  text-align: inherit;
}

/* <ol>/<li> — только у «Порядка действий»: список остаётся списком для
   скринридера (порядок шагов — это смысл, а не оформление), а браузерные
   отступ, маркер и margin у самого <ol> сняты, как и у остальных тегов
   выше. */
.hpg ul,
.hpg ol {
  margin: 0;
  padding: 0;
  list-style: none;
}

.hpg li {
  margin: 0;
}

.hpg a {
  color: inherit;
  font-size: inherit;
}

.hpg img {
  display: block;
  max-width: 100%;
  object-fit: initial;
  object-position: initial;
}

.hpg button {
  font: inherit;
  color: inherit;
  background: none;
  border: 0;
}

/* base.css задаёт полям padding: 1.6rem и свою рамку. Для флажка 16×16
   это смертельно: при box-sizing: border-box поле не может стать уже
   собственных полей, и квадрат раздувало до 31px. */
.hpg input {
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  font: inherit;
  color: inherit;
  transition: none;
}

/* ============================================================
   Проявитель содержимого при скролле.

   Здесь только предсостояния — то, из чего элемент выходит. Само
   движение ведёт health-protector-guard.js через Web Animations:
   держать одну и ту же хореографию в двух местах нельзя, а задержки
   и лесенка всё равно считаются на ходу.

   Всё погашено под меткой [data-hpg-motion], которую ставит короткий
   скрипт в <head> страницы. Нет JS — нет метки, и страница видна
   целиком: проявление это украшение, а не условие читаемости.

   [data-reveal-done] снимает предсостояние ровно в тот момент, когда
   за элемент берётся анимация: дальше кадрами правит она, а fill:
   backwards держит его спрятанным до своей задержки.
   ============================================================ */
[data-hpg-motion] .hpg [data-reveal]:not([data-reveal-done]) {
  opacity: 0;
}

/* Обычный выход — подъём. */
[data-hpg-motion] .hpg [data-reveal=""]:not([data-reveal-done]) {
  transform: translate3d(0, 14px, 0);
}

/* Реплики и стороны переписки приходят каждая со своего края. */
[data-hpg-motion] .hpg [data-reveal="left"]:not([data-reveal-done]) {
  transform: translate3d(-14px, 12px, 0);
}

[data-hpg-motion] .hpg [data-reveal="right"]:not([data-reveal-done]) {
  transform: translate3d(14px, 12px, 0);
}

/* Знак «×» между сторонами: ставится последним и коротким щелчком. */
[data-hpg-motion] .hpg [data-reveal="pop"]:not([data-reveal-done]) {
  transform: scale(0.72);
}

/* Черта раздёргивается от середины в обе стороны. */
.hpg [data-reveal="rule"] {
  transform-origin: 50% 50%;
}

[data-hpg-motion] .hpg [data-reveal="rule"]:not([data-reveal-done]) {
  transform: scaleX(0);
}

/* Рисунок гасится только прозрачностью: его проявляет маска, а если
   маски в браузере нет — проявитель откатывается на обычный подъём,
   и нужный transform приходит из самих кадров. */

/* Спокойный режим: содержимое всё так же выходит по мере чтения, но
   без сдвигов и щелчков — одной прозрачностью. Так же сделано в
   чат-форме подбора (landing/css/insurance-chat.css). */
@media (prefers-reduced-motion: reduce) {
  [data-hpg-motion] .hpg [data-reveal]:not([data-reveal-done]) {
    transform: none;
  }
}

/* --- Каркас -------------------------------------------------- */
.hpg {
  background-color: var(--c-page);
  color: var(--c-body);
  font-family: "Hanken Grotesk", system-ui, -apple-system, "Segoe UI", sans-serif;
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ============================================================
   Герой. Источник: Figma, node 720:2348.

   Первый экран страницы: заголовок и подводка слева, карандашный
   рисунок (семья у дома) справа, две кнопки — оформить сразу или
   попросить консультацию. Единственный h1 на странице — остальные
   заголовки блоков ниже это h2.

   Вторая кнопка в макете — без рамки и заливки, просто текст фирменным
   цветом с тем же полем клика, что у первой (те же px по вертикали и
   горизонтали) — так и перенесено, а не дорисована рамка «для
   симметрии»: в макете её нет, и на скриншоте её тоже не видно.

   Рисунок — тот же приём, что и у consult-call.webp в блоке «Один на
   один»: карандашная иллюстрация проявляется снизу вверх через маску
   ([data-reveal="draw"]), будто её дорисовывают. Текстовая колонка
   собирается быстрее, чем обычно на странице: шаг лесенки эйебrow →
   заголовок → подводка сокращён до 50ms (вместо 70), а кнопки идут
   следом со своей явной задержкой в 150ms — герой не должен тянуться,
   это первое, что видит читатель.

   Правка макета: ряд ограничен var(--wide-w) (1024px — тем же пределом,
   что «Услуги и выплаты», переписка и FAQ) и прижат к нижней границе
   секции (align-items: flex-end на обоих уровнях — и у самой секции, и
   у ряда), а не центрирован. Отступы сверху и снизу держит обычный
   padding: var(--pad-y) — те же 96px, что и у остальных блоков
   страницы; секция при этом не жёстче 600px (min-height, не height —
   см. правило ниже), а сверху остаётся столько места, сколько не занял
   контент, а не ровно 96px: в макете он тоже не по центру и не
   впритык к верху, а именно снизу от 600.

   Рисунок теперь не абсолютный: точный размер 442×295 и обычное место
   в ряду рядом с текстом, без просвета (gap: 0 — в макете колонка
   текста растягивается ровно до левого края картинки). Читаемость
   длинных строк при этом бережёт не ширина колонки, а max-width:600px
   у самой подводки — так же, как в остальных блоках страницы, только
   на уровне абзаца, а не всего блока: колонка теперь гибкая
   (flex: 1 1 0), и её итоговая ширина — то, что осталось от 1024px
   после вычета рисунка, а не фиксированная величина.
   ============================================================ */
.hpg .hpg-hero {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  min-height: 600px;
  padding: var(--pad-y) var(--pad-x);
  background-color: var(--c-page);
}

.hpg .hpg-hero__inner {
  display: flex;
  align-items: flex-end;
  width: 100%;
  max-width: var(--wide-w);
}

/* flex: 1 1 0 — колонка забирает всё, что рисунок (уже флекс-элемент
   с точным размером) не занял в ряду шириной до 1024px. */
.hpg .hpg-hero__content {
  display: flex;
  flex: 1 1 0;
  min-width: 0;
  flex-direction: column;
  align-items: flex-start;
  gap: 45px;
}

.hpg .hpg-hero__block {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 32px;
  width: 100%;
}

.hpg .hpg-hero__headline {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  width: 100%;
}

.hpg .hpg-hero__eyebrow {
  color: var(--c-primary);
  font-size: var(--fs-eyebrow);
  line-height: var(--lh-eyebrow);
  font-weight: 700;
  letter-spacing: 0.25em;
}

.hpg .hpg-hero__title {
  color: var(--c-ink);
  font-size: var(--fs-h1);
  line-height: var(--lh-h1);
  font-weight: 600;
  letter-spacing: -0.01em;
}

.hpg .hpg-hero__lead {
  max-width: 600px;
  color: var(--c-body);
  font-size: var(--fs-lead);
  line-height: var(--lh-lead);
}

.hpg .hpg-hero__actions {
  display: flex;
  align-items: center;
  gap: 16px;
}

.hpg .hpg-hero__button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 140px;
  padding: 15px 32px;
  border-radius: 8px;
  font-size: var(--fs-body);
  line-height: 22px;
  font-weight: 500;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  transition:
    background-color 160ms ease,
    transform 120ms ease;
}

.hpg .hpg-hero__button--primary {
  width: 250px;
  background-color: var(--c-primary);
  color: var(--c-white);
}

.hpg .hpg-hero__button--primary:hover {
  background-color: #d24f36;
}

.hpg .hpg-hero__button:active {
  transform: scale(0.98);
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-hero__button {
    transition: none;
  }
}

/* Точный размер из макета — 442×295, не резиновый: рисунок больше не
   тянется под высоту текста и не растёт с шириной экрана. Сжиматься
   ему тоже незачем: колонка текста рядом гибкая (flex: 1 1 0) и сама
   уступает первой, если ряду не хватает места, — тем же способом, что
   и раньше на странице (например, .hpg-consult__illustration отдаёт
   форме её 450px и живёт на оставшемся). object-fit: cover — на случай
   лёгкого расхождения пропорции (442:295 против 1536:1024 у файла), не
   для кадрирования. */
.hpg .hpg-hero__illustration {
  flex: 0 0 442px;
  width: 442px;
  height: 295px;
  object-fit: cover;
}

/* --- Планшет -----------------------------------------------------
   Текст и рисунок делят ряд только на широком экране: на 800px
   гибкой колонке текста место найдётся, но рисунок с фиксированным
   размером — нет (442px из 1024 многовато для 800-й раскладки), и
   заголовок пошёл бы в четыре строки. Рисунок опускается под текст и
   держит собственный предел ширины — он подводка к заголовку, а не
   отдельная картина.
   ----------------------------------------------------------- */
@media (max-width: 1023px) {
  /* На стыке секция уже не 600px из макета: в колонке текст и рисунок
     и так занимают заметную высоту, а фиксированная планка сверху
     давала бы только пустое поле снизу. */
  .hpg .hpg-hero {
    min-height: 0;
  }

  .hpg .hpg-hero__inner {
    flex-direction: column;
    align-items: center;
    gap: 48px;
  }

  .hpg .hpg-hero__content {
    /* В колонке flex: 1 1 0 больше не про раздел ширины с рисунком —
       это была настройка для ряда. Здесь content — просто обычный
       блок нужной ему высоты. */
    flex: 0 0 auto;
    align-items: center;
    gap: 32px;
    width: 100%;
  }

  .hpg .hpg-hero__block {
    align-items: center;
    max-width: var(--col-w);
    text-align: center;
  }

  .hpg .hpg-hero__headline {
    align-items: center;
  }

  /* В колонке рисунок больше не должен быть буквально 450×300 — точный
     размер был условием ряда из макета. Здесь он снова резиновый и
     держит только предел ширины, как любая другая иллюстрация-подводка
     на странице. */
  .hpg .hpg-hero__illustration {
    flex: 0 0 auto;
    width: 100%;
    max-width: 480px;
    height: auto;
  }
}

@media (max-width: 767px) {
  .hpg .hpg-hero__inner {
    gap: 32px;
  }

  .hpg .hpg-hero__content {
    gap: 24px;
  }

  .hpg .hpg-hero__block {
    gap: 20px;
  }

  .hpg .hpg-hero__actions {
    flex-direction: column;
    align-items: stretch;
    width: 100%;
  }

  .hpg .hpg-hero__button--primary {
    width: 100%;
  }

  .hpg .hpg-hero__illustration {
    max-width: 340px;
  }
}

/* ============================================================
   Блок «Средняя скидка сети». Источник: Figma, node 717:6312.

   Первый экран страницы, перед «На примере» — одна огромная цифра вместо
   объяснений: сеть даёт скидку такого масштаба ещё до того, как читатель
   узнал, как считаются выплаты. Устройство нарочно самое простое на
   странице — фигура (число + подпись) и сноска под ней, — но простота
   работает на цифру, а не в ущерб ей.

   Движение — «выход штампом», а не подъём, как у остального контента:
   число выскакивает готовым результатом ([data-reveal="pop"] — тот же
   короткий щелчок с перелётом, что ставит знак «×» в блоке «Один на
   один»), а не выезжает по частям. Подпись и сноска идут следом обычным
   шагом группы (70ms). Число к тому же считается с нуля до 58% —
   тем же JS-счётчиком (discountCounter() в health-protector-guard.js),
   что ведёт диаграмму года и суммы блока «На примере».
   ============================================================ */
.hpg .hpg-discount {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: var(--pad-y) var(--pad-x);
  background-color: var(--c-page);
  /* Редизайн (Figma, node 749:2697): слои фона снизу вверх, как в самом
     макете (там это заливки Solid → Pattern → Radial → Radial → Linear,
     сверху вниз в панели «Fill» — то есть в обратном порядке
     перекрытия):
       1) сплошной var(--c-page) в основании (background-color);
       2) плитка со знаком UnitedHealthcare (discount-watermark.svg —
          настоящий логотип из самой Figma-заливки, снят через
          download_assets; прозрачность 0.4 на каждой копии — как
          «Pattern 40%» у слоя в макете);
       3-4) две радиальные виньетки поверх плитки, обе гасят её ОТ ЦЕНТРА
          К КРАЮ (сплошной цвет в середине, дальше плавно в прозрачность) —
          в макете это эллипс по пропорциям блока и более широкий круг,
          здесь то же самое двумя background-radial-gradient разной
          формы (50%×65% и 65%×50%), без второго, встречного градиента:
          проверено на скриншоте — пара «прозрачный→сплошной» и «сплошной→
          прозрачный» гасят друг друга почти везде и плитка не видна
          вовсе, поэтому оставлен только вариант «гаснет от центра»;
       5) верх/низ гаснут в сплошной фон обычным линейным градиентом.
     Вместе линейный и радиальные оставляют плитку видимой кольцом вокруг
     цифры, но не впритык к верху/низу секции — как в макете.
     Размер виньеток задан в процентах, а не в пикселях макета (720px):
     так они масштабируются вместе с блоком. На мобильном экране, где
     секция намного уже, фиксированные пиксели перекрыли бы весь узор
     целиком. */
  background-image:
    linear-gradient(180deg,
      var(--c-page) 0%,
      transparent 15%,
      transparent 85%,
      var(--c-page) 100%),
    radial-gradient(65% 50% at center,
      var(--c-page) 40%,
      transparent 100%),
    radial-gradient(50% 65% at center,
      var(--c-page) 40%,
      transparent 100%),
    url('../images/health_protector_guard/discount-watermark.svg');
  background-repeat: no-repeat, no-repeat, no-repeat, repeat;
}

.hpg .hpg-discount__block {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  text-align: center;
}

.hpg .hpg-discount__figure {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  color: var(--c-primary);
}

.hpg .hpg-discount__value {
  font-size: var(--fs-discount-value);
  line-height: var(--lh-discount-value);
  font-weight: 600;
  letter-spacing: -0.01em;
  /* Цифры считаются с нуля JS-ом (discountCounter); на такой крупной
     кегле пропорциональные цифры Hanken Grotesk почти не меняют ширину
     между кадрами счёта, и число не гуляет по центру. */
  font-variant-numeric: tabular-nums;
}

.hpg .hpg-discount__label {
  font-size: 28px;
  line-height: 32px;
  font-weight: 700;
  letter-spacing: 0.02em;
}

.hpg .hpg-discount__caption {
  max-width: 420px;
  color: var(--c-muted);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
}

/* --- Планшет и мобильный ---------------------------------------
   Кегль числа ведут токены (--fs-discount-value), остальное — те же
   пропорции, что и в остальных блоках страницы.
   ----------------------------------------------------------- */
@media (max-width: 1023px) {
  .hpg .hpg-discount__block {
    gap: 24px;
  }

  .hpg .hpg-discount__figure {
    gap: 24px;
  }
}

@media (max-width: 767px) {
  .hpg .hpg-discount__block {
    gap: 20px;
  }

  .hpg .hpg-discount__figure {
    gap: 16px;
  }

  .hpg .hpg-discount__label {
    font-size: 20px;
    line-height: 26px;
  }

  .hpg .hpg-discount__caption {
    max-width: 320px;
  }
}

/* ============================================================
   Блок «На примере». Источник: Figma, node 669:338.

   Первый блок страницы: прежде чем объяснять условия программы, ей
   показывают её работу на одном случае. Устройство простое —
   заголовок, четыре цифры счёта и полоса «из чего он складывается» —
   но именно из-за простоты движение здесь держит весь вес премиальности:
   ничего не появляется просто так, каждый слой выходит на подготовленное
   предыдущим место.

   Хореография (все тайминги — задержки старта, не длительности):

     0ms    → шапка (эйебrow/заголовок/подводка), обычным проявителем
     0-270  → четыре цифры счёта, лесенкой по 90ms, и тут же сами суммы
              считаются с нуля до значения из разметки (JS,
              exampleCounters() в health-protector-guard.js) — то же
              исчисление, что ведёт диаграмму года
     360ms  → подпись «ИЗ ЧЕГО СКЛАДЫВАЮТСЯ…»
     420-580 → три сегмента полосы вытягиваются от нуля до своей доли,
              каждый на 900ms и с своей задержкой — оттого и растут не
              разом, а один за другим, как будто сумма складывается на
              глазах; подписи внутри проступают через overflow: hidden
              по мере роста, а не появляются вдруг
     520ms  → сноска

   Первые два яруса ведёт общий проявитель (data-reveal), рост полосы —
   отдельный CSS-переход, включаемый тем же [data-reveal-done], который
   проявитель ставит на .hpg-example__bar: явную задержку самого
   перехода несут селекторы :nth-child ниже, а не JS. Без JS всё, что
   для JS собиралось (обнуление сумм, нулевая ширина сегментов), гасится
   отсутствием метки [data-hpg-motion] — блок показывает готовые числа
   и полосу целиком, как обычная страница.

   Доли полосы посчитаны от макетных пикселей на раме 1024px (699 / 200
   / 125 — скидка сети растягивается, план и «вы» фиксированы), переведены
   в проценты ширины: 68.26% / 19.53% / 12.21%, минус своя доля от 8px
   просвета между сегментами (см. .hpg-example__segment--* ниже). Так
   пропорция макета держится на любой ширине блока, а не только на
   исходных 1024px.
   ============================================================ */
.hpg .hpg-example {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  padding: var(--pad-y) var(--pad-x);
  /* «from-85%» из Figma (node 669:338): фон остаётся var(--c-page) до
     85% высоты блока, затем уходит в var(--c-surface) — тот же тон,
     каким начинается сплошная подложка «Порядка действий» ниже. */
  background-image: linear-gradient(to bottom, var(--c-page) 85%, var(--c-surface) 100%);
  background-color: var(--c-page);
}

.hpg .hpg-example__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  width: 100%;
  max-width: var(--col-w);
  text-align: center;
}

.hpg .hpg-example__headline {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  width: 100%;
}

.hpg .hpg-example__body {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  width: 100%;
  max-width: var(--wide-w);
}

/* --- Строка счёта ---------------------------------------------
   Четыре суммы через тонкие вертикальные черты, поровну по ширине ряда.
   Черты не проявляются отдельно — они разметка, а не содержание, и
   вниманием читателя не торгуют.
   ----------------------------------------------------------- */
.hpg .hpg-example__stats {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}

.hpg .hpg-example__stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  text-align: center;
  white-space: nowrap;
}

.hpg .hpg-example__stat-value {
  color: var(--c-body);
  font-size: var(--fs-example-value);
  line-height: var(--lh-example-value);
  font-weight: 600;
  letter-spacing: -0.01em;
  /* Числа считаются с нуля JS-ом (exampleCounters); ширина у моноширинных
     цифр Hanken Grotesk почти не гуляет между кадрами счёта, поэтому
     соседние суммы и черты не дрожат по ходу подсчёта. */
  font-variant-numeric: tabular-nums;
}

.hpg .hpg-example__stat-value--accent {
  color: var(--c-primary);
}

.hpg .hpg-example__stat-label {
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.hpg .hpg-example__divider {
  align-self: stretch;
  flex: 0 0 auto;
  width: 1px;
  border-radius: 1px;
  background-color: var(--c-border);
}

/* --- Состав счёта -----------------------------------------------
   Подпись и полоса из трёх сегментов: скидка сети (растягивается),
   выплата по плану и доля клиента — обе фиксированной доли, как в
   макете. Текст сегмента обрезается вместе с шириной при росте, поэтому
   подписи внутри не нужно прятать отдельно.
   ----------------------------------------------------------- */
.hpg .hpg-example__breakdown {
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 100%;
}

.hpg .hpg-example__composition-label {
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.hpg .hpg-example__bar {
  display: flex;
  /* Просвет между сегментами — 8px, как в макете. Сам контейнер уже не
     обрезает и не скругляет: с просветом между кусками через него было
     бы видно квадратные внутренние углы, поэтому скругление и обрезка
     переехали на каждый сегмент отдельно. */
  gap: 8px;
  width: 100%;
  height: 52px;
}

.hpg .hpg-example__segment {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  padding: 0 12px;
  overflow: hidden;
  border-radius: 8px;
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  font-weight: 700;
  letter-spacing: 0.02em;
  white-space: nowrap;
  transition: width 900ms cubic-bezier(0.22, 0.61, 0.36, 1), opacity 500ms ease;
}

/* Доли по-прежнему считаются от макетной рамы 1024px (699 / 200 / 125),
   но теперь минус свои 8px просвета — иначе три сегмента с двумя
   просветами были бы на 16px шире самой полосы. Просвет разнесён по
   сегментам пропорционально их доле: 16px × (699|200|125)/1024. */
.hpg .hpg-example__segment--discount {
  width: calc(68.26% - 10.92px);
  background-color: var(--c-surface);
  color: var(--c-muted);
}

.hpg .hpg-example__segment--plan {
  width: calc(19.53% - 3.13px);
  background-color: #fbeae3;
  color: var(--c-primary);
}

.hpg .hpg-example__segment--you {
  width: calc(12.21% - 1.95px);
  background-color: var(--c-primary);
  color: var(--c-white);
}

/* Сегменты растут по очереди, а не разом: у каждого своя задержка. Гасит
   их проявитель — как только он отмечает .hpg-example__bar сделанным
   ([data-reveal-done]), правило ниже перестаёт держать сегменты нулевыми,
   и они уходят в переход, отсчитывая уже свою собственную задержку. */
.hpg .hpg-example__bar .hpg-example__segment:nth-child(1) { transition-delay: 420ms; }
.hpg .hpg-example__bar .hpg-example__segment:nth-child(2) { transition-delay: 500ms; }
.hpg .hpg-example__bar .hpg-example__segment:nth-child(3) { transition-delay: 580ms; }

[data-hpg-motion] .hpg .hpg-example__bar:not([data-reveal-done]) .hpg-example__segment {
  width: 0%;
  opacity: 0;
}

.hpg .hpg-example__footnote {
  width: 100%;
  color: var(--c-muted);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
  text-align: center;
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-example__segment {
    transition: none;
  }
}

/* --- Планшет --------------------------------------------------- */
@media (max-width: 1023px) {
  .hpg .hpg-example {
    gap: 48px;
  }

  .hpg .hpg-example__head {
    gap: 24px;
  }

  .hpg .hpg-example__headline {
    gap: 20px;
  }

  .hpg .hpg-example__body {
    gap: 48px;
  }
}

/* --- Мобильный ---------------------------------------------------
   Четыре цифры в ряд на 343px не читаются — сетка 2×2 без вертикальных
   черт (в двух рядах они уже ничего не разделяют, только режут строки).
   ----------------------------------------------------------- */
@media (max-width: 767px) {
  .hpg .hpg-example {
    gap: 40px;
  }

  .hpg .hpg-example__head {
    gap: 20px;
  }

  .hpg .hpg-example__headline {
    gap: 12px;
  }

  .hpg .hpg-example__body {
    gap: 40px;
  }

  .hpg .hpg-example__stats {
    display: grid;
    /* minmax(0, 1fr), а не голое 1fr: у голого колонка не может стать
       уже своего минимального содержимого, и более длинная подпись
       («СЧЁТ ЗА ИССЛЕДОВАНИЕ» против «ВАШИ РАСХОДЫ») растягивала свою
       колонку шире соседней — сетка 2×2 переставала быть 2×2 на вид. */
    grid-template-columns: repeat(2, minmax(0, 1fr));
    row-gap: 28px;
    column-gap: 16px;
  }

  .hpg .hpg-example__divider {
    display: none;
  }

  .hpg .hpg-example__bar {
    height: 44px;
  }

  .hpg .hpg-example__segment {
    padding: 0 8px;
    font-size: 12px;
    line-height: 16px;
  }
}

/* ============================================================
   Блок «Порядок действий». Источник: Figma, node 720:5244.

   Стоит между «Где доступно» и «Услуги и выплаты» — прежде чем показать
   суммы по каждой услуге, страница показывает, откуда вообще берётся
   выплата: четыре шага от обращения за помощью до сетевой скидки.

   Соединительная черта одна на все четыре шага и рисуется не поштучно
   (кружок + отрезок в каждом шаге, как в макете), а одним элементом на
   всю ширину секции — в том числе за пределами колонки в 1024px, как в
   макете: там линия тоже проведена через боковые поля до самого края
   кадра (ноды 726:5420 и 726:5422), а не обрывается у первого и
   последнего кружка. .hpg-steps__line лежит в .hpg-steps__body (а не
   прямо в секции): так «top» кружков считается от начала самой линии
   шагов, а не от высоты шапки, которая может стать другой в любой
   локали. Смещение до истинного края секции — calc(-1 * var(--pad-x)):
   .hpg-steps__body уже стоит вплотную к внутреннему краю паддинга,
   поэтому ровно минус паддинг и даёт кадр целиком.

   Сами кружки — заливка CSS, а не картинка: обычный цветной круг,
   перерисовывать его файлом незачем.
   ============================================================ */
.hpg .hpg-steps {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  padding: var(--pad-y) var(--pad-x);
  /* Тот же приём, что у блока «На примере»: до 85% высоты фон остаётся
     var(--c-page), затем уходит в var(--c-surface) — ровно тот тон,
     каким начинается сплошной фон «Услуги и выплаты» сразу под этим
     блоком. */
  background-image: linear-gradient(to bottom, var(--c-page) 85%, var(--c-surface) 100%);
  background-color: var(--c-page);
}

.hpg .hpg-steps__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  width: 100%;
  max-width: var(--col-w);
  text-align: center;
}

.hpg .hpg-steps__headline {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  width: 100%;
}

/* Обёртка нужна только затем, чтобы соединительная линия точно знала,
   от какой точки её позиционировать (см. комментарий блока выше). */
.hpg .hpg-steps__body {
  position: relative;
  width: 100%;
}

.hpg .hpg-steps__timeline {
  display: flex;
  width: 100%;
  max-width: var(--wide-w);
  margin: 0 auto;
}

.hpg .hpg-steps__line {
  position: absolute;
  left: calc(-1 * var(--pad-x));
  right: calc(-1 * var(--pad-x));
  /* Половина высоты кружка (24px) — линия идёт точно по его центру. */
  top: 12px;
  height: 4px;
  border-radius: 2px;
  background-color: var(--c-border);
}

.hpg .hpg-steps__step {
  display: flex;
  flex: 1 1 0;
  min-width: 0;
  flex-direction: column;
  align-items: flex-start;
  gap: 32px;
}

.hpg .hpg-steps__marker {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
}

/* Поверх .hpg-steps__line — общая черта проходит у кружка ровно по
   центру, а не под ним. */
.hpg .hpg-steps__dot {
  position: relative;
  flex: 0 0 auto;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background-color: var(--c-primary);
}

.hpg .hpg-steps__label {
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.hpg .hpg-steps__text {
  max-width: 250px;
  color: var(--c-body);
  font-size: var(--fs-lead);
  line-height: var(--lh-lead);
}

/* --- Планшет и мобильный -----------------------------------------
   Четыре колонки в ряд на 800px и тем более на 375px не читаются:
   длинные шаги (03 и 04) сжались бы до пары слов в строке. Соединительная
   черта в макете рассчитана на горизонтальный ряд и своего варианта для
   сетки/колонки не имеет — здесь она просто гасится.
   ----------------------------------------------------------- */
@media (max-width: 1023px) {
  .hpg .hpg-steps {
    gap: 48px;
  }

  .hpg .hpg-steps__head {
    gap: 24px;
  }

  .hpg .hpg-steps__headline {
    gap: 20px;
  }

  .hpg .hpg-steps__line {
    display: none;
  }

  .hpg .hpg-steps__timeline {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 40px 32px;
  }

  .hpg .hpg-steps__text {
    max-width: none;
  }
}

@media (max-width: 767px) {
  .hpg .hpg-steps {
    gap: 40px;
  }

  .hpg .hpg-steps__head {
    gap: 20px;
  }

  .hpg .hpg-steps__timeline {
    grid-template-columns: 1fr;
    gap: 32px;
  }
}

/* ============================================================
   Блок «Услуги и выплаты».
   Источник шапки: Figma, node 679:7267.
   Источник таблицы: «Таблица» (node 704:5735) и «Таблица (hover)»
   (node 704:5823).

   Сетка таблицы — четыре равных колонки с просветами по 8px: названия
   услуг и три плана. Переключатель отдельной колонки больше не занимает
   — он переехал в первую ячейку шапки (см. .hpg-services__switch-cell
   ниже). В макете блок шириной 1200 и колонка выходит 296px
   (296×4 + 8×3 = 1200); здесь блок ограничен 1024px (--wide-w, как
   переписка и FAQ), и колонка сжимается до 250px. Колонки заданы
   долями, а не пикселями, поэтому пропорция макета держится при любой
   ширине.

   Строка — отдельный элемент со своей сеткой из тех же пяти колонок, а
   не ряд ячеек в общем гриде. Это стоит повторения template-columns, но
   даёт главное: наведение на ячейку видно всей строке обычным
   .hpg-services__row:hover, без JS и без индексов в разметке.

   Правка фона (нода 704:4823): секция теперь заливается var(--c-surface)
   вместо var(--c-page), а панель сноски — наоборот, var(--c-page)
   вместо var(--c-surface). Раньше подложка была тёплой на общем фоне
   страницы, теперь общий фон сам стал подложкой, а светлая панель
   выделяется на нём как более яркое пятно.
   ============================================================ */
.hpg .hpg-services {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: var(--pad-y) var(--pad-x);
  background-color: var(--c-surface);
}

.hpg .hpg-services__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  width: 100%;
  max-width: var(--wide-w);
}

.hpg .hpg-services__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  width: 100%;
  max-width: var(--col-w);
  text-align: center;
}

.hpg .hpg-services__headline {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  width: 100%;
}

/* ============================================================
   Таблица.

   Цвет текста ячеек берётся не из правил на самих элементах, а из
   наследуемых переменных --ink и --sub. Так подсветка под курсором
   собирается из трёх слоёв, и каждый следующий перебивает предыдущий
   просто потому, что объявлен ближе к тексту, — специфичность
   селекторов в этом не участвует вовсе:

     таблица  → всё гаснет до --c-border, когда курсор на любой ячейке
     строка   → строка под курсором возвращается к обычным цветам
     ячейка   → сама ячейка под курсором уходит в фирменный оранжевый

   Заголовок колонки лежит в другой строке, поэтому его через
   наследование не достать: он подсвечивается отдельным правилом с
   :has(), которое находит его по номеру ребёнка (порядок детей в шапке
   и в строке совпадает).
   ============================================================ */
.hpg .hpg-services__table {
  --ink: var(--c-body);
  --sub: var(--c-muted);
  --switch-on: var(--c-primary);
  /* Цвет кнопок «Оформить»: не завязан на --ink/--sub напрямую, чтобы у
     кнопки под курсором был свой, более выразительный отклик — заливка,
     а не просто смена цвета текста (см. .hpg-services__cta:hover ниже).
     В покое текст --c-muted — тот же тон, что у подписи услуги. */
  --cta-ink: var(--c-muted);
  --cta-border: var(--c-border);
  --pad-block: 32px;

  position: relative;
  width: 100%;
  padding-block: var(--pad-block);
}

/* Четыре черты — по правой границе каждой из четырёх колонок: перед
   Select, между Select и Preferred, между Preferred и Premier, и справа
   от Premier (край блока). Раньше линий было две — они обнимали только
   три колонки с суммами; в новом макете разделена уже вся таблица.

   Считаются по той же сетке — колонка (100% − 3 просвета)/4, столько-то
   колонок пройдено плюс половина просвета до соседней.

   По вертикали черта живёт ровно по содержимому таблицы, а не по всей
   её коробке: отступ сверху и снизу на то и отступ, чтобы оставаться
   пустым. Отсюда общая переменная — разъехаться этим двум величинам
   нельзя. */
.hpg .hpg-services__rule {
  position: absolute;
  top: var(--pad-block);
  bottom: var(--pad-block);
  width: 1px;
  border-radius: 1px;
  background-color: var(--c-border);
}

.hpg .hpg-services__rule--1 {
  left: calc((100% - 24px) / 4 + 4px);
}

.hpg .hpg-services__rule--2 {
  left: calc((100% - 24px) / 2 + 12px);
}

.hpg .hpg-services__rule--3 {
  left: calc((100% - 24px) / 4 * 3 + 20px);
}

.hpg .hpg-services__rule--4 {
  left: 100%;
}

/* --- Строка --------------------------------------------------
   Просветы между строками — margin, а не gap: при сворачивании
   «непопулярных» услуг строка уезжает в нулевую высоту вместе со своим
   отступом, а gap соседей анимировать нечем.
   ----------------------------------------------------------- */
.hpg .hpg-services__row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  align-items: center;
  gap: 8px;
  min-height: 42px;
}

.hpg .hpg-services__row + .hpg-services__row {
  margin-top: 16px;
}

/* Строки с подписью под суммой выше на 6px — как в макете. */
.hpg .hpg-services__row--tall {
  min-height: 48px;
}

/* Шапка: 64px и лишний пиксель под ней — в макете первая группа стоит
   на 81px, то есть 64 + 17. */
.hpg .hpg-services__row--head {
  min-height: 64px;
  margin-bottom: 1px;
}

/* --- Зона наведения ------------------------------------------
   Всё, на что можно навести — название плана, название услуги, ячейка
   с суммой, — растягивается на всю свою клетку сетки и вдобавок
   выходит за неё: на 8px вверх и вниз (это половина просвета между
   строками с каждой стороны) и на 4px по бокам (половина просвета
   между колонками).

   Отрицательный внешний отступ ровно гасит внутренний, поэтому в
   раскладке не меняется ничего: элемент занимает те же координаты, что
   и раньше, но ловит курсор в полтора раза большей площадью. Соседние
   зоны сходятся ровно посередине просвета и не перекрываются.

   Без этого поймать подсветку можно было только по самим буквам:
   строка высотой 42px отдавала под курсор 24px текста, а остальное
   было мёртвой зоной.
   ----------------------------------------------------------- */
.hpg .hpg-services__plan,
.hpg .hpg-services__label,
.hpg .hpg-services__cell,
.hpg .hpg-services__blank {
  align-self: stretch;
  padding: 8px 4px;
  margin: -8px -4px;
}

/* Первая колонка крайняя слева, расширять её туда некуда. */
.hpg .hpg-services__label {
  margin-left: 0;
  padding-left: 0;
}

/* Пустышки в полосах групп. Своего содержимого у них нет — они лишь
   продолжают колонку через полосу группы, чтобы и подсветка, и клик не
   обрывались на «ДИАГНОСТИКЕ» и «БОЛЬНИЦЕ». Ссылка та же, что у цифр,
   но от клавиатуры и скринридера пустышка скрыта (tabindex="-1" и
   aria-hidden в разметке): текста в ней нет, и в обходе по табу она
   была бы просто немой остановкой. */
.hpg .hpg-services__blank {
  display: block;
}

/* --- Названия планов -----------------------------------------
   Ссылка, а не заголовок: по задаче нажатие на название плана ведёт в
   чат оформления так же, как нажатие на любую из его сумм.
   ----------------------------------------------------------- */
.hpg .hpg-services__plan {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  text-align: center;
  text-decoration: none;
}

.hpg .hpg-services__plan-name {
  color: var(--ink);
  font-size: 28px;
  line-height: 36px;
  font-weight: 600;
  transition: color 260ms ease;
}

.hpg .hpg-services__plan-desc {
  color: var(--sub);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  transition: color 260ms ease;
}

/* --- Подписи услуг и заголовки групп ------------------------- */
.hpg .hpg-services__label {
  display: flex;
  align-items: center;
  color: var(--ink);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  transition: color 260ms ease;
}

.hpg .hpg-services__group {
  color: var(--sub);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  transition: color 260ms ease;
}

/* --- Ячейка с суммой -----------------------------------------
   Ссылка, а не текст: по задаче нажатие на любую цифру ведёт к
   оформлению. Кликается только сама ячейка, подпись услуги слева
   остаётся текстом.
   ----------------------------------------------------------- */
.hpg .hpg-services__cell {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  align-self: stretch;
  text-decoration: none;
}

.hpg .hpg-services__value {
  color: var(--ink);
  font-size: var(--fs-h4);
  line-height: var(--lh-h4);
  font-weight: 500;
  white-space: nowrap;
  transition: color 260ms ease;
}

.hpg .hpg-services__value--text {
  font-size: var(--fs-lead);
  line-height: var(--lh-lead);
  font-weight: 400;
}

.hpg .hpg-services__caption {
  color: var(--sub);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
  white-space: nowrap;
  transition: color 260ms ease;
}

/* --- Строка с кнопками -----------------------------------------
   Новая строка (node 726:5732), под последней услугой. Отступ сверху у
   неё больше, чем между обычными строками (32px вместо 16px) — как в
   макете; побеждает общий .hpg-services__row + .hpg-services__row по
   порядку в файле, при той же специфичности (два класса против двух).
   ----------------------------------------------------------- */
.hpg .hpg-services__row.hpg-services__row--cta {
  margin-top: 32px;
}

/* Кнопка — своя ссылка на клетку сетки, а не растянутая зона наведения:
   в отличие от сумм и названий планов у неё есть видимая рамка, так что
   расширять зону незачем. 200×52 и центр колонки — как в макете. */
.hpg .hpg-services__cta {
  display: flex;
  align-items: center;
  justify-content: center;
  justify-self: center;
  width: 200px;
  max-width: 100%;
  height: 52px;
  border: 1px solid var(--cta-border);
  border-radius: 12px;
  background-color: transparent;
  color: var(--cta-ink);
  font-size: var(--fs-body);
  line-height: 22px;
  font-weight: 500;
  text-align: center;
  text-decoration: none;
  transition:
    color 260ms ease,
    border-color 260ms ease,
    background-color 260ms ease;
}

/* --- Подсветка под курсором ----------------------------------
   Только для настоящего hover-указателя: на тач-экране наведения не
   бывает, а залипшая после тапа подсветка гасила бы половину таблицы.
   ----------------------------------------------------------- */
@media (hover: hover) and (pointer: fine) {
  /* 1. Курсор на ячейке, на названии плана, на названии услуги или на
     кнопке «Оформить» — вся таблица уходит в тон черты, кнопки в том
     числе (--cta-ink гаснет тем же движением, что --ink/--sub; рамке
     кнопки гаснуть некуда — она и так --c-border). */
  .hpg .hpg-services__table:has(.hpg-services__cell:hover),
  .hpg .hpg-services__table:has(.hpg-services__plan:hover),
  .hpg .hpg-services__table:has(.hpg-services__blank:hover),
  .hpg .hpg-services__table:has(.hpg-services__label:hover),
  .hpg .hpg-services__table:has(.hpg-services__cta:hover) {
    --ink: var(--c-border);
    --sub: var(--c-border);
    --switch-on: var(--c-border);
    --cta-ink: var(--c-border);
  }

  /* 1а. Курсор на самой кнопке — не просто оттенок текста, а полная
     заливка: фон и рамка фирменным оранжевым, буквы белые. Задано
     обычными свойствами (не через --cta-ink), поэтому по специфичности
     перебивает и состояние покоя, и подсветку колонки ниже — какая бы
     из них ни была активна, кнопка под курсором всегда выглядит так. */
  .hpg .hpg-services__cta:hover {
    background-color: var(--c-primary);
    border-color: var(--c-primary);
    color: var(--c-white);
  }

  /* 2. Строка под курсором возвращает себе обычные цвета — кнопке тоже,
     на случай, если курсор в строке с кнопками, но не на самой кнопке.

     Шапка из этого правила исключена намеренно: когда курсор стоит на
     названии плана, он физически внутри шапки, и без :not() она
     возвращала бы обычный цвет всем трём названиям сразу — вместо
     одного оранжевого получалось бы три тёмных. Строки-заголовки групп
     исключены по той же причине: курсор проходит через них, ведя
     колонку сверху вниз, и подпись группы не должна на это отзываться. */
  .hpg .hpg-services__row:not(.hpg-services__row--head):not(.hpg-services__row--group):hover {
    --ink: var(--c-body);
    --sub: var(--c-muted);
    --cta-ink: var(--c-muted);
  }

  /* 3. Сама ячейка под курсором — фирменным цветом, вместе с подписью. */
  .hpg .hpg-services__cell:hover {
    --ink: var(--c-primary);
    --sub: var(--c-primary);
  }

  /* 4. Курсор на названии услуги — загорается вся её строка: и само
     название, и все три суммы. Зеркало правила для названия плана,
     только там колонка, а здесь строка.

     Спор идёт с правилом 2, которое на ту же строку ставит обычные
     цвета. Поэтому у обоих правил намеренно одинаковый вес (0,5,0) —
     отсюда и лишний с виду :not() ниже, — а исход решает порядок в
     файле: это правило стоит позже и побеждает. Убрать :not() значит
     проиграть спор и снова получить тёмную строку вместо оранжевой. */
  .hpg .hpg-services__row:not(.hpg-services__row--head):has(.hpg-services__label:hover) {
    --ink: var(--c-primary);
    --sub: var(--c-primary);
  }

  /* Заголовок колонки и её кнопка «Оформить», в которой стоит курсор.
     Оба в других строках, до них наследование не дотягивается, поэтому
     ищем по номеру ребёнка — тому же, что и у ячейки под курсором. */
  .hpg .hpg-services__table:has(.hpg-services__cell:nth-child(2):hover) .hpg-services__row--head > *:nth-child(2),
  .hpg .hpg-services__table:has(.hpg-services__cell:nth-child(2):hover) .hpg-services__row--cta > *:nth-child(2),
  .hpg .hpg-services__table:has(.hpg-services__cell:nth-child(3):hover) .hpg-services__row--head > *:nth-child(3),
  .hpg .hpg-services__table:has(.hpg-services__cell:nth-child(3):hover) .hpg-services__row--cta > *:nth-child(3),
  .hpg .hpg-services__table:has(.hpg-services__cell:nth-child(4):hover) .hpg-services__row--head > *:nth-child(4),
  .hpg .hpg-services__table:has(.hpg-services__cell:nth-child(4):hover) .hpg-services__row--cta > *:nth-child(4) {
    --ink: var(--c-primary);
    --sub: var(--c-primary);
    --cta-ink: var(--c-primary);
    --cta-border: var(--c-primary);
  }

  /* Курсор на названии плана, на пустышке в полосе группы (она
     продолжает ту же колонку) или на самой кнопке «Оформить» —
     загорается вся колонка: название, все суммы под ним и кнопка внизу.
     Правило то же по устройству, только наоборот: ищем не заголовок по
     ячейке, а ячейки по заголовку. Селектор задевает и саму шапку (она
     тоже .hpg-services__row), так что название плана красится этим же
     правилом, а строку с кнопками — так же, как и остальные. */
  .hpg .hpg-services__table:has(> .hpg-services__row > *:nth-child(2):is(.hpg-services__plan, .hpg-services__blank, .hpg-services__cta):hover) .hpg-services__row > *:nth-child(2),
  .hpg .hpg-services__table:has(> .hpg-services__row > *:nth-child(3):is(.hpg-services__plan, .hpg-services__blank, .hpg-services__cta):hover) .hpg-services__row > *:nth-child(3),
  .hpg .hpg-services__table:has(> .hpg-services__row > *:nth-child(4):is(.hpg-services__plan, .hpg-services__blank, .hpg-services__cta):hover) .hpg-services__row > *:nth-child(4) {
    --ink: var(--c-primary);
    --sub: var(--c-primary);
    --cta-ink: var(--c-primary);
    --cta-border: var(--c-primary);
  }
}

/* --- Переключатель ---------------------------------------------
   Раньше сидел отдельной, пятой колонкой справа от Premier, дорожка над
   подписью. В новом макете (node 726:5721) он переехал в первую ячейку
   шапки — туда, где раньше был пустой <div></div> над названиями услуг
   — и лёг в один ряд с подписью, а не над ней. */
.hpg .hpg-services__switch-cell {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: flex-start;
  gap: 16px;
}

/* Сам чекбокс невидим — переключатель рисуют дорожка и бегунок,
   связанные с ним через <label for>. */
.hpg .hpg-services__switch {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Дорожка и бегунок из макета: поле 50×31, бегунок 25×25, отступ 3px. */
.hpg .hpg-services__switch-track {
  display: flex;
  align-items: center;
  width: 50px;
  height: 31px;
  padding: 3px;
  border-radius: 25px;
  background-color: var(--c-border);
  cursor: pointer;
  transition: background-color 260ms ease;
}

.hpg .hpg-services__switch:checked ~ .hpg-services__switch-track {
  background-color: var(--switch-on);
}

.hpg .hpg-services__switch-knob {
  width: 25px;
  height: 25px;
  border-radius: 25px;
  background-color: var(--c-white);
  transition: margin-left 320ms cubic-bezier(0.34, 1.26, 0.5, 1);
}

.hpg .hpg-services__switch:checked ~ .hpg-services__switch-track .hpg-services__switch-knob {
  margin-left: 19px;
}

.hpg .hpg-services__switch:focus-visible ~ .hpg-services__switch-track {
  outline: 2px solid var(--c-primary);
  outline-offset: 2px;
}

.hpg .hpg-services__switch-label {
  color: var(--sub);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
  text-align: left;
  white-space: nowrap;
  cursor: pointer;
  transition: color 260ms ease;
}

/* --- Раскрытие всех услуг ------------------------------------
   Ползунок отмечен по умолчанию, поэтому таблица открывается только
   популярными услугами. Сняли отметку — [data-hpg-extra] возвращаются
   в поток.

   :not([data-hpg-collapsing]) — окно для анимации: чекбокс
   переключается мгновенно, и без этой оговорки строки исчезали бы в тот
   же кадр, не дав себя свернуть. Метку ставит и снимает services() в
   landing/js/health-protector-guard.js. Без JS её нет и таблица
   переключается сразу — просто без хода.
   ----------------------------------------------------------- */
.hpg .hpg-services__table:has(.hpg-services__switch:checked):not([data-hpg-collapsing]) [data-hpg-extra] {
  display: none;
}

.hpg .hpg-services__table[data-hpg-collapsing] [data-hpg-extra] {
  overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-services__plan-name,
  .hpg .hpg-services__plan-desc,
  .hpg .hpg-services__label,
  .hpg .hpg-services__group,
  .hpg .hpg-services__value,
  .hpg .hpg-services__caption,
  .hpg .hpg-services__switch-track,
  .hpg .hpg-services__switch-knob,
  .hpg .hpg-services__switch-label,
  .hpg .hpg-services__cta {
    transition: none;
  }
}

/* --- Сноска ------------------------------------------------------ */
.hpg .hpg-services__footnote {
  display: flex;
  flex-direction: column;
  gap: 20px;
  width: 100%;
}

.hpg .hpg-services__footnote-panel {
  display: flex;
  gap: 40px;
  padding: 36px 40px;
  border-radius: 20px;
  background-color: var(--c-page);
}

.hpg .hpg-services__footnote-item {
  display: flex;
  flex: 1 1 0;
  min-width: 0;
  flex-direction: column;
  gap: 10px;
}

.hpg .hpg-services__footnote-label {
  color: var(--c-primary);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.hpg .hpg-services__footnote-text {
  color: var(--c-body);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
}

.hpg .hpg-services__source {
  color: var(--c-muted);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
}

/* --- Планшет ------------------------------------------------- */
@media (max-width: 1023px) {
  .hpg .hpg-services {
    gap: 48px;
  }

  .hpg .hpg-services__inner {
    gap: 48px;
  }

  .hpg .hpg-services__head {
    gap: 24px;
  }

  .hpg .hpg-services__headline {
    gap: 20px;
  }

  .hpg .hpg-services__footnote-panel {
    flex-wrap: wrap;
    gap: 24px;
    padding: 28px 24px;
  }

  .hpg .hpg-services__footnote-item {
    flex: 1 1 220px;
  }
}

/* --- Мобильный ------------------------------------------------- */
@media (max-width: 767px) {
  .hpg .hpg-services {
    gap: 40px;
  }

  .hpg .hpg-services__inner {
    gap: 40px;
  }

  .hpg .hpg-services__head {
    gap: 20px;
  }

  .hpg .hpg-services__headline {
    gap: 12px;
  }

  .hpg .hpg-services__footnote-panel {
    padding: 24px 16px;
  }
}

/* Заголовочная типографика у всех блоков страницы одна, поэтому правила
   ниже собраны в общие списки селекторов — расходиться им незачем. */
.hpg .hpg-example__eyebrow,
.hpg .hpg-steps__eyebrow,
.hpg .hpg-services__eyebrow,
.hpg .hpg-map__eyebrow,
.hpg .hpg-year__eyebrow,
.hpg .hpg-consult__eyebrow,
.hpg .hpg-faq__eyebrow {
  color: var(--c-primary);
  font-size: var(--fs-eyebrow);
  line-height: var(--lh-eyebrow);
  font-weight: 700;
  letter-spacing: 0.25em;
}

.hpg .hpg-example__title,
.hpg .hpg-steps__title,
.hpg .hpg-services__title,
.hpg .hpg-map__title,
.hpg .hpg-year__title,
.hpg .hpg-consult__title,
.hpg .hpg-faq__title {
  color: var(--c-body);
  font-size: var(--fs-h2);
  line-height: var(--lh-h2);
  font-weight: 600;
  letter-spacing: -0.005em;
}

.hpg .hpg-example__lead,
.hpg .hpg-steps__lead,
.hpg .hpg-services__lead,
.hpg .hpg-map__lead,
.hpg .hpg-year__lead,
.hpg .hpg-consult__lead,
.hpg .hpg-faq__lead {
  color: var(--c-body);
  font-size: var(--fs-lead);
  line-height: var(--lh-lead);
}


/* --- Переключатель сценариев года ----------------------------
   Сегментированный контрол блока «Сколько стоит год». Раньше такой же
   стоял в блоке «Как считается выплата», поэтому правила были общими;
   тот блок снят, и селекторы остались только у года.
   ----------------------------------------------------------- */
.hpg .hpg-year__years {
  --thumb-inset: 6px;   /* поле переключателя = посадка плашки */

  position: relative;   /* система координат для плашки */
  display: flex;
  gap: 4px;
  max-width: 100%;
  padding: var(--thumb-inset);
  border-radius: 32px;
  background-color: var(--c-white);
}

/* Плашка активного плана. Один объект, который ездит между кнопками:
   так взгляд следит за движением и сам приходит туда, куда переключился
   контент. Геометрию (translate + width) считает JS, см.
   landing/js/health-protector-guard.js — здесь только внешность.

   Ширина честная, а не scaleX: кнопки разной ширины (133/156/144), и
   растяжение превратило бы радиус 26px в овал, а рамку в 1.2px. */
.hpg .hpg-year__thumb {
  position: absolute;
  top: var(--thumb-inset);
  bottom: var(--thumb-inset);
  left: 0;
  display: none;
  width: 0;
  border-radius: 26px;
  background-color: var(--c-white);
  box-shadow:
    0 0 0 1px var(--c-border),
    0 2px 8px rgb(41 36 31 / 0.08);
}

.hpg .hpg-year__years[data-hpg-enhanced] .hpg-year__thumb {
  display: block;
}

.hpg .hpg-year__pill {
  position: relative;
  z-index: 1;   /* подпись поверх плашки */
  padding: 12px 24px;
  border-radius: 26px;
  color: var(--c-muted);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  font-weight: 400;
  white-space: nowrap;
  cursor: pointer;
  /* Цвет успевает смениться раньше, чем приедет плашка: подпись как бы
     встречает её. Вес шрифта переменный (ось wght), поэтому 400→500
     тоже идёт плавно; разница ширины при этом 0.25–0.45px, так что
     соседние кнопки не дёргаются. */
  transition:
    color 160ms ease,
    font-weight 160ms ease,
    transform 120ms ease;
}

.hpg .hpg-year__pill:hover {
  color: var(--c-ink);
}

/* Нажатие проминается — единственная физика, которую даёт сам палец. */
.hpg .hpg-year__pill:active {
  transform: scale(0.97);
}

/* Рамка активной «пилюли» — box-shadow, а не border: в макете обводка
   не занимает места (стиль Figma рисует её внутрь), и настоящий border
   раздвинул бы переключатель на 2px. */
.hpg .hpg-year__pill[aria-selected="true"] {
  background-color: var(--c-white);
  box-shadow:
    0 0 0 1px var(--c-border),
    0 2px 8px rgb(41 36 31 / 0.08);
  color: var(--c-ink);
  font-weight: 500;
  line-height: 22px;
  cursor: default;
}

/* С включённым JS подсветку держит плашка, а не сама кнопка. */
.hpg .hpg-year__years[data-hpg-enhanced] .hpg-year__pill[aria-selected="true"] {
  background-color: transparent;
  box-shadow: none;
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-year__pill {
    transition: none;
  }
}

/* --- Мобильный ----------------------------------------------
   Переключатель сценариев на мобильном тянется во всю колонку: три
   подписи с макетными паддингами в 343px уже не влезают, поэтому
   «пилюли» делят ширину поровну.
   ----------------------------------------------------------- */
@media (max-width: 767px) {
  .hpg .hpg-year__years {
    --thumb-inset: 4px;

    align-self: stretch;
    gap: 2px;
  }

  .hpg .hpg-year__thumb {
    border-radius: 22px;
  }

  .hpg .hpg-year__pill {
    flex: 1 1 auto;
    min-width: 0;
    padding: 10px 6px;
    border-radius: 22px;
    font-size: 13px;
    line-height: 20px;
    text-align: center;
  }

  .hpg .hpg-year__pill[aria-selected="true"] {
    line-height: 20px;
  }
}

/* ============================================================
   Блок «Где доступно». Источник: Figma, node 670:1660.

   В макете это тот же компонент «Metrics», что и на главной, только с
   другими текстами: заголовочная группа, три метрики и карта США. Отсюда
   и раскладка — повторяет главную (landing/css/main.css, блок «Metrics»),
   а сама карта с её движением лежит в общем landing/css/us-map.css.

   Метрики и название штата под курсором делят одну ячейку грида: высота
   берётся по большему из них, поэтому подмена не двигает карту.

   Сверху теперь блок «Стоимость» — его радиальная подложка гаснет к
   краю в --c-surface, а не в --c-page. Короткий линейный градиент у
   самого верха растворяет этот стык, дальше блок снова ровный --c-page.
   ============================================================ */
.hpg .hpg-map {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  padding: var(--pad-y) var(--pad-x);
  background-image: linear-gradient(to bottom, var(--c-surface), var(--c-page) 160px);
  background-color: var(--c-page);
}

.hpg .hpg-map__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  width: 100%;
  max-width: var(--col-w);
  text-align: center;
}

.hpg .hpg-map__headline {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  width: 100%;
}

/* --- Метрики и подмена на название штата --------------------
   Смена идёт по очереди, а не внахлёст: уходящий блок уступает ячейку и
   только потом приходит следующий. Два текста в одной точке, даже
   полупрозрачные, читаются как каша. Очередь набрана задержками —
   правило видимого состояния ждёт, пока отработает правило скрытого;
   считать это в JS не нужно, переходы идут навстречу друг другу при
   любом направлении. Так же сделано на главной.
   ----------------------------------------------------------- */
.hpg .hpg-map__swap {
  display: grid;
  align-items: center;
  justify-items: center;
}

.hpg .hpg-map__swap > * {
  grid-area: 1 / 1;
}

.hpg .hpg-map__stats {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 48px;
  transition: opacity 200ms ease 140ms, transform 200ms ease 140ms;
}

.hpg .hpg-map__state {
  opacity: 0;
  /* Лежит поверх метрик даже погашенным — курсор сквозь него проходит. */
  pointer-events: none;
  transform: translateY(8px);
  transition: opacity 140ms ease, transform 140ms ease;
}

.hpg .hpg-map__state .hpg-map__stat-value {
  white-space: nowrap;
}

.hpg .hpg-map__swap.is-state .hpg-map__stats {
  opacity: 0;
  transform: translateY(-8px);
  transition-duration: 140ms;
  transition-delay: 0ms;
}

.hpg .hpg-map__swap.is-state .hpg-map__state {
  opacity: 1;
  transform: none;
  transition-duration: 200ms;
  transition-delay: 140ms;
}

.hpg .hpg-map__stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  text-align: center;
  white-space: nowrap;
}

.hpg .hpg-map__stat-value {
  color: var(--c-body);
  font-size: var(--fs-stat);
  line-height: 1.3;
  font-weight: 600;
  letter-spacing: -0.025em;
}

.hpg .hpg-map__stat-label {
  color: var(--c-muted);
  font-size: var(--fs-stat-label);
  line-height: var(--lh-stat-label);
}

.hpg .hpg-map__stat-divider {
  align-self: stretch;
  flex: 0 0 auto;
  width: 1px;
  background-color: var(--c-border);
}

@media (max-width: 1023px) {
  .hpg .hpg-map {
    gap: 48px;
  }

  .hpg .hpg-map__head {
    gap: 24px;
  }

  .hpg .hpg-map__headline {
    gap: 20px;
  }

  .hpg .hpg-map__stats {
    gap: 32px;
  }
}

@media (max-width: 767px) {
  .hpg .hpg-map {
    gap: 40px;
  }

  .hpg .hpg-map__head {
    gap: 20px;
  }

  .hpg .hpg-map__headline {
    gap: 16px;
  }

  .hpg .hpg-map__stats {
    gap: 16px;
  }
}

@media (prefers-reduced-motion: reduce) {
  /* Спокойный режим: подмена метрик остаётся — это сведения, а не
     украшение, — но происходит мгновенно и без сдвига. Движение самой
     карты гасит us-map.css. */
  .hpg .hpg-map__stats,
  .hpg .hpg-map__swap.is-state .hpg-map__stats,
  .hpg .hpg-map__state,
  .hpg .hpg-map__swap.is-state .hpg-map__state {
    transition: none;
  }

  .hpg .hpg-map__swap.is-state .hpg-map__stats,
  .hpg .hpg-map__state {
    transform: none;
  }
}

/* ============================================================
   Блок «Стоимость» (карточки планов). Источник: Figma, node 741:660,
   карточки — node 742:1412, наведение — node 742:1374.

   Блок открывается сразу карточками, без собственной шапки (заголовок и
   подводка сняты по правке node 741:660 — в макете их здесь больше нет):
   после героя читатель сразу видит порядок сумм за месяц. Три равные
   карточки — заголовок плана, разделитель, два блока текста и цена — на
   сплошной подложке var(--c-page).

   Наведение (мышь): кнопка «Оформить» не выезжает из ниоткуда, а всё
   время лежит на своём месте у нижнего края колонки — просто карточка в
   покое полностью её закрывает. Курсор поднимает именно эту карточку
   вверх (соседние стоят неподвижно, но приглушаются), и кнопка
   открывается из-под её нижнего края, заканчиваясь вровень с нижней
   границей соседних карточек — как в макете (node 742:1374). Кнопка всё
   это время была на месте, поэтому подъём не раздвигает сетку карточек
   и не двигает сноску и остальную страницу вниз. На сенсорном экране и
   с клавиатуры (без hover) кнопка просто всегда в потоке под карточкой,
   видна сразу. Разбор плавности (запас сверху, кривые, тень, досадка
   кнопки, приглушение соседей) — там же, где и правила, под
   `@media (hover: hover) and (pointer: fine)`.
   ============================================================ */
.hpg .hpg-pricing {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  padding: var(--pad-y) var(--pad-x);
  background-color: var(--c-page);
}

.hpg .hpg-pricing__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  width: 100%;
  max-width: var(--wide-w);
}

/* --- Карточки -------------------------------------------------
   Колонка держит карточку и кнопку одна над другой, но кнопка — не
   довесок снизу, а лежит абсолютом в тех же координатах, что нижняя
   часть карточки (node 742:1374): в покое карточка полностью её
   закрывает (z-index выше, непрозрачный фон), кнопка физически спрятана
   позади, а не просто прозрачна.

   Курсор поднимает карточку вверх ровно на высоту кнопки с отступом
   (52 + 16 = 68px) — она открывается из-под уходящей вверх карточки, а
   не выезжает сама по себе. Кнопка при этом не двигается вовсе: колонка
   как была высотой в одну карточку, так и остаётся (кнопка — abs, из
   потока), поэтому подъём никогда не раздвигает сетку и не двигает
   сноску под блоком. Соседние карточки не участвуют — двигается только
   та, что под курсором, см. `@media (hover: hover) and (pointer: fine)`
   ниже.
   ----------------------------------------------------------- */
.hpg .hpg-pricing__cards {
  /* stretch, а не start: карточки в ряду обязаны быть одной высоты. Сейчас
     тексты планов совпали по длине и высота сошлась случайно — на другой
     локали или после правки копирайта ряд поехал бы «лесенкой». Кнопка
     при подъёме карточки временно выходит выше границ колонки — сверху
     достаточно паддинга секции (var(--pad-y) = 96px против 68px подъёма),
     сталкиваться там не с чем. */
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  align-items: stretch;
  gap: 16px;
  width: 100%;
}

.hpg .hpg-pricing__col {
  position: relative;
  display: flex;
  flex-direction: column;
}

.hpg .hpg-pricing__card {
  position: relative;
  z-index: 2;
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 32px;
  padding: 32px;
  border: 1px solid var(--c-border);
  border-radius: 8px;
  background-color: var(--c-white);
  box-shadow: 0 12px 32px -4px rgba(0, 0, 0, 0.12);
}

/* Тень поднятой карточки — отдельным слоем, а не сменой box-shadow у самой
   карточки: box-shadow пересчитывается покадрово (дорого на карточке в
   полтысячи пикселей), а прозрачность слоя тянет композитор. Слой лежит
   на месте карточки, поэтому едет вместе с ней и в покое невидим.

   Без этого подъём читался не как «карточка оторвалась от страницы», а
   как «карточку сдвинули вверх»: тень оставалась ровно той же, что у
   лежащих рядом, и глубины в движении не появлялось. Тень внешняя, так
   что содержимое карточки слой не перекрывает. */
.hpg .hpg-pricing__card::after {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: 8px;
  box-shadow: 0 28px 56px -16px rgba(41, 36, 31, 0.22);
  opacity: 0;
  pointer-events: none;
}

.hpg .hpg-pricing__plan {
  color: var(--c-body);
  font-size: 36px;
  line-height: 44px;
  font-weight: 600;
  letter-spacing: -0.01em;
  text-align: center;
  transition: color 200ms ease;
}

.hpg .hpg-pricing__rule {
  width: 100%;
  height: 1px;
  border-radius: 1px;
  background-color: rgba(138, 129, 123, 0.5);
}

.hpg .hpg-pricing__block {
  display: flex;
  flex-direction: column;
  gap: 8px;
  text-align: center;
}

.hpg .hpg-pricing__label {
  color: var(--c-body);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.hpg .hpg-pricing__text {
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
}

.hpg .hpg-pricing__price {
  color: var(--c-body);
  text-align: center;
  letter-spacing: -0.01em;
  transition: color 200ms ease;
}

.hpg .hpg-pricing__price-value {
  font-size: 48px;
  line-height: 58px;
  font-weight: 600;
  letter-spacing: -0.01em;
}

.hpg .hpg-pricing__price-unit {
  font-size: var(--fs-lead);
  line-height: var(--lh-lead);
  font-weight: 400;
}

/* Кнопка в потоке всегда — базовое положение для сенсорных экранов и
   читалок, там курсора нет и прятать её физически некуда. Курсор-hover
   переключает её на абсолютную (правило ниже) — она уходит из потока и
   встаёт вплотную к низу колонки, туда же, где и так лежит низ карточки
   в её обычном (не поднятом) положении. */
.hpg .hpg-pricing__cta {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 16px;
  height: 52px;
  padding: 0 32px;
  border-radius: 8px;
  background-color: var(--c-primary);
  color: var(--c-white);
  font-size: var(--fs-body);
  line-height: 22px;
  font-weight: 500;
  text-align: center;
  text-decoration: none;
  transition: background-color 160ms ease;
}

.hpg .hpg-pricing__cta:hover {
  background-color: #d24f36;
}

/* --- Наведение --------------------------------------------------
   Только для настоящего курсора: на сенсорном экране кнопка и так в
   потоке под карточкой (правило выше) — там нечем «спрятать» её и
   нечем открыть обратно.

   Устройство — не подмена opacity, а буквальное перекрытие (node
   742:1374):
   1. Кнопка стоит абсолютом у нижнего края колонки (bottom: 0) —
      ровно там, где и так находится низ карточки в покое, — а карточка
      лежит поверх неё (z-index) тем же по размеру непрозрачным
      прямоугольником. Кнопки не видно не потому, что она прозрачна, а
      потому, что её целиком закрывает карточка.
   2. Курсор поднимает карточку вверх на высоту кнопки с отступом
      (52 + 16 = 68px). Карточка не меняет ни размер, ни форму — просто
      уезжает вверх, — и из-под её нижнего края открывается кнопка,
      которая всё это время стояла на месте.
   3. Кнопка заканчивается вровень с нижним краем соседних карточек:
      они не двигаются вовсе, а колонка наведённой карточки как была
      высотой в одну карточку, так и осталась (кнопка — abs, из потока),
      поэтому подъём никогда не раздвигает сетку и не двигает сноску.

   Про плавность (правки после разбора первой версии):

   а) Запас сверху. Между шапкой блока и рядом карточек 64px (gap
      у .hpg-pricing__inner), а карточка проезжает 68px — то есть в
      прежней версии она наезжала белым полем на последнюю строку
      подводки. Ряду добавлено 24px запаса: 68px хода + ~20px просвета
      (тень поднятой карточки поднимается над её верхним краем примерно
      на 16px) укладываются в 88px. Запас только здесь, под курсором:
      на сенсорных ходить карточке некуда, и там остаются макетные 64px.

   б) Кривая и время. Было 280ms на easeOutQuint — та проходит около
      девяти десятых пути за первую треть времени, и на ходе в 68px это
      читалось рывком. Теперь вход — 520ms на «мягком торможении»
      (cubic-bezier(0.05, 0.7, 0.1, 1)): заметный, но не резкий старт и
      длинная спокойная посадка. Возврат короче и симметричнее (400ms),
      чтобы уход от карточки не казался вязким.

   в) Глубина. Подъём без смены тени читается как сдвиг, а не как отрыв
      от страницы, поэтому на карточке проступает второй слой тени
      (.hpg-pricing__card::after выше).

   г) Досадка кнопки. В покое кнопка на 6px выше своего места (всё ещё
      целиком за карточкой), на входе с задержкой в 120ms опускается на
      место — вторичное движение, которое подхватывает основной ход и
      заканчивается вместе с ним.

   д) Соседи. Приглушаются прозрачностью 0.45 — ровно как плитки на
      главной (.home .tile). Гасится вся колонка, а не карточка: у
      карточки за спиной лежит оранжевая кнопка, и приглуши мы карточку
      отдельно, она стала бы полупрозрачной и кнопка проступила бы
      сквозь неё. Прозрачность на колонке смешивает уже готовую пару
      «карточка поверх кнопки» и такого не допускает.
   ----------------------------------------------------------- */
@media (hover: hover) and (pointer: fine) {
  /* См. пункт (а): запас под ход карточки. */
  .hpg .hpg-pricing__cards {
    margin-top: 24px;
  }

  .hpg .hpg-pricing__cta {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
    margin-top: 0;
    transform: translateY(-6px);
    transition:
      transform 300ms cubic-bezier(0.4, 0, 0.2, 1),
      background-color 160ms ease;
  }

  /* Возврат: короче входа и симметричной кривой. Вход переопределяется
     ниже, в самом правиле наведения. */
  .hpg .hpg-pricing__col {
    transition: opacity 360ms ease;
  }

  .hpg .hpg-pricing__card {
    transition:
      transform 400ms cubic-bezier(0.4, 0, 0.2, 1),
      border-color 300ms ease;
  }

  .hpg .hpg-pricing__card::after {
    transition: opacity 400ms ease;
  }

  .hpg .hpg-pricing__plan,
  .hpg .hpg-pricing__price {
    transition: color 300ms ease;
  }

  /* Ход карточки. 68px — высота кнопки (52) с просветом (16); оба числа
     заданы выше, у .hpg-pricing__cta, и меняются только вместе. */
  .hpg .hpg-pricing__col:hover .hpg-pricing__card,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__card {
    transform: translateY(-68px);
    border-color: var(--c-primary);
    transition:
      transform 520ms cubic-bezier(0.05, 0.7, 0.1, 1),
      border-color 300ms ease;
  }

  .hpg .hpg-pricing__col:hover .hpg-pricing__card::after,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__card::after {
    opacity: 1;
  }

  .hpg .hpg-pricing__col:hover .hpg-pricing__cta,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__cta {
    transform: translateY(0);
    transition:
      transform 400ms cubic-bezier(0.05, 0.7, 0.1, 1) 120ms,
      background-color 160ms ease;
  }

  .hpg .hpg-pricing__col:hover .hpg-pricing__plan,
  .hpg .hpg-pricing__col:hover .hpg-pricing__price,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__plan,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__price {
    color: var(--c-primary);
  }

  /* «Прожектор». :has() на сетке, а не на колонке: иначе соседи гасли бы
     и когда курсор стоит в просвете между карточками, где активной нет
     ни одной. Повтор :has() во втором правиле — не описка: он добавляет
     к весу специфичность своего аргумента, и без него наведённая
     колонка гасла бы вместе с остальными (тот же приём на главной).

     z-index поднимает наведённую колонку над соседями: без него её
     разросшаяся тень уходила бы под белый фон соседней карточки и
     обрубалась по вертикали. */
  .hpg .hpg-pricing__cards:has(.hpg-pricing__col:hover) .hpg-pricing__col,
  .hpg .hpg-pricing__cards:has(.hpg-pricing__col:focus-within) .hpg-pricing__col {
    opacity: 0.45;
  }

  .hpg .hpg-pricing__cards:has(.hpg-pricing__col:hover) .hpg-pricing__col:hover,
  .hpg .hpg-pricing__cards:has(.hpg-pricing__col:focus-within) .hpg-pricing__col:focus-within {
    opacity: 1;
    z-index: 2;
  }
}

.hpg .hpg-pricing__footnote {
  width: 100%;
  max-width: var(--wide-w);
  color: var(--c-muted);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
  text-align: center;
}

/* Спокойный режим: смысл наведения остаётся весь — рамка, цвет,
   открывшаяся кнопка, приглушённые соседи, — но ничего не едет:
   карточка сразу оказывается в поднятом положении. */
@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-pricing__col,
  .hpg .hpg-pricing__col:hover .hpg-pricing__card,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__card,
  .hpg .hpg-pricing__col:hover .hpg-pricing__cta,
  .hpg .hpg-pricing__col:focus-within .hpg-pricing__cta,
  .hpg .hpg-pricing__card,
  .hpg .hpg-pricing__card::after,
  .hpg .hpg-pricing__cta,
  .hpg .hpg-pricing__plan,
  .hpg .hpg-pricing__price {
    transition: none;
  }
}

/* --- Планшет и мобильный -----------------------------------------
   Три узкие колонки с таким объёмом текста на 800/375px не читаются —
   карточки складываются в один столбец, как большинство прочих карточных
   раскладок страницы.
   ----------------------------------------------------------- */
@media (max-width: 1023px) {
  .hpg .hpg-pricing {
    gap: 48px;
  }

  .hpg .hpg-pricing__inner {
    gap: 48px;
  }

  .hpg .hpg-pricing__cards {
    grid-template-columns: 1fr;
    gap: 24px;
    max-width: var(--col-w);
  }

  .hpg .hpg-pricing__plan {
    font-size: 30px;
    line-height: 38px;
  }
}

@media (max-width: 767px) {
  .hpg .hpg-pricing {
    gap: 40px;
  }

  .hpg .hpg-pricing__inner {
    gap: 40px;
  }

  .hpg .hpg-pricing__card {
    gap: 24px;
    padding: 24px;
  }

  .hpg .hpg-pricing__price-value {
    font-size: 38px;
    line-height: 46px;
  }
}

/* ============================================================
   Блок «Примерный расчёт». Источник: Figma, node 741:550 (текст шапки),
   бывший node 634:3771 («Стоимость») и, до него, «Расчёты».

   Замысел: не таблица сумм, а одна мера длины. Полоса — это счёт за год
   после сетевой скидки, один и тот же для всех трёх планов; разница
   планов видна как разный участок оранжевого в общей длине. Поэтому
   полосы всех строк равны по ширине, а масштаб задаёт ось над ними.

   Сетка строки — 0.5fr / 2fr / 0.5fr с просветами по 8px (макет: 114 /
   456 / 114 при ширине 700). Ось повторяет ту же сетку и живёт во второй
   колонке: подпись и сумма всегда стоят ровно над концами полос, даже
   когда колонка ужимается.
   ============================================================ */
.hpg .hpg-year {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: var(--pad-y) var(--pad-x);
  /* Фон не плоский, а тёплая радиальная подложка (Figma, node 741:550,
     ранее 634:3771): var(--c-page) в центре плавно уходит в
     var(--c-surface) к краям — те же токены, что и ниже по странице,
     просто не залиты ровно.

     farthest-side, а не процент от блока: эллипс должен дотягиваться
     до var(--c-surface) ровно на границах секции, независимо от её
     высоты, — иначе на стыке с «Где доступно» виден скачок цвета,
     потому что тот блок сверху начинается именно с var(--c-surface). */
  background-image: radial-gradient(ellipse farthest-side at 50% 50%, var(--c-page) 50%, var(--c-surface) 100%);
  background-color: var(--c-surface);
}

.hpg .hpg-year__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  width: 100%;
  max-width: var(--chart-w);
}

/* --- Заголовочная группа ------------------------------------
   Уже полос: текст читается колонкой в 600px, как и в блоке выше.
   ----------------------------------------------------------- */
.hpg .hpg-year__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  max-width: var(--col-w);
  text-align: center;
}

.hpg .hpg-year__headline {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  width: 100%;
}

/* --- Диаграмма ---------------------------------------------- */
.hpg .hpg-year__chart {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  width: 100%;
}

/* Переключатель и состав года в макете стоят одной группой (16px), а
   не через общий шаг колонки, поэтому диаграмма подтягивается вверх. */
.hpg .hpg-year__years + .hpg-year__chart {
  margin-top: -48px;
}

.hpg .hpg-year__panel {
  display: flex;
  flex-direction: column;
  gap: 64px;
  width: 100%;
}

/* Без JS видна только панель «Обычный год», остальные скрыты hidden —
   блок остаётся читаемым и в поиске, и при отключённых скриптах. */
.hpg .hpg-year__panel[hidden] {
  display: none;
}

/* Состав года — единственная подпись, которая меняется вместе с
   панелью, поэтому лежит внутри неё, а не в заголовочной группе.

   При переключении текст сменяется через прозрачность, а место под
   него держится min-height: высоту самого длинного из трёх сценариев
   выставляет JS, иначе диаграмма подпрыгивала бы на каждой смене. */
.hpg .hpg-year__scenario {
  align-self: center;
  display: flex;
  align-items: center;
  justify-content: center;
  max-width: var(--col-w);
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  text-align: center;
  transition: opacity 160ms ease;
}

.hpg .hpg-year__scenario[data-hpg-fading] {
  opacity: 0;
}

/* --- Строки ------------------------------------------------- */
.hpg .hpg-year__rows {
  display: flex;
  flex-direction: column;
  gap: 32px;
  width: 100%;
}

.hpg .hpg-year__row {
  display: grid;
  grid-template-columns: 0.5fr 2fr 0.5fr;
  column-gap: 8px;
  align-items: end;
}

.hpg .hpg-year__plan,
.hpg .hpg-year__result {
  height: var(--bar-h, 52px);
}

.hpg .hpg-year__plan {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--c-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  text-align: center;
}

/* Дорожка держит три вещи, привязанные к одной вертикали: подпись
   суммы года, саму полосу и риску «100%» между ними. Отступ сверху —
   место под подпись, она стоит абсолютом, чтобы её ширина не двигала
   риску. */
.hpg .hpg-year__track {
  position: relative;
  padding-top: 26px;
}

.hpg .hpg-year__total {
  position: absolute;
  top: 0;
  left: var(--mark, 78.07%);
  transform: translateX(-50%);
  color: var(--c-muted);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  white-space: nowrap;
}

.hpg .hpg-year__bar {
  display: flex;
  height: var(--bar-h, 52px);
  overflow: hidden;
  border-radius: 8px;
}

/* Риска стоит там же, где кончается участок «100% счёта», и выступает
   за полосу сверху и снизу — как в макете. */
.hpg .hpg-year__mark {
  position: absolute;
  top: 22px;
  left: var(--mark, 78.07%);
  width: 2px;
  height: calc(var(--bar-h, 52px) + 8px);
  transform: translateX(-1px);
  border-radius: 2px;
  background-color: var(--c-muted);
}

/* Доли сегментов приходят из разметки (--w) как проценты ширины
   полосы; всё, что не занято, достаётся бежевому остатку.

   При смене сценария --w переписывает JS, и полоса не пересобирается,
   а перетекает: сегменты едут переходом, бежевый остаток идёт следом
   сам, потому что занимает всё свободное место. Строки трогаются
   лесенкой по 50ms — тем же порядком, каким читаются. */
.hpg .hpg-year__paid,
.hpg .hpg-year__back,
.hpg .hpg-year__own.hpg-year__own--pay {
  flex: 0 0 auto;
  width: var(--w, 0%);
  transition: width var(--morph, 420ms) cubic-bezier(0.22, 0.61, 0.36, 1);
  transition-delay: var(--morph-lag, 0ms);
}

.hpg .hpg-year__row:nth-child(2) {
  --morph-lag: 50ms;
}

.hpg .hpg-year__row:nth-child(3) {
  --morph-lag: 100ms;
}

.hpg .hpg-year__paid {
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: 0 4px;
  background-color: var(--c-primary);
  color: var(--c-white);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  white-space: nowrap;
}

/* Выплата сверх счёта. В сценариях, где её нет, сегмент остаётся в
   строке с нулевой шириной — из него же он и вырастает. */
.hpg .hpg-year__back {
  background-color: var(--c-green);
}

/* Без модификатора own — пустой сегмент нулевой ширины: в строках-
   доходах своей доли нет, а хвост после риски держит .hpg-year__rest. */
.hpg .hpg-year__own {
  width: 0;
}

/* Доля «Оплачиваете вы» — только когда она реальна (год не ушёл в
   доход): тёмно-оранжевая заливка с подписью процента, тем же
   рисунком, что и у .hpg-year__paid. Ширина — от конца оранжевой доли
   ровно до риски (100% счёта): выше риски клиент уже не платит сам, а
   выходит в доход, поэтому цвет «Оплачиваете вы» дальше неё не идёт. */
.hpg .hpg-year__own--pay {
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: 0 4px;
  background-color: var(--c-hover);
  color: var(--c-white);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  white-space: nowrap;
}

/* Нейтральный хвост после риски — то же место, где в строках-доходах
   растёт зелёная переплата. Всегда добирает то, что осталось от
   ширины полосы после paid/back/own, поэтому отдельного --w не ждёт. */
.hpg .hpg-year__rest {
  flex: 1 1 auto;
  background-color: var(--c-border);
}

/* Правая ячейка — итог года. Полосатая заливка нарисована градиентом
   под тем же углом и шагом, что в макете (7px штрих, 18px период),
   а подпись сидит на сплошной подложке, чтобы не спорить с полосками. */
.hpg .hpg-year__result {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border: 1px solid var(--c-border);
  border-radius: 12px;
  background-image: repeating-linear-gradient(
    -45deg,
    var(--c-border) 0 7px,
    var(--c-page) 7px 18px
  );
  color: var(--c-ink);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  white-space: nowrap;
  transition:
    border-color 300ms ease,
    color 300ms ease;
  transition-delay: var(--morph-lag, 0ms);
}

/* Зелёная заливка лежит отдельным слоем поверх бежевой: градиенты не
   анимируются, а прозрачность — да, поэтому расход и доход не
   переключаются рывком, а проступают друг сквозь друга. */
.hpg .hpg-year__result::after {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0;
  background-image: repeating-linear-gradient(
    -45deg,
    #c7dfd5 0 7px,
    #f1f7f4 7px 18px
  );
  transition: opacity 300ms ease;
  transition-delay: var(--morph-lag, 0ms);
}

.hpg .hpg-year__result-value {
  position: relative;
  z-index: 1;
  padding: 0 8px;
  background-color: var(--c-page);
  transition: background-color 300ms ease;
  transition-delay: var(--morph-lag, 0ms);
}

.hpg .hpg-year__result--income {
  border-color: #a9ccbc;
  color: #1f6f57;
}

.hpg .hpg-year__result--income::after {
  opacity: 1;
}

.hpg .hpg-year__result--income .hpg-year__result-value {
  background-color: #f1f7f4;
}

/* При запрете анимаций сценарий меняется мгновенно: JS в этом режиме
   тоже не считает цифры, а сразу ставит итоговые. */
@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-year__scenario,
  .hpg .hpg-year__paid,
  .hpg .hpg-year__back,
  .hpg .hpg-year__result,
  .hpg .hpg-year__result::after,
  .hpg .hpg-year__result-value {
    transition: none;
  }
}

/* --- Легенда и сноска --------------------------------------- */
.hpg .hpg-year__legend {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
}

.hpg .hpg-year__legend-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 12px 32px;
}

.hpg .hpg-year__legend-item {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--c-body);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-body-sm);
  white-space: nowrap;
}

.hpg .hpg-year__swatch {
  flex: 0 0 auto;
  width: 14px;
  height: 14px;
  border-radius: 3px;
}

.hpg .hpg-year__swatch--paid { background-color: var(--c-primary); }
.hpg .hpg-year__swatch--own { background-color: var(--c-hover); }
.hpg .hpg-year__swatch--back { background-color: var(--c-green); }

/* Образцы итоговых ячеек — та же полосатая заливка, что и в строках,
   только шаг мельче: на квадрате 14px полный период не читается. */
.hpg .hpg-year__swatch--outcome {
  border: 1px solid var(--c-border);
  background-image: repeating-linear-gradient(
    -45deg,
    var(--c-border) 0 3px,
    var(--c-page) 3px 7px
  );
}

.hpg .hpg-year__swatch--income {
  border: 1px solid #a9ccbc;
  background-image: repeating-linear-gradient(
    -45deg,
    #c7dfd5 0 3px,
    #f1f7f4 3px 7px
  );
}

.hpg .hpg-year__note {
  width: 100%;
  color: var(--c-muted);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
  text-align: center;
}

/* --- Кнопка -----------------------------------------------------
   По правке 741:550 в блоке осталась одна кнопка: заливка «Оформить»
   ведёт в чат подбора. Ширина — 300px, как в макете. */
.hpg .hpg-year__actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  width: 100%;
  max-width: 300px;
}

.hpg .hpg-year__button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 140px;
  width: 100%;
  padding: 15px 32px;
  border-radius: 8px;
  font-size: var(--fs-body);
  line-height: 22px;
  font-weight: 500;
  text-align: center;
  text-decoration: none;
  transition:
    background-color 160ms ease,
    border-color 160ms ease,
    transform 120ms ease;
}

.hpg .hpg-year__button--primary {
  border: 1px solid var(--c-primary);
  background-color: var(--c-primary);
  color: var(--c-white);
}

.hpg .hpg-year__button--primary:hover {
  background-color: #d24f36;
  border-color: #d24f36;
}

.hpg .hpg-year__button:active {
  transform: scale(0.98);
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-year__button {
    transition: none;
  }
}

/* --- Планшет ------------------------------------------------ */
@media (max-width: 1023px) {
  .hpg .hpg-year__inner {
    gap: 48px;
  }

  .hpg .hpg-year__years + .hpg-year__chart {
    margin-top: -32px;
  }

  .hpg .hpg-year__panel {
    gap: 48px;
  }

  .hpg .hpg-year__rows {
    gap: 24px;
  }
}

/* --- Мобильный ----------------------------------------------
   Раскладку не ломаем: те же три колонки, что и на десктопе, только
   кегли и высота строки меньше. Названия планов при этом переносятся
   на две строки — это дешевле, чем отрывать подпись от своей полосы.
   ----------------------------------------------------------- */
@media (max-width: 767px) {
  .hpg .hpg-year__inner {
    gap: 40px;
  }

  .hpg .hpg-year__head {
    gap: 20px;
  }

  .hpg .hpg-year__headline {
    gap: 12px;
  }

  .hpg .hpg-year__chart {
    gap: 24px;
  }

  .hpg .hpg-year__years + .hpg-year__chart {
    margin-top: -24px;
  }

  .hpg .hpg-year__panel {
    gap: 32px;
  }

  .hpg .hpg-year__row {
    --bar-h: 44px;
    grid-template-columns: 0.62fr 2fr 0.55fr;
    column-gap: 6px;
  }

  .hpg .hpg-year__rows {
    gap: 20px;
  }

  .hpg .hpg-year__track {
    padding-top: 22px;
  }

  .hpg .hpg-year__mark {
    top: 18px;
  }

  .hpg .hpg-year__total {
    font-size: 12px;
    line-height: 16px;
  }

  .hpg .hpg-year__plan {
    font-size: 12px;
    line-height: 16px;
  }

  .hpg .hpg-year__paid,
  .hpg .hpg-year__own--pay,
  .hpg .hpg-year__result {
    font-size: 12px;
    line-height: 16px;
  }

  .hpg .hpg-year__paid,
  .hpg .hpg-year__own--pay {
    padding: 0 2px;
  }

  .hpg .hpg-year__result {
    border-radius: 10px;
  }

  .hpg .hpg-year__result-value {
    padding: 0 4px;
  }

  .hpg .hpg-year__legend {
    gap: 10px;
  }

  .hpg .hpg-year__legend-row {
    gap: 10px 16px;
  }

  .hpg .hpg-year__legend-item {
    font-size: 13px;
    line-height: 18px;
  }
}

/* ============================================================
   Блок «Один на один». Источник: Figma, node 672:5832.

   Замысел: до этого места страница говорила цифрами, здесь впервые
   появляется человек. Поэтому блок собран как знакомство, а не как
   очередная карточка:

     кто говорит → пара реплик → предложение созвониться

   Ярус «кто говорит» — два круглых портрета через знак «×»: компания
   и агент стоят в паре, а не по старшинству. Реплики набраны пузырями
   со срезанным углом со стороны говорящего — вопрос слева, ответ
   справа, — потому что важен не текст сам по себе, а то, что он звучит
   от лица конкретного человека.

   Карточка формы — единственный элемент страницы с тенью. Фон здесь
   ровный, рамки одинаковые у всех блоков, и без подъёма карточка
   потерялась бы рядом с крупным рисунком.

   Правка градиента (нода 672:5832): раньше фон был ровным var(--c-page).
   Теперь секция начинается с var(--c-surface) — тем же тоном, каким
   заканчивается «Услуги и выплаты» сразу над ней, — и уже к 15% высоты
   доходит до var(--c-page), дальше оставаясь ровной: короткий переход
   только сглаживает стык, а не красит блок целиком.
   ============================================================ */
.hpg .hpg-consult {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  padding: var(--pad-y) var(--pad-x);
  background-image: linear-gradient(to bottom, var(--c-surface), var(--c-page) 15%);
  background-color: var(--c-page);
}

.hpg .hpg-consult__head,
.hpg .hpg-faq__head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 32px;
  width: 100%;
  max-width: var(--col-w);
  text-align: center;
}

.hpg .hpg-consult__headline,
.hpg .hpg-faq__headline {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  width: 100%;
}

/* --- Переписка ----------------------------------------------
   Все ярусы разделены одним шагом в 32px, как в макете, поэтому
   разделитель и пузыри лежат прямо в колонке, без обёрток: сторону
   пузыря задаёт align-self, ширину — доля от колонки (493 и 800 из
   1024 в макете), чтобы на узких экранах пропорция сохранялась.
   ----------------------------------------------------------- */
.hpg .hpg-consult__dialog {
  display: flex;
  flex-direction: column;
  gap: 32px;
  width: 100%;
  max-width: var(--wide-w);
}

.hpg .hpg-consult__parties {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 24px 64px;
  padding: 6px 0;
}

.hpg .hpg-consult__party {
  display: flex;
  align-items: center;
  gap: 16px;
}

/* Круг рисует CSS, а не картинка: у знака компании и у портрета агента
   одна и та же оправа, различается только заливка под ней. */
.hpg .hpg-consult__avatar {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  width: 75px;
  height: 75px;
  border: 1px solid var(--c-border);
  border-radius: 50%;
  background-color: var(--c-border);
}

/* Под тёмным глифом щита заливка остаётся светлой — иначе знак глохнет. */
.hpg .hpg-consult__avatar--brand {
  background-color: var(--c-page);
}

.hpg .hpg-consult__avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hpg .hpg-consult__party-text {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.hpg .hpg-consult__party-role {
  color: var(--c-muted);
  font-size: 12px;
  line-height: 16px;
  letter-spacing: 0.01em;
}

.hpg .hpg-consult__party-name {
  color: var(--c-body);
  font-size: 15px;
  line-height: 22px;
}

/* В макете стоит латинская «X». Здесь знак умножения (×): он рисуется
   симметричным и не читается скринридером как буква. */
.hpg .hpg-consult__times {
  flex: 0 0 auto;
  color: var(--c-muted);
  font-size: var(--fs-eyebrow);
  line-height: var(--lh-eyebrow);
  font-weight: 500;
}

.hpg .hpg-consult__rule {
  height: 1px;
  border-radius: 1px;
  background-color: var(--c-border);
}

.hpg .hpg-consult__bubble {
  padding: 32px;
  border: 1px solid var(--c-border);
  color: var(--c-body);
  font-size: var(--fs-lead);
  line-height: var(--lh-lead);
}

/* Срезанный угол — со стороны говорящего: у вопроса нижний левый,
   у ответа нижний правый.

   Ширина задана явно, а не через max-width: в макете это фиксированные
   493 и 800 из 1024, и короткий вопрос не должен ужиматься по тексту —
   иначе пара реплик перестаёт читаться как переписка и превращается
   в два разнокалиберных обрывка. */
.hpg .hpg-consult__bubble--ask {
  align-self: flex-start;
  width: 48.14%;
  border-radius: 16px 16px 16px 0;
  background-color: var(--c-surface);
}

.hpg .hpg-consult__bubble--answer {
  align-self: flex-end;
  width: 78.13%;
  border-radius: 16px 16px 0 16px;
  background-color: var(--c-white);
}

/* --- Рисунок и форма ---------------------------------------- */
.hpg .hpg-consult__offer {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 32px;
  width: 100%;
  max-width: var(--wide-w);
}

/* Рисунок отдаёт форме её 450px и занимает остаток ряда. */
.hpg .hpg-consult__illustration {
  flex: 1 1 0;
  min-width: 0;
  height: auto;
}

.hpg .hpg-consult__form {
  display: flex;
  flex: 0 1 450px;
  flex-direction: column;
  gap: 32px;
  padding: 32px;
  border: 1px solid var(--c-border);
  border-radius: 16px;
  background-color: var(--c-white);
  box-shadow: 0 18px 40px -28px rgb(41 36 31 / 0.45);
}

.hpg .hpg-consult__form-head {
  display: flex;
  flex-direction: column;
  gap: 16px;
  text-align: center;
}

.hpg .hpg-consult__form-title {
  color: var(--c-body);
  font-size: var(--fs-h4);
  line-height: var(--lh-h4);
  font-weight: 500;
}

.hpg .hpg-consult__form-text {
  color: var(--c-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
}

/* Подпись поля: есть для скринридера, не видна глазу. clip-path вместо
   display: none — скрытое таким образом поле остаётся озвученным. */
.hpg .hpg-consult__label {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.hpg .hpg-consult__fields {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.hpg .hpg-consult__input {
  width: 100%;
  height: 52px;
  padding: 0 24px;
  border: 1px solid var(--c-border);
  border-radius: 8px;
  background-color: var(--c-white);
  color: var(--c-ink);
  font-family: inherit;
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
  transition:
    border-color 160ms ease,
    box-shadow 160ms ease;
}

.hpg .hpg-consult__input::placeholder {
  color: var(--c-muted);
  opacity: 1;   /* Firefox глушит подсказку до 0.54 — возвращаем макетный тон */
}

/* Обводка фокуса рисуется тенью, а не outline: рамка поля скруглена
   на 8px, и системный контур лёг бы прямоугольником поверх неё. */
.hpg .hpg-consult__input:focus {
  outline: none;
  border-color: var(--c-primary);
  box-shadow: 0 0 0 3px rgb(226 92 66 / 0.14);
}

.hpg .hpg-consult__submit {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.hpg .hpg-consult__button {
  width: 100%;
  min-width: 140px;
  padding: 15px 32px;
  border-radius: 8px;
  background-color: var(--c-primary);
  color: var(--c-white);
  font-size: var(--fs-body);
  line-height: 22px;
  font-weight: 500;
  text-align: center;
  cursor: pointer;
  transition:
    background-color 160ms ease,
    transform 120ms ease;
}

.hpg .hpg-consult__button:hover {
  background-color: #d24f36;
}

.hpg .hpg-consult__button:active {
  transform: scale(0.98);
}

.hpg .hpg-consult__consent {
  display: flex;
  align-items: center;
  gap: 16px;
  cursor: pointer;
}

/* Свой флажок: системный не принимает ни радиус, ни цвет рамки, а в
   макете это квадрат 16px со скруглением 4px. Галочка — фоновая
   картинка, поэтому не требует ни лишнего элемента, ни ::before,
   который часть браузеров на input не рисует. */
.hpg .hpg-consult__checkbox {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 0;
  appearance: none;
  -webkit-appearance: none;
  border: 1px solid var(--c-muted);
  border-radius: 4px;
  background-color: var(--c-white);
  background-position: center;
  background-repeat: no-repeat;
  background-size: 10px 8px;
  cursor: pointer;
  transition:
    background-color 160ms ease,
    border-color 160ms ease;
}

.hpg .hpg-consult__checkbox:checked {
  border-color: var(--c-primary);
  background-color: var(--c-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 8'%3E%3Cpath d='M1 4.15 3.55 6.7 9 1.25' fill='none' stroke='%23fff' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

.hpg .hpg-consult__checkbox:focus-visible {
  outline: 2px solid var(--c-primary);
  outline-offset: 2px;
}

.hpg .hpg-consult__consent-text {
  color: var(--c-muted);
  font-size: var(--fs-cap);
  line-height: var(--lh-cap);
  letter-spacing: 0.01em;
}

.hpg .hpg-consult__consent-text a {
  text-decoration: underline;
}

.hpg .hpg-consult__consent-text a:hover {
  color: var(--c-primary);
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-consult__input,
  .hpg .hpg-consult__button,
  .hpg .hpg-consult__checkbox {
    transition: none;
  }
}

/* --- Планшет ------------------------------------------------
   Рисунок и форма перестают делить ряд: в 720px колонки карточка
   ужалась бы до 380px, а рисунок — до трети своего размера, и оба
   перестали бы читаться. Поэтому они встают друг под друга, рисунок
   при этом не растягивается на всю ширину — он остаётся подводкой
   к форме, а не самостоятельной картиной.
   ----------------------------------------------------------- */
@media (max-width: 1023px) {
  .hpg .hpg-consult {
    gap: 48px;
  }

  .hpg .hpg-consult__head,
  .hpg .hpg-faq__head {
    gap: 24px;
  }

  .hpg .hpg-consult__headline,
  .hpg .hpg-faq__headline {
    gap: 20px;
  }

  .hpg .hpg-consult__offer {
    flex-direction: column;
    gap: 24px;
  }

  .hpg .hpg-consult__illustration {
    flex: 0 0 auto;
    width: 100%;
    max-width: 360px;
  }

  .hpg .hpg-consult__form {
    flex: 0 0 auto;
    width: 100%;
    max-width: 450px;
  }
}

/* --- Мобильный ----------------------------------------------
   Пузыри доли макета не держат: 48% от 343px — это столбик в две
   буквы. Вопрос остаётся чуть уже ответа, чтобы стороны читались,
   но обе реплики занимают почти всю ширину.
   ----------------------------------------------------------- */
@media (max-width: 767px) {
  .hpg .hpg-consult {
    gap: 40px;
  }

  .hpg .hpg-consult__head,
  .hpg .hpg-faq__head {
    gap: 20px;
  }

  .hpg .hpg-consult__headline,
  .hpg .hpg-faq__headline {
    gap: 12px;
  }

  .hpg .hpg-consult__dialog {
    gap: 20px;
  }

  .hpg .hpg-consult__parties {
    gap: 20px 24px;
  }

  .hpg .hpg-consult__avatar {
    width: 56px;
    height: 56px;
  }

  .hpg .hpg-consult__bubble {
    padding: 20px 16px;
  }

  .hpg .hpg-consult__bubble--ask {
    width: 88%;
  }

  .hpg .hpg-consult__bubble--answer {
    width: 100%;
  }

  .hpg .hpg-consult__form {
    gap: 24px;
    padding: 24px 16px;
  }

  .hpg .hpg-consult__input {
    padding: 0 16px;
  }
}

/* ============================================================
   Блок «FAQ». Источник: Figma, node 670:5531.

   В макете карточки нарисованы раскрытыми и со стрелкой вверх — это
   свёрнутый список, показанный целиком. Поэтому здесь <details>:
   раскрытое состояние совпадает с макетом, стрелка получает смысл,
   а сворачивание даёт сам браузер, без строчки JS.

   Вопрос в макете стоит в одну строку по центру ячейки. Это оговорка
   инструмента, а не решение: длинные вопросы там просто выходят за
   карточку. Здесь строка переносится и выключена влево — иначе
   заголовок из двух строк вставал бы лесенкой рядом со стрелкой.
   ============================================================ */
.hpg .hpg-faq {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 64px;
  padding: var(--pad-y) var(--pad-x);
  background-color: var(--c-page);
}

/* Спрайт со стрелкой сам ничего не рисует — только отдаёт <symbol>
   карточкам. Из потока выведен, чтобы не занимать первый шаг колонки. */
.hpg .hpg-faq__sprite {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}

.hpg .hpg-faq__list {
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 100%;
  max-width: var(--wide-w);
}

.hpg .hpg-faq__item {
  padding: 32px;
  border: 1px solid var(--c-border);
  border-radius: 16px;
  background-color: var(--c-white);
  transition: border-color 200ms ease;
}

/* Кликабельна вся шапка карточки, поэтому отзывается и сама карточка —
   рамкой на тон теплее. Подъёма нет: карточки страницы плоские, тень
   на ней всего одна, у формы записи. */
.hpg .hpg-faq__item:hover {
  border-color: #d8ccc1;
}

/* Во время раскрытия и сворачивания карточка обрезает содержимое:
   анимируется её высота, и ответ должен уходить под край, а не
   торчать из-под него. В покое обрезки нет — иначе она срезала бы
   контур фокуса на вопросе. */
.hpg .hpg-faq__item[data-hpg-animating] {
  overflow: hidden;
}

/* Строка вопроса — это и есть <summary>. Свой маркер браузера убран
   дважды: list-style снимает его в Firefox и Chrome, ::-webkit-details-marker
   — в Safari. */
.hpg .hpg-faq__question {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  list-style: none;
  font-size: var(--fs-h4);
  line-height: var(--lh-h4);
  font-weight: 500;
  cursor: pointer;
  transition: color 200ms ease;
}

.hpg .hpg-faq__question::-webkit-details-marker {
  display: none;
}

/* Цветом отмечен раскрытый вопрос, а не любой. Закрытые идут тоном
   текста: девять оранжевых строк подряд спорят друг с другом и с
   заголовком блока, и непонятно, где сейчас читают. Оранжевый остаётся
   признаком «этот открыт» — тем же цветом, что и выплаты в таблице.

   Стрелка берёт цвет от вопроса (currentColor), поэтому идёт вместе
   с ним и отдельного правила не требует. */
.hpg .hpg-faq__item[open] .hpg-faq__question {
  color: var(--c-primary);
}

/* С живым JS цвет ведёт data-hpg-open — как и поворот стрелки: при
   сворачивании open держится до конца хода, а вопрос должен погаснуть
   сразу с нажатием. */
.hpg .hpg-faq__list[data-hpg-enhanced] .hpg-faq__item .hpg-faq__question {
  color: var(--c-body);
}

.hpg .hpg-faq__list[data-hpg-enhanced] .hpg-faq__item[data-hpg-open] .hpg-faq__question {
  color: var(--c-primary);
}

/* Ховер бьёт оба состояния, поэтому вес селектора поднят до их уровня:
   иначе правила выше перекрыли бы его. */
.hpg .hpg-faq__item:hover .hpg-faq__question,
.hpg .hpg-faq__list[data-hpg-enhanced] .hpg-faq__item:hover .hpg-faq__question {
  color: var(--c-hover);
}

.hpg .hpg-faq__question:focus-visible {
  outline: 2px solid var(--c-primary);
  outline-offset: 4px;
  border-radius: 4px;
}

/* Стрелка наследует цвет вопроса (currentColor в самом symbol), поэтому
   ховер ведёт их вместе. Раскрытая карточка держит остриё вверх. */
.hpg .hpg-faq__chevron {
  flex: 0 0 auto;
  width: 24px;
  height: 24px;
  transition: transform 200ms ease;
}

/* Без JS стрелку ведёт сам атрибут open. */
.hpg .hpg-faq__item[open] .hpg-faq__chevron {
  transform: rotate(180deg);
}

/* С живым JS — отдельный признак data-hpg-open. При сворачивании open
   держится до конца движения, иначе ответ пропал бы мгновенно и
   сворачивать было бы нечего. А стрелка должна повернуться сразу,
   вместе с нажатием: это ответ на действие, он не ждёт анимацию. */
.hpg .hpg-faq__list[data-hpg-enhanced] .hpg-faq__item .hpg-faq__chevron {
  transform: none;
}

.hpg .hpg-faq__list[data-hpg-enhanced] .hpg-faq__item[data-hpg-open] .hpg-faq__chevron {
  transform: rotate(180deg);
}

.hpg .hpg-faq__answer {
  margin-top: 16px;
  color: var(--c-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
}

@media (prefers-reduced-motion: reduce) {
  .hpg .hpg-faq__question,
  .hpg .hpg-faq__chevron {
    transition: none;
  }
}

@media (max-width: 1023px) {
  .hpg .hpg-faq {
    gap: 48px;
  }
}

@media (max-width: 767px) {
  .hpg .hpg-faq {
    gap: 40px;
  }

  .hpg .hpg-faq__item {
    padding: 20px 16px;
  }

  .hpg .hpg-faq__question {
    gap: 16px;
  }

  .hpg .hpg-faq__chevron {
    width: 20px;
    height: 20px;
  }
}
