/* ==========================================================================
   TAOS — адаптив. Все медиазапросы проекта в одном файле.

   Подключается ПОСЛЕ css/main.css и только вместе с ним.

   Секции и их порядок повторяют main.css: если у блока есть адаптивные
   правила, они лежат здесь под тем же именем. Внутри секции сохранён
   исходный порядок брейкпоинтов.

   Содержание (искать по номеру или по имени блока):
      1. base/reset
      2. base/variables
      3. blocks/decor
      4. blocks/btn
      5. blocks/logo
      6. blocks/lang
      7. blocks/section-header
      8. blocks/step
      9. blocks/feature-card
     10. blocks/capability-card
     11. blocks/tabs
     12. blocks/team-card
     13. blocks/award-card
     14. blocks/plan-card
     15. blocks/faq
     16. blocks/contact-list
     17. blocks/contact-form
     18. blocks/header
     19. blocks/mobile-menu
     20. blocks/footer
     21. blocks/hero
     22. blocks/steps
     23. blocks/capabilities
     24. blocks/dashboard-promo
     25. blocks/benefits
     26. blocks/dashboard-cta
     27. blocks/partnership
     28. blocks/about-hero
     29. blocks/about-team
     30. blocks/about-awards
     31. blocks/pricing-hero
     32. blocks/pricing-faq
     33. blocks/contacts
     34. blocks/doc
     35. blocks/app-gate
   ========================================================================== */

/* ======================================================================
   1. base/reset
   ====================================================================== */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }
}

/* ======================================================================
   2. base/variables
   ====================================================================== */
@media (min-width: 768px) {
  :root {
    --gutter: 32px;
    --section-py: 72px;
  }
}

@media (min-width: 1280px) {
  :root {
    --gutter: 40px;
    --section-py: 100px;
  }
}

/* ======================================================================
   3. blocks/decor
   ====================================================================== */
/* Ниже десктопного макета: пятна шире экрана, видимой границы нет */
@media (max-width: 1279px) {
  .page {
    background-image:
      radial-gradient(
        ellipse 165vw min(95vw, 620px) at 80% 3%,
        rgba(154, 64, 196, 0.13) 0%,
        rgba(154, 64, 196, 0.06) 45%,
        rgba(154, 64, 196, 0) 80%
      ),
      radial-gradient(
        ellipse 155vw min(55vw, 520px) at -8% 42%,
        rgba(160, 64, 160, 0.12) 0%,
        rgba(160, 64, 160, 0.05) 45%,
        rgba(160, 64, 160, 0) 82%
      );
    background-size: 100% 1200px;
  }
}

@media (max-width: 767px) {
  .page {
    background-size: 100% 900px;
  }
}

/* ======================================================================
   4. blocks/btn
   ====================================================================== */
@media (min-width: 1280px) {
  .btn {
    font-size: 18px;
  }

  /* Призрачная кнопка на десктопе остаётся 16px — так в макете (Inter 600 16
     против Noto Sans 600 18 у основной). Правило обязано стоять ниже .btn:
     селекторы одного веса, решает порядок. Держим его здесь, а не в базовом
     .btn--ghost, чтобы оно не зависело от того, где в проекте лежат
     медиазапросы. */
  .btn--ghost {
    font-size: 16px;
  }
}

@media (min-width: 1280px) {
  .btn--lg {
    min-height: 64px;
  }
}

/* ======================================================================
   5. blocks/logo
   ====================================================================== */
@media (min-width: 1024px) {
  .header__logo img,
  .footer__logo img {
    width: 154px;
  }
}

/* ======================================================================
   6. blocks/lang
   ====================================================================== */
/* --- Десктоп: кнопка встаёт в ряд с «Sign in» и «Download» --- */
@media (min-width: 1024px) {
  .lang__toggle {
    height: auto;
    padding: 8px 12px;
    font-size: 16px;
  }

  .lang__option {
    font-size: 16px;
  }
}

@media (min-width: 1280px) {
  .lang__toggle {
    font-size: 18px;
  }
}

/* ======================================================================
   7. blocks/section-header
   ====================================================================== */
@media (min-width: 768px) {
  .section-header--about {
    gap: 8px;
  }

  .section-header--about .eyebrow {
    padding: 6px 14px;
    font-family: var(--font-sans);
    font-size: clamp(12px, 0.73vw, 14px);
    line-height: 1.36;
  }

  .section-header--about .section-header__title {
    line-height: 1.1;
  }
}

/* ======================================================================
   8. blocks/step
   ====================================================================== */
@media (min-width: 1024px) {
  .step {
    gap: 24px;
  }
}

/* ======================================================================
   9. blocks/feature-card
   ====================================================================== */
@media (min-width: 768px) {
  .feature-card {
    gap: 16px;
    padding: 32px;
  }
}

/* ======================================================================
   10. blocks/capability-card
   ====================================================================== */
@media (min-width: 768px) {
  .capability-card {
    padding: 40px 40px 0;
    border-radius: var(--radius-lg);
  }
}

/* ======================================================================
   11. blocks/tabs
   ====================================================================== */
@media (min-width: 1024px) {
  .tabs {
    display: none;
  }
}

/* ======================================================================
   12. blocks/team-card
   ====================================================================== */
@media (min-width: 768px) {
  .team-card {
    gap: 12px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background-color: transparent;
    box-shadow: none;
  }

  .team-card__head {
    flex-direction: column;
    gap: 24px;
  }

  .team-card__photo {
    width: 100%;
  }

  .team-card__info {
    gap: 8px;
    text-align: center;
  }

  .team-card__name {
    font-size: clamp(18px, 1.25vw, 24px);
    font-weight: 700;
  }

  .team-card__role {
    font-size: clamp(14px, 0.94vw, 18px);
    color: var(--color-accent);
  }

  .team-card__text {
    font-size: 14px;
    line-height: 1.57;
    text-align: center;
  }
}

/* ======================================================================
   13. blocks/award-card
   ====================================================================== */
@media (min-width: 768px) {
  .award-card {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas:
      "logo"
      "body"
      "year";
    align-content: start;
    justify-items: center;
    gap: 4px;
    padding: 24px;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
  }

  /* 4px общего зазора + 16px здесь = 20px между логотипом и текстом */
  .award-card__logo {
    width: clamp(96px, 7.3vw, 140px);
    margin-bottom: 16px;
    padding: 0;
    border-radius: 30px;
    background-color: transparent;
  }

  .award-card__year {
    justify-self: center;
    font-family: var(--font-sans);
    font-size: clamp(14px, 0.94vw, 18px);
    font-weight: 600;
    line-height: 1.36;
    color: var(--color-accent-light);
  }

  .award-card__body {
    gap: 4px;
    text-align: center;
  }

  .award-card__title {
    font-size: clamp(16px, 0.94vw, 18px);
  }

  .award-card__text {
    font-family: var(--font-sans);
    font-size: clamp(14px, 0.84vw, 16px);
    line-height: 1.36;
  }
}

/* ======================================================================
   14. blocks/plan-card
   ====================================================================== */
@media (min-width: 768px) {
  .plan-card {
    padding: 42px;
  }

  .plan-card__icon {
    margin-top: 4px;
  }

  .plan-card__button {
    min-height: 74px;
    font-size: clamp(18px, 1.25vw, 24px);
    line-height: clamp(25px, 1.72vw, 33px);
  }
}

/* ======================================================================
   15. blocks/faq
   ====================================================================== */
@media (min-width: 768px) {
  .faq__question {
    padding: 32px;
  }

  .faq__answer {
    padding: 16px 32px 32px;
  }
}

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

/* ======================================================================
   16. blocks/contact-list
   ====================================================================== */
/* На самых узких экранах двум колонкам уже тесно */
@media (max-width: 359px) {
  .contact-list {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ======================================================================
   17. blocks/contact-form
   ====================================================================== */
@media (min-width: 768px) {
  .contact-form {
    padding: 60px;
  }

  .contact-form__title {
    margin-bottom: 48px;
  }

  .contact-form__fields {
    gap: 32px;
  }

  .contact-form__field--area {
    margin-top: 48px;
  }

  .contact-form__input {
    padding: 10px 10px 32px;
  }

  .contact-form__actions {
    margin-top: 48px;
  }

  .contact-form__submit {
    /* Ширина кнопки из макета: по содержимому она получается уже */
    min-width: min(326px, 100%);
    min-height: 74px;
    padding: 16px 32px;
    font-size: clamp(18px, 1.25vw, 24px);
    line-height: 24px;
  }
}

/* ======================================================================
   18. blocks/header
   ====================================================================== */
/* --- Планшет: шапка становится стеклянной карточкой --- */
@media (min-width: 768px) {
  .header__inner {
    padding: 8px 8px 8px 20px;
    border: 2px solid rgba(255, 255, 255, 0.9);
    border-radius: var(--radius-pill);
    background-color: rgba(255, 255, 255, 0.7);
    box-shadow: 0 17px 44px rgba(123, 112, 176, 0.1);
    -webkit-backdrop-filter: blur(72px);
    backdrop-filter: blur(72px);
  }
}

/* --- Десктоп: полная навигация, бургер прячется --- */
@media (min-width: 1024px) {
  .header__inner {
    min-height: 78px;
    padding: 15px 17px 15px 40px;
    gap: 16px;
  }

  .header__logo {
    margin-right: 0;
  }

  .header__nav {
    display: block;
    margin: 0 auto;
  }

  .header__actions {
    display: flex;
    align-items: center;
    gap: 8px;
  }

  .header__burger {
    display: none;
  }
}

/* --- Меню ровно по центру страницы ---

   В макете меню стоит по центру фрейма. В потоке этого не добиться: правая
   группа (переключатель языка и две кнопки) шире логотипа, автоотступы делят
   свободное место поровну, и меню уезжает влево — с переключателем на 42px.
   Поэтому на широких экранах меню выносится из потока: .header__inner
   центрирован контейнером, значит его 50% и есть центр страницы.

   Порог 1100, а не 1024: замером на 1024 между «Contacts» и кнопкой языка
   остаётся 15px — не пересекаются, но выглядит впритык. Ниже порога меню
   остаётся в потоке, посередине свободного места. */
@media (min-width: 1100px) {
  .header__inner {
    position: relative;
  }

  .header__nav {
    position: absolute;
    top: 50%;
    left: 50%;
    margin: 0;
    transform: translate(-50%, -50%);
  }

  /* Меню больше не занимает место в строке — вправо группу кнопок
     отодвигает логотип. */
  .header__logo {
    margin-right: auto;
  }
}

/* Шапка поверх первого экрана — только там, где так в макете.

   На главной иллюстрация hero уходит под шапку, поэтому шапка вынесена
   из потока, а hero компенсирует её своим верхним паддингом. На «О нас»
   шапка стоит в потоке обычным блоком: в макете первый экран начинается
   строго под ней. Без модификатора страница теряла бы 100px отступа
   сверху — шапка накрывала бы их собой. */
@media (min-width: 1280px) {
  .header--overlay {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
  }
}

/* ======================================================================
   19. blocks/mobile-menu
   ====================================================================== */
@media (min-width: 1024px) {
  .mobile-menu {
    display: none;
  }
}

/* ======================================================================
   20. blocks/footer
   ====================================================================== */
@media (min-width: 1024px) {
  .footer {
    padding-block: 27px 40px;
  }

  .footer__grid {
    grid-template-columns: 1fr auto 1fr;
    grid-template-areas:
      "nav  nav  side"
      "line line line"
      "copy logo legal";
    row-gap: 28px;
  }

  .footer__logo {
    justify-self: center;
  }

  .footer__legal {
    justify-self: end;
  }
}

/* ======================================================================
   21. blocks/hero
   ====================================================================== */
@media (min-width: 768px) {
  .hero__actions {
    flex-direction: row;
    align-items: center;
  }
}

/* --- Десктоп: две колонки, иллюстрация справа поверх колонки текста --- */
@media (min-width: 1280px) {
  .hero {
    padding-top: 258px;
    padding-bottom: 120px;
  }

  .hero__content {
    position: relative;
    z-index: 2;
    /* Колонка текста обязана заканчиваться до телефона, который стоит
       на 50.55% ширины экрана. 50% контейнера + 0.5vw как раз даёт эту
       границу на любой ширине, минус 24px зазора. В макете это ровно 754px. */
    max-width: min(754px, calc(50% + 0.5vw - 24px));
  }

  .hero__actions {
    gap: 16px;
    margin-top: 23px;
  }

  .hero__qr {
    display: flex;
    margin-top: 42px;
  }

  /* Композиция прижата к правому краю экрана и частично за него уходит —
     ноутбук в самой картинке уже обрезан справа, так она и задумана.
     Обрезает её .hero, у него overflow: hidden.

     Размеры в vw, а не в пикселях: доля видимого должна быть одинаковой
     на любой ширине.

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

       ширина 49.45vw — чтобы телефон встал на 50.55vw, где заканчивается
       колонка текста и где он стоял в исходном макете, а правый край
       картинки пришёлся ровно на край экрана;

       top -5.94vw — чтобы верх ноутбука оказался в 144px от верха секции
       при экране 1920, как в макете. Секция начинается на 258px ниже
       верхнего края картинки, отсюда 144 - 258 = -114px = -5.94vw.

     top в vw, а не в пикселях, намеренно: будь он в пикселях, на 1280
     композиция съехала бы относительно текста. */
  .hero__media {
    position: absolute;
    top: -5.94vw;
    /* Отсчёт идёт от .hero__inner, а он уже с полями контейнера — на 1920
       это 180px с каждой стороны. right: 0 прижал бы картинку к краю
       текстовой колонки, а нужно к краю экрана, поэтому поля вычитаем:
       половина своей ширины минус половина экрана и даёт ровно их. */
    right: calc(50% - 50vw);
    z-index: 1;
    width: 49.45vw;
    margin: 0;
  }

}

/* ======================================================================
   22. blocks/steps
   ====================================================================== */
@media (min-width: 768px) {
  .steps__card {
    padding: 40px;
    border-radius: var(--radius-lg);
  }

  .steps__grid {
    gap: 32px;
    margin-top: 48px;
  }

  .steps__list {
    gap: 24px;
    margin-top: 24px;
  }
}

@media (min-width: 1024px) {
  .steps__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 42px;
  }
}

@media (min-width: 1280px) {
  .steps__grid {
    margin-top: 55px;
  }

  /* Под выезжающие иллюстрации освобождаем место внутри карточек */
  .steps__card:first-child {
    padding-left: 180px;
  }

  .steps__card:last-child {
    padding-right: 180px;
  }

  /* Коробка иллюстраций — это сама секция, а не холст 1920x1109 из макета.
     Ширина по вьюпорту, а не 1920px: см. комментарий в hero.css.

     Почему не aspect-ratio, как было: высоту секции задаёт текст, и до
     макетной она не дотягивает — на 1920 секция 951px против 1109 в макете.
     Холст с макетной пропорцией растёт вместе с шириной экрана и с какой-то
     ширины вылезает за низ секции, а у секции overflow: hidden. Девайсы
     срезало ровной горизонтальной линией: на 1920 ноутбук на 126px, телефон
     на 56px, на 2560 — на 486 и 391. Отсчёт от верха тут не спасти: ноутбук
     высотой 881px просто не помещается под отметку 197px в секции 951px.

     Поэтому отсчёт идёт от НИЗА секции. В макете ноутбук не доходит до него
     31px, телефон — 103px; эти же значения получаются из min() на 1920. */
  .steps__media {
    position: absolute;
    inset: 0;
    z-index: 0;
    display: block;
    pointer-events: none;
  }

  .steps__laptop,
  .steps__phone {
    position: absolute;
    max-width: none;
  }

  .steps__laptop img,
  .steps__phone img {
    width: 100%;
    height: auto;
  }

  /* Выше 1920 композиция не растёт. Контейнер там уже упёрся в 1560, секция
     выше не становится, а девайсы по процентам росли бы дальше — и опять
     перестали бы помещаться. Вторые значения в min()/max() — это те же
     проценты, посчитанные для 1920, поэтому на самой 1920 перелома нет. */
  .steps__laptop {
    left: max(-34.79%, -668px);
    bottom: min(1.62vw, 31px);
    width: min(57.08%, 1096px);
  }

  /* Телефон привязан к правому краю экрана, а не к левому: в макете он
     выходит за край на 2.54% ширины, и держать надо именно этот вынос. */
  .steps__phone {
    right: max(-2.54%, -49px);
    bottom: min(5.37vw, 103px);
    width: min(18.44%, 354px);
  }
}

/* ======================================================================
   23. blocks/capabilities
   ====================================================================== */
@media (min-width: 768px) {
  /* Планшетного макета нет: на 768–1023 раскладываем карточки в две колонки,
     иначе секция вытягивается почти вдвое. */
  .capabilities__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 48px;
  }
}

@media (min-width: 1024px) {
  .capabilities__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 34px;
    margin-top: 60px;
  }
}

/* ======================================================================
   24. blocks/dashboard-promo
   ====================================================================== */
@media (min-width: 768px) {
  .dashboard-promo {
    gap: 26px;
    margin-top: 40px;
    padding: 40px;
    border-radius: var(--radius-lg);
  }

  .dashboard-promo__media {
    gap: 26px;
  }
}

@media (min-width: 1280px) {
  .dashboard-promo {
    flex-direction: row;
    align-items: center;
  }

  .dashboard-promo__content {
    flex: 0 0 571px;
  }

  .dashboard-promo__media {
    flex: 1 1 auto;
  }
}

/* ======================================================================
   25. blocks/benefits
   ====================================================================== */
@media (min-width: 768px) {
  .benefits__grid {
    margin-top: 40px;
  }
}

@media (min-width: 1024px) {
  .benefits__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 24px;
    max-width: 1268px;
    margin: 60px auto 0;
  }

  /* Все шесть карточек одной высоты — так в макете, и так соседние
     по строке не разъезжаются.

     Держится это на сетке, а не на числе. Колонки — элементы одного
     грида, поэтому обе ростом с ту, что длиннее. Внутри колонки список
     занимает всю оставшуюся высоту (строка 1fr), а его собственные
     строки равны между собой, и карточка растянута на свою строку
     (height: 100% у .feature-card уже есть).

     Числом высоту задавать нельзя: раньше у карточки стоял
     min-height: 195px, снятый с английского макета, и на армянском
     тексте карточки из него вышли — каждая на свою величину.

     grid-auto-rows, а не repeat(3, 1fr): карточки приходят из поля
     списком, и правило не должно зависеть от того, сколько их завели.

     align-items переопределяем намеренно: в main.css у колонки флексбокс
     с center, а в гриде то же свойство прижало бы карточку к середине
     строки вместо растягивания. Горизонтальное центрирование подписи
     переезжает в justify-items. */
  .benefits__col {
    display: grid;
    grid-template-rows: auto 1fr;
    align-items: stretch;
    justify-items: center;
    gap: 24px;
  }

  .benefits__list {
    display: grid;
    grid-auto-rows: 1fr;
    gap: 24px;
  }

  .benefits__label {
    display: inline-block;
  }
}

/* ======================================================================
   26. blocks/dashboard-cta
   ====================================================================== */
@media (min-width: 1024px) {
  .dashboard-cta__inner {
    grid-template-columns: minmax(0, 627px) minmax(0, 1fr);
    align-items: center;
    gap: 60px;
  }

  .dashboard-cta__media img {
    width: 1184px;
    max-width: none;
  }
}

@media (min-width: 1280px) {
  /* Колонки и картинка считаются от ширины экрана, а не в жёстких пикселях:
     иначе на экране уже макета скриншот режется посреди таблицы.
     На 1920 значения совпадают с макетом: 627px, 117px, 1184px. */
  .dashboard-cta__inner {
    grid-template-columns: minmax(0, 32.7vw) minmax(0, 1fr);
    gap: 6.1vw;
  }

  .dashboard-cta__media img {
    /* 1210px из 1920 — вместе с внешней обводкой 13px, поэтому же
       отрицательный отступ, чтобы содержимое встало по координатам макета */
    width: 63.02vw;
    margin-left: -0.68vw;
  }

  .dashboard-cta__title {
    margin-top: 26px;
  }

  .dashboard-cta__text {
    margin-top: 26px;
  }
}

/* ======================================================================
   27. blocks/partnership
   ====================================================================== */
@media (min-width: 768px) {
  .partnership__inner {
    gap: 32px;
    padding: 60px 40px;
    border-radius: var(--radius-lg);
  }
}

@media (min-width: 1280px) {
  .partnership__inner {
    gap: 40px;
    padding: 61px 40px;
    border-radius: var(--radius-xl);
  }

  .partnership__text {
    margin-top: -24px;
  }
}

/* ======================================================================
   28. blocks/about-hero
   ====================================================================== */
@media (min-width: 768px) {
  .about-hero {
    padding-top: var(--section-py);
    padding-bottom: 0;
  }

  .about-hero__title {
    line-height: 1.21;
  }

  /* На десктопе иллюстрация без рамки: её края растворяются в фоне
     страницы — прозрачность вшита в сам файл (см. CLAUDE.md). */
  .about-hero__media {
    /* Доля иллюстрации от ширины экрана держится такой же, как в макете
       (1234 из 1920), иначе на промежуточной ширине она раздувается
       почти во весь контейнер и перевешивает заголовок. */
    max-width: min(1234px, 64.3vw);
    margin: 11px auto 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background-color: transparent;
  }

  .about-hero__image {
    aspect-ratio: 1234 / 543;
    border-radius: 0;
  }
}

/* ======================================================================
   29. blocks/about-team
   ====================================================================== */
/* Мобильный макет кладёт секцию на светлую подложку: карточки команды там
   белые с рамкой, и на белом фоне страницы они бы не читались. */
@media (max-width: 767px) {
  .about-team {
    background-color: var(--color-bg-soft);
  }
}

@media (min-width: 768px) {
  .about-team__grid {
    /* Ширина колонки отдельным свойством: она же нужна одинокой карточке
       в последней строке, и дублировать число в двух местах нельзя. */
    --team-col: 294px;
    grid-template-columns: repeat(2, minmax(0, var(--team-col)));
    justify-content: center;
    column-gap: 40px;
    row-gap: 48px;
    margin-top: clamp(32px, 3.34vw, 64px);
  }

  /* Если в последней строке остался один человек, ставим его по центру.
     Строка из двух и трёх заполняется слева направо, как обычно.

     «Последний ребёнок стоит на нечётном месте» и значит «в последней
     строке он один» — при двух колонках. Для трёх колонок условие другое,
     поэтому ниже, в блоке 1024, это правило снимается и ставится своё. */
  .about-team__grid > :last-child:nth-child(2n + 1) {
    grid-column: 1 / -1;
    justify-self: center;
    width: var(--team-col);
  }
}

@media (min-width: 1024px) {
  .about-team__grid {
    grid-template-columns: repeat(3, minmax(0, var(--team-col)));
    column-gap: 64px;
    row-gap: 64px;
  }

  /* Снимаем правило двух колонок: при трёх «нечётный последний» уже не
     значит «один в строке» — девять человек дали бы полную строку. */
  .about-team__grid > :last-child:nth-child(2n + 1) {
    grid-column: auto;
    justify-self: stretch;
    width: auto;
  }

  /* Один в последней строке — это когда всего их 3n + 1. Ставим в среднюю
     колонку: она и есть центр, растягивать на всю ширину не нужно. */
  .about-team__grid > :last-child:nth-child(3n + 1) {
    grid-column: 2;
  }
}

@media (min-width: 1440px) {
  .about-team__grid {
    column-gap: clamp(64px, 7.03vw, 135px);
  }
}

/* ======================================================================
   30. blocks/about-awards
   ====================================================================== */
@media (min-width: 768px) {
  .about-awards__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 29px;
    margin-top: clamp(32px, 2.87vw, 55px);
  }
}

@media (min-width: 1280px) {
  .about-awards__grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

@media (min-width: 1280px) {
  .about-awards__decor {
    position: absolute;
    top: -27.4vw;
    right: 0;
    left: 0;
    z-index: 0;
    display: block;
    overflow: hidden;
    height: 51vw;
    pointer-events: none;
  }

  .about-awards__swirl {
    position: absolute;
    top: 0;
    right: -33.6vw;
    width: 55vw;
    height: auto;
  }
}

/* ======================================================================
   31. blocks/pricing-hero
   ====================================================================== */
@media (min-width: 1280px) {
  .pricing-hero__decor {
    position: absolute;
    top: -22vw;
    right: 0;
    left: 0;
    z-index: 0;
    display: block;
    overflow: hidden;
    height: 58vw;
    pointer-events: none;
  }

  .pricing-hero__swirl {
    position: absolute;
    top: 0;
    left: -31vw;
    width: 61vw;
    height: auto;
  }
}

/* ======================================================================
   32. blocks/pricing-faq
   ====================================================================== */
@media (min-width: 1280px) {
  .pricing-faq {
    background-image: radial-gradient(
      ellipse clamp(660px, 45vw, 880px) clamp(420px, 30vw, 580px) at 6% 78%,
      rgba(160, 64, 170, 0.13) 0%,
      rgba(160, 64, 170, 0.06) 42%,
      rgba(160, 64, 170, 0) 78%
    );
  }
}

/* ======================================================================
   33. blocks/contacts
   ====================================================================== */
@media (min-width: 1024px) {
  /* Колонки равной ширины: на 1560 это 760 и 760 при макетных 770 и 750,
     а на промежуточных ширинах обе сжимаются вместе. Жёсткие 750px под
     форму на 1024 не оставили бы тексту места. */
  .contacts__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: start;
  }
}

@media (min-width: 1280px) {
  .contacts__decor {
    position: absolute;
    top: -22vw;
    right: 0;
    left: 0;
    z-index: 0;
    display: block;
    overflow: hidden;
    height: 58vw;
    pointer-events: none;
  }

  .contacts__swirl {
    position: absolute;
    top: 0;
    left: -31vw;
    width: 61vw;
    height: auto;
  }
}

/* ======================================================================
   34. blocks/doc
   ====================================================================== */
@media (min-width: 600px) {
  /* Два шага в ряд: экран уже вмещает две колонки по 287px. */
  .doc__body .doc__steps {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  /* Все четыре в ряд — как в исходном PDF, где шаги шли попарно
     только из-за формата страницы. */
  .doc__body .doc__steps {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 20px;
  }
}

/* На узких экранах отступы между разделами сжимаются: на мобильном
   40px между пунктами съедают экран. */
@media (max-width: 767px) {
  .doc__body h2 {
    margin-top: 28px;
    font-size: 20px;
    line-height: 28px;
  }

  .doc__meta {
    margin-bottom: 24px;
  }

  .doc__file {
    height: 60vh;
    min-height: 360px;
  }
}

/* ======================================================================
   35. blocks/app-gate
   ====================================================================== */
/* Две кнопки одной ширины занимают в строке 420px: по 202 плюс зазор 16.
   С боковыми полями 18 это требует экрана от 456px, поэтому ниже 480
   ставим их в столбик. Иначе грид сожмёт колонки до минимума и надписи
   переносятся по словам.

   В столбике ширина тоже общая: колонка одна, и обе кнопки получают
   ширину самой широкой. */
@media (max-width: 479px) {
  .app-gate__stores {
    grid-auto-flow: row;
  }
}
