/* ============================================================================
   ViewChat — Download, мобильная раскладка (<= 767.98px only).

   Полностью самостоятельный слой. Всё, кроме двух строк `display: none`
   в самом начале файла, живёт внутри @media (max-width: 767.98px), поэтому
   выше брейкпоинта файл не добавляет к странице ни одного правила: десктопный
   download.html остаётся ровно тем, чем был, включая планшетный диапазон
   768–991.98px — он тоже не тронут.

   Ни одного глобального селектора: каждое правило начинается либо с `.dlm*`,
   либо с `body.download-page`. Тегов video / img / header / footer «вообще»
   здесь нет — только внутри собственных блоков страницы.

   Компаньон: js/download-mobile-redesign.js (видео-hero, аккордеон, код языка
   в шапке). Пути к медиа заданы в download.html на самой секции.
   ========================================================================== */

/* Мобильная разметка не должна существовать на десктопе. Парная половина —
   `.dlm-shell { display: none }` для шаблонных секций внутри медиазапроса:
   ровно одна из двух раскладок в игре всегда. */
.dlm { display: none; }
.dlm-foot { display: none; }

@media (max-width: 767.98px) {

  /* --- токены -------------------------------------------------------------
     Объявлены на body, а не на .dlm: шапка и футер лежат вне этого поддерева,
     а коралл и тёмный грунт нужны и им. */
  body.download-page {
    /* Коралл снят с референса (эйбрау FAQ, точки в заголовках). */
    --dlm-coral: #fd294e;
    --dlm-coral-ink: #e5203f;
    /* Тёмный грунт CTA и футера. Совпадает с верхней кромкой
       start-your-story-mobile-v2.png (#0a172c уходит в этот тон), поэтому
       картинка садится на секцию без видимого шва. */
    --dlm-ink: #0b1219;
    --dlm-ink-soft: #121b24;
    --dlm-paper: #ffffff;
    /* Тот же наборный чёрный, что у остальных мобильных страниц сайта
       (css/press-mobile.css), — страницы не расходятся в цвете текста. */
    --dlm-text: #0c0b2b;
    --dlm-text-2: #46455f;
    --dlm-muted: #8a8a9e;
    --dlm-line: rgba(12, 11, 43, .10);
    --dlm-line-soft: rgba(12, 11, 43, .07);
    /* Розовая подложка карточки «Still have questions?». */
    --dlm-blush: #fef1f5;
    --dlm-gutter: 20px;
    /* Ровно высота фиксированной мобильной шапки шаблона (responsive.css).
       Тем же числом отбивают свои первые экраны creators-pages.css,
       changelog-mobile.css и press-mobile.css — страницы не расходятся. */
    --dlm-hdr: 80px;
  }

  /* --- шаблонная раскладка уходит ------------------------------------------
     Секции старой страницы не удалены из разметки: это же самый HTML отдаёт
     десктоп. На телефоне они просто выключены, а вместе с ними — разделители
     между ними, иначе от каждого остался бы висящий hr. */
  body.download-page .download-section,
  body.download-page .statistic-section,
  body.download-page #faqs-1,
  body.download-page .page > hr.divider { display: none !important; }

  /* --- корень мобильной страницы ------------------------------------------ */
  .dlm {
    display: block;
    background: var(--dlm-paper);
    color: var(--dlm-text);
    font-family: 'Plus Jakarta Sans', 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    /* Единственная страховка от горизонтального выезда на уровне корня:
       ни один потомок не может расширить документ. */
    overflow-x: clip;
  }

  .dlm *,
  .dlm *::before,
  .dlm *::after { box-sizing: border-box; }

  /* =========================================================================
     ШАПКА
     Шаблонная мобильная шапка уже белая и ровно 80px (responsive.css) —
     переписывать её нечем и незачем. Здесь только то, чем она отличается от
     референса: волосяная линия вместо серой тени шаблона, компактные отступы
     и правая группа «флаг + код языка + шеврон | бургер».
     Все селекторы начинаются с body.download-page: другие страницы своей
     шапки не замечают.
     ========================================================================= */

  body.download-page .wsmobileheader {
    height: var(--dlm-hdr);
    /* Тень шаблона (0 0 2px rgba(50,50,50,.4)) читается грязной полосой над
       видео. Референс показывает чистую волосяную границу. */
    box-shadow: none;
    border-bottom: 1px solid var(--dlm-line-soft);
    background: var(--dlm-paper);
  }

  body.download-page .wsmobileheader .smllogo {
    margin-top: 0;
    padding-left: var(--dlm-gutter);
    /* Логотип центрируется по высоте шапки вместо margin-top шаблона. */
    display: flex;
    align-items: center;
    height: var(--dlm-hdr);
  }

  body.download-page .wsmobileheader .smllogo img {
    display: block;
    width: auto;
    height: 26px;
  }

  /* Правая группа. Бургер шаблона абсолютный, поэтому кнопка языка встаёт
     ровно слева от него — без флекс-контейнера, которого в разметке нет. */
  body.download-page .lang-btn--mobile {
    position: absolute;
    top: 50%;
    right: 58px;
    transform: translateY(-50%);
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
    margin: 0;
    padding: 7px 9px;
    border: 0;
    border-radius: 10px;
    background: transparent;
    line-height: 1;
  }

  body.download-page .lang-btn--mobile .lang-btn__icon {
    /* Флаг, а не 10x10 иконка шаблона: i18n.js подставляет сюда
       images/flag/flag_<lang>.png под активный язык. */
    width: 22px;
    height: 15px;
    border-radius: 2px;
    object-fit: cover;
  }

  /* Подпись «Language» референс заменяет двухбуквенным кодом. Само значение
     ставит js/download-mobile-redesign.js из активного языка, поэтому оно
     верно во всех локалях и ничего не хардкодит. Ключ lang.label не тронут:
     он остаётся в разметке и продолжает работать на всех прочих страницах. */
  body.download-page .lang-btn--mobile .lang-btn__label { display: none; }

  body.download-page .dlm-lang-code {
    color: #353f4f;
    font-family: 'Plus Jakarta Sans', 'Inter', system-ui, sans-serif;
    font-size: 14px;
    font-weight: 600;
    letter-spacing: .01em;
    line-height: 1;
  }

  body.download-page .dlm-lang-caret {
    display: block;
    width: 9px;
    height: 9px;
    color: #8b93a1;
  }

  /* =========================================================================
     1. HERO — вертикальное видео
     ========================================================================= */

  .dlm-hero {
    position: relative;
    /* Экран под шапкой целиком, но не выше пропорции референса (789/342 от
       ширины телефона = ~900px на 390). Нижняя граница — чтобы на коротком
       экране hero не съел обе store-кнопки. */
    height: clamp(560px, calc(100svh - var(--dlm-hdr)), 900px);
    margin-top: var(--dlm-hdr);
    display: flex;
    align-items: flex-end;
    overflow: hidden;
    isolation: isolate;
    /* Грунт до готовности постера — тёмный, а не чёрная вспышка. */
    background: #14161a;
    color: #fff;
  }

  /* Слой медиа: декоративный, кликов не перехватывает. Область
     зарезервирована с первой отрисовки (inset:0 внутри секции фиксированной
     высоты), поэтому появление видео не двигает layout ни на пиксель. */
  .dlm-hero__media {
    position: absolute;
    inset: 0;
    z-index: 0;
    overflow: hidden;
    pointer-events: none;
  }

  .dlm-hero__poster,
  .dlm-hero__video {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Кадр вертикальный 9:16, секция уже — режется по бокам. 50% 42%
       держит лицо в верхних двух третях, над скримом. */
    object-position: 50% 42%;
  }

  /* Постер остаётся под видео всегда: при загрузке, на паузе, при отказе
     автоплея и в режимах без видео (reduce-motion, Save-Data, слабое
     устройство). Пустого места и чёрного кадра не бывает. */
  .dlm-hero__poster { z-index: 0; }

  .dlm-hero__video {
    z-index: 1;
    opacity: 0;
    background: transparent;
    transition: opacity 260ms ease-out;
  }

  /* Класс ставит JS после первого реально декодированного кадра
     (loadeddata), а не по таймеру. */
  .dlm-hero.is-video-ready .dlm-hero__video { opacity: 1; }

  /* Скрим. Не декоративный, а несущий, и его плотность посчитана, а не
     подобрана на глаз.

     Ролик — контрастная ч/б нарезка: у 31% его кадров нижняя треть почти
     белая (замерено по всем 120 кадрам: средняя яркость зоны 247–255 из 255).
     Значит слой обязан держать читаемость белого текста в худшем случае —
     поверх ЧИСТО белого кадра, а не поверх среднего.

     Копия начинается на 43% высоты секции (рукописная подпись), заголовок —
     на 54%. Чтобы белое по белому дало хотя бы 7:1, нужна плотность 0.67:
     255*(1-0.67) = 84, а это яркость 0.093 и контраст 7.3:1. Отсюда 0.68 уже
     к 42% и дальше вверх. Замерено на собранной странице: подпись 7.4:1,
     заголовок 13:1, абзац 18:1 — всё выше порога AA даже на белом кадре.

     Выше 22% высоты слой полностью прозрачен: верх кадра не затемнён вовсе,
     лицо и композиция ролика видны как есть. */
  .dlm-hero__scrim {
    position: absolute;
    inset: 0;
    z-index: 2;
    background:
      linear-gradient(
        to bottom,
        rgba(8, 10, 14, 0) 0%,
        rgba(8, 10, 14, 0) 22%,
        rgba(8, 10, 14, .26) 32%,
        rgba(8, 10, 14, .68) 42%,
        rgba(8, 10, 14, .84) 54%,
        rgba(8, 10, 14, .92) 70%,
        rgba(8, 10, 14, .96) 100%
      );
  }

  /* Блок копии прижат к низу секции (.dlm-hero — flex с align-items:
     flex-end), поэтому поднимает его именно нижний отступ: 26 + 25 = 51px.
     Ничего другого это не задевает — ни высоту hero, ни кадр, ни шапку. */
  .dlm-hero__inner {
    position: relative;
    z-index: 3;
    width: 100%;
    padding: 0 var(--dlm-gutter) 51px;
  }

  .dlm-hero__title {
    margin: 0 0 14px;
    color: #fff;
    font-size: 41px;
    font-weight: 700;
    line-height: 1.09;
    letter-spacing: -.022em;
  }

  /* Коралловая точка после заголовка — общий приём всех трёх экранов. */
  .dlm-dot { color: var(--dlm-coral); }

  .dlm-hero__text {
    max-width: 21em;
    margin: 0 0 26px;
    color: rgba(255, 255, 255, .88);
    font-size: 16.5px;
    font-weight: 400;
    line-height: 1.5;
  }

  .dlm-hero__cta {
    display: flex;
    flex-direction: column;
    gap: 12px;
  }

  /* =========================================================================
     STORE-КНОПКИ (общие для hero и финальной CTA)
     Цвета приходят из контекста через две переменные, поэтому разметка
     кнопки одна на все три места, а тёмный/светлый вариант — это два
     объявления, а не два блока правил.
     ========================================================================= */

  .dlm-store {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    min-height: 68px;
    padding: 12px 18px;
    border: 1px solid var(--dlm-store-bd, transparent);
    border-radius: 14px;
    background: var(--dlm-store-bg);
    color: var(--dlm-store-fg);
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
    transition: transform 140ms ease, opacity 140ms ease;
  }

  .dlm-store:hover,
  .dlm-store:focus-visible { color: var(--dlm-store-fg); text-decoration: none; }

  .dlm-store:active { transform: scale(.985); }

  .dlm-store:focus-visible {
    outline: 2px solid var(--dlm-coral);
    outline-offset: 3px;
  }

  .dlm-store__icon {
    flex: 0 0 auto;
    width: 26px;
    height: 26px;
    object-fit: contain;
  }

  /* Яблоко в проекте одно — сплошной чёрный глиф images/png_icons/ios.png.
     На тёмной кнопке он инвертируется, ровно как на главной странице. */
  .dlm-store--dark .dlm-store__icon--apple { filter: invert(1); }

  .dlm-store__copy {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
  }

  .dlm-store__top {
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: .01em;
    line-height: 1.1;
    opacity: .82;
  }

  .dlm-store__name {
    font-size: 19px;
    font-weight: 600;
    letter-spacing: -.01em;
    line-height: 1.15;
    /* App Store / Google Play — имена магазинов, они одинаковы во всех
       локалях, поэтому строка не переносится и не сжимается. */
    white-space: nowrap;
  }

  .dlm-store__arrow {
    flex: 0 0 auto;
    width: 17px;
    height: 17px;
    opacity: .75;
  }

  html[dir="rtl"] .dlm-store__arrow { transform: scaleX(-1); }

  /* Единственный вариант кнопки на этой странице: тёмная заливка и тонкий
     белый контур. Он несущий, а не декоративный — и в hero, и в финальной CTA
     кнопка лежит на тёмном кадре, и без границы её край терялся в видео и в
     фотографии. Ровно 1px, без тени и свечения; box-sizing: border-box у
     кнопки уже стоит, поэтому габарит не меняется. */
  .dlm-store--dark {
    --dlm-store-bg: #0e0f12;
    --dlm-store-fg: #ffffff;
    --dlm-store-bd: rgba(255, 255, 255, .72);
  }

  /* =========================================================================
     2. FAQ
     ========================================================================= */

  .dlm-faq {
    padding: 40px var(--dlm-gutter) 44px;
    background: var(--dlm-paper);
  }

  .dlm-eyebrow {
    margin: 0 0 10px;
    color: var(--dlm-coral);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .05em;
    line-height: 1;
    text-transform: uppercase;
  }

  .dlm-faq__title {
    margin: 0 0 14px;
    color: var(--dlm-text);
    font-size: 36px;
    font-weight: 700;
    line-height: 1.11;
    letter-spacing: -.022em;
  }

  .dlm-faq__text {
    max-width: 20em;
    margin: 0 0 26px;
    color: var(--dlm-muted);
    font-size: 15.5px;
    line-height: 1.5;
  }

  /* --- аккордеон ----------------------------------------------------------
     Раскрыта всегда не более одной строки: открытие любой закрывает
     предыдущую (js/download-mobile-redesign.js). Разметка — <button> внутри
     <li>, поэтому Enter и Space, фокус и роль кнопки достаются от платформы,
     а не от обработчиков. */
  .dlm-acc {
    margin: 0 0 22px;
    padding: 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 10px;
  }

  .dlm-acc__item {
    border: 1px solid var(--dlm-line);
    border-radius: 14px;
    background: var(--dlm-paper);
    overflow: hidden;
  }

  .dlm-acc__item.is-open { border-color: rgba(253, 41, 78, .28); }

  .dlm-acc__head {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    margin: 0;
    padding: 18px 16px;
    border: 0;
    background: transparent;
    color: var(--dlm-text);
    font-family: inherit;
    font-size: 15px;
    font-weight: 600;
    letter-spacing: -.005em;
    line-height: 1.35;
    text-align: left;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
  }

  html[dir="rtl"] .dlm-acc__head { text-align: right; }

  .dlm-acc__head:focus-visible {
    outline: 2px solid var(--dlm-coral);
    outline-offset: -2px;
    border-radius: 13px;
  }

  .dlm-acc__q { flex: 1 1 auto; min-width: 0; }

  /* Плюс из двух псевдоэлементов: в открытом состоянии вертикальный штрих
     складывается, и знак становится минусом — без второй иконки и без
     подмены разметки. */
  .dlm-acc__sign {
    position: relative;
    flex: 0 0 auto;
    width: 26px;
    height: 26px;
    border-radius: 8px;
    background: rgba(12, 11, 43, .045);
    transition: background 160ms ease;
  }

  .dlm-acc__sign::before,
  .dlm-acc__sign::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    background: var(--dlm-text-2);
    transform: translate(-50%, -50%);
    transition: opacity 160ms ease, background 160ms ease;
  }

  .dlm-acc__sign::before { width: 11px; height: 1.6px; }
  .dlm-acc__sign::after { width: 1.6px; height: 11px; }

  .dlm-acc__item.is-open .dlm-acc__sign { background: rgba(253, 41, 78, .10); }
  .dlm-acc__item.is-open .dlm-acc__sign::before { background: var(--dlm-coral); }
  .dlm-acc__item.is-open .dlm-acc__sign::after { opacity: 0; }

  .dlm-acc__panel { padding: 0 16px 18px; }

  .dlm-acc__panel p {
    margin: 0;
    color: var(--dlm-text-2);
    font-size: 14.5px;
    line-height: 1.58;
  }

  /* --- карточка «Still have questions?» ----------------------------------- */
  .dlm-more {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 16px;
    border-radius: 16px;
    background: var(--dlm-blush);
    color: var(--dlm-text);
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
    transition: transform 140ms ease;
  }

  .dlm-more:hover,
  .dlm-more:focus-visible { color: var(--dlm-text); text-decoration: none; }
  .dlm-more:active { transform: scale(.99); }

  .dlm-more:focus-visible {
    outline: 2px solid var(--dlm-coral);
    outline-offset: 3px;
  }

  .dlm-more__icon {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    border-radius: 13px;
    background: var(--dlm-coral);
    color: #fff;
  }

  .dlm-more__icon svg { display: block; width: 22px; height: 22px; }

  .dlm-more__copy {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
  }

  .dlm-more__title {
    font-size: 14.5px;
    font-weight: 700;
    line-height: 1.25;
  }

  .dlm-more__text {
    color: var(--dlm-text-2);
    font-size: 13px;
    line-height: 1.38;
  }

  .dlm-more__arrow {
    flex: 0 0 auto;
    width: 17px;
    height: 17px;
    color: var(--dlm-coral);
  }

  html[dir="rtl"] .dlm-more__arrow { transform: scaleX(-1); }

  /* =========================================================================
     3. ФИНАЛЬНАЯ CTA «Start your story now.»

     Один цельный баннер во всю ширину. Снимок — фон ВСЕЙ секции
     (.dlm-cta__bg, inset: 0), поверх него один полупрозрачный оверлей.
     Сплошной заливки нигде нет: розово-фиолетовое небо и огни города видны
     уже за эйбрау, заголовком и обеими store-кнопками, а книзу оверлей
     сходит на нет и кадр открывается полностью. Стыка «тёмная плашка сверху
     + отдельное фото снизу» не существует физически — это одна поверхность.
     Ни карточки, ни рамки, ни радиуса, ни тени.
     ========================================================================= */

  .dlm-cta {
    position: relative;
    isolation: isolate;
    /* Нижняя часть кадра, в которой читается вшитая в файл подпись
       «A more open world is waiting for you». Копия заканчивается выше. */
    padding: 44px 0 clamp(320px, 84vw, 380px);
    /* Грунт нужен только до загрузки картинки — дальше её не видно из-под
       фотографии, потому что снимок покрывает секцию целиком. */
    background: var(--dlm-ink);
    color: #fff;
    overflow: hidden;
  }

  .dlm-cta__bg {
    position: absolute;
    inset: 0;
    z-index: 0;
    overflow: hidden;
    pointer-events: none;
  }

  .dlm-cta__bg img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Кадр 941x1672 при ширине 390 и высоте секции ~709 масштабируется по
       ВЫСОТЕ (709/1672 = 0.424 против 390/941 = 0.414), то есть по вертикали
       виден целиком — от фиолетового неба сверху до парапета снизу, — а по
       горизонтали срезается на 9px. Ровно этого и требует референс: небо
       должно быть за заголовком. */
    object-position: 50% 50%;
  }

  /* Оверлей полупрозрачный по всей высоте: он приглушает кадр под копией
     ради читаемости, но нигде его не закрывает.

     Плотность посчитана, а не подобрана, и намеренно минимальная: задача
     оверлея — не спрятать кадр, а ровно настолько приглушить его, чтобы
     белый текст читался. Замерено на собранной странице: под заголовком
     небо даёт яркость 0.062, при плотности 0.38 фон уходит к 0.031, то есть
     заголовок получает ~13:1 — вдвое выше порога AA, а розово-фиолетовое
     небо при этом остаётся видимым. Ниже кнопок оверлей сходит в ноль:
     текста там нет и гасить нечего. */
  .dlm-cta__bg::after {
    content: "";
    position: absolute;
    inset: 0;
    background:
      /* 1. Нижняя кромка кадра растворяется в грунте футера: без этого слоя
         на стыке видна тональная ступенька — низ фотографии тёплый (камень,
         огни), футер холодный navy. */
      linear-gradient(
        to top,
        rgba(11, 18, 25, .92) 0px,
        rgba(11, 18, 25, .55) 34px,
        rgba(11, 18, 25, .18) 74px,
        rgba(11, 18, 25, 0) 120px
      ),
      /* 2. Читаемость копии. Стопы в ПИКСЕЛЯХ ОТ НИЗА (`to top`), а не в
         процентах: высота секции меняется от локали к локали (у корейского и
         тайского заголовок занимает другое число строк) и от ширины экрана,
         а проценты вместе с ней сдвигали бы плотную зону то на подпись, то
         на кнопки. Нижняя кромка кнопок стоит на 320..361px от низа при всех
         трёх ширинах, поэтому плато держится до 330px и только потом
         спадает. */
      linear-gradient(
        to top,
        rgba(9, 13, 20, 0) 0px,
        rgba(9, 13, 20, 0) 190px,
        rgba(9, 13, 20, .10) 240px,
        rgba(9, 13, 20, .21) 285px,
        rgba(9, 13, 20, .31) 330px,
        rgba(9, 13, 20, .38) 100%
      );
  }

  .dlm-cta__copy {
    position: relative;
    z-index: 1;
    padding: 0 var(--dlm-gutter);
  }

  .dlm-cta .dlm-eyebrow { color: var(--dlm-coral); }

  .dlm-cta__title {
    margin: 0 0 14px;
    color: #fff;
    font-size: 37px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: -.022em;
  }

  .dlm-cta__text {
    max-width: 19em;
    margin: 0 0 24px;
    color: rgba(255, 255, 255, .74);
    font-size: 16px;
    line-height: 1.48;
  }

  .dlm-cta__buttons {
    display: flex;
    flex-direction: column;
    gap: 12px;
  }

  /* =========================================================================
     4. ФУТЕР

     Шаблонный футер на телефоне выключается целиком и заменяется блоком
     .dlm-foot внутри того же <footer>. Разметка шаблона не удалена — это
     тот же самый футер, который рисует десктоп.

     Почему нижняя строка (copyright и legal) раньше срезалась. На этом
     шаблоне ниже 992px скроллится <body> (menu.css: html{overflow-y:hidden},
     body{height:100%;overflow-y:auto}), а .page и .wsmenucontainer несут
     overflow:hidden по обеим осям. Замерено: по вертикали они ничего не
     режут — их высота равна высоте контента. Настоящая причина была в
     другом: футер заканчивался ровно на последнем пикселе прокручиваемой
     области (нулевой нижний отступ), поэтому на реальном телефоне последняя
     полоса уходила под адресную строку и home indicator. Лечится отступом с
     env(safe-area-inset-bottom), а не маскировкой.

     Вертикальный клип у .page и .wsmenucontainer всё равно снимается — на
     этой странице и только на телефоне. Горизонтальный остаётся clip: он
     держит выезжающую панель меню и без него появился бы горизонтальный
     скролл.
     ========================================================================= */

  /* Клип снимается по #page, а не по .page: грунт задаёт
     css/purple-theme.css правилом `#page, .hidd { overflow: hidden }`, а это
     селектор по идентификатору — селектор по классу его не перебивает.
     Тем же способом и по той же причине это делает css/creators-desktop.css
     (`body.models-page #page`). Горизонтальный клип остаётся: без него
     выезжающая панель меню даёт горизонтальный скролл. */
  body.download-page #page,
  body.download-page .wsmenucontainer {
    overflow-x: clip;
    overflow-y: visible;
  }

  body.download-page footer.footer {
    position: relative;
    z-index: 1;
    /* pt-100 шаблона убирается: CTA выше уже дала весь воздух, иначе между
       фотографией и логотипом открылась бы пустая тёмная полоса. */
    padding-top: 0;
    padding-bottom: 0;
    /* Тот же грунт, что у CTA, — между секциями нет ни белой полосы, ни
       ступеньки по цвету. */
    background: var(--dlm-ink);
    color: rgba(255, 255, 255, .62);
  }

  /* Всё десктопное содержимое футера: QR-код, три колонки-аккордеона,
     блок «Connect With Us». Ниже те же ссылки собраны компактно. */
  body.download-page footer.footer > .container { display: none !important; }

  .dlm-foot {
    display: block;
    padding: 24px var(--dlm-gutter) 22px;
    /* Нижняя полоса гарантированно не уходит под системные элементы
       телефона: 22px воздуха плюс вырез конкретного устройства. */
    padding-bottom: calc(22px + env(safe-area-inset-bottom));
    background: var(--dlm-ink);
  }

  .dlm-foot__logo {
    display: block;
    width: auto;
    height: 24px;
    margin: 0 0 8px;
  }

  .dlm-foot__tagline {
    margin: 0 0 16px;
    color: rgba(255, 255, 255, .55);
    font-size: 12px;
    line-height: 1.4;
  }

  /* Соцсети. Глифы набора разные по заливке (YouTube и Facebook — сплошные
     плашки, Instagram — контур), и рядом это читалось как случайные
     квадраты. Одинаковый круглый контейнер и один цвет приводят их к
     единому виду, не подменяя иконки на чужие. */
  .dlm-foot__socials {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 0 20px;
    padding: 0;
    list-style: none;
  }

  .dlm-foot__socials li { margin: 0; padding: 0; line-height: 1; }

  .dlm-foot__socials a {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: rgba(255, 255, 255, .08);
    color: rgba(255, 255, 255, .86);
    font-size: 15px;
    line-height: 1;
    text-decoration: none;
    transition: background 140ms ease, color 140ms ease;
  }

  .dlm-foot__socials a:hover,
  .dlm-foot__socials a:focus-visible {
    background: rgba(255, 255, 255, .14);
    color: #fff;
  }

  .dlm-foot__socials a:focus-visible {
    outline: 2px solid var(--dlm-coral);
    outline-offset: 2px;
  }

  /* Три ровные колонки. Интервал по строкам держится line-height, а не
     большими gap — список читается плотным блоком, а не разрежённым. */
  .dlm-foot__nav {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 8px 10px;
    margin: 0 0 18px;
    padding: 0;
    list-style: none;
  }

  .dlm-foot__nav li { margin: 0; padding: 0; min-width: 0; }

  .dlm-foot__nav a {
    display: inline-block;
    color: rgba(255, 255, 255, .80);
    font-size: 13.5px;
    line-height: 1.45;
    text-decoration: none;
    overflow-wrap: anywhere;
    transition: color 140ms ease;
  }

  .dlm-foot__nav a:hover,
  .dlm-foot__nav a:focus-visible { color: #fff; text-decoration: none; }

  .dlm-foot__legal {
    padding-top: 14px;
    border-top: 1px solid rgba(255, 255, 255, .12);
    text-align: center;
  }

  .dlm-foot__copy {
    margin: 0 0 7px;
    /* 10.5px, но контраст поднят до 4.6:1 к грунту #0b1219 — мелкая строка
       остаётся читаемой, а не декоративной. */
    color: rgba(255, 255, 255, .60);
    font-size: 10.5px;
    line-height: 1.45;
  }

  .dlm-foot__copy span { color: inherit; }

  .dlm-foot__links {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    margin: 0;
    padding: 0;
    list-style: none;
  }

  .dlm-foot__links li { margin: 0; padding: 0; line-height: 1; }

  .dlm-foot__links a {
    color: rgba(255, 255, 255, .78);
    font-size: 10.5px;
    line-height: 1.4;
    text-decoration: none;
  }

  .dlm-foot__links a:hover,
  .dlm-foot__links a:focus-visible { color: #fff; }

  .dlm-foot__sep {
    color: rgba(255, 255, 255, .28);
    font-size: 10.5px;
    line-height: 1;
  }

  /* =========================================================================
     Узкие и широкие телефоны
     ========================================================================= */

  /* 360px и уже: тот же ритм, кегли на ступень ниже, чтобы двухстрочные
     заголовки не становились трёхстрочными и ничего не срезалось. */
  @media (max-width: 374.98px) {
    body.download-page { --dlm-gutter: 16px; }
    .dlm-hero__title { font-size: 36px; }
    .dlm-hero__text { font-size: 15.5px; margin-bottom: 20px; }
    .dlm-faq__title { font-size: 32px; }
    .dlm-cta__title { font-size: 33px; }
    .dlm-store { min-height: 62px; gap: 12px; padding: 10px 14px; }
    .dlm-store__name { font-size: 17.5px; }
    .dlm-acc__head { font-size: 14.2px; padding: 16px 14px; gap: 10px; }
    .dlm-more { gap: 12px; padding: 16px 14px; }
    .dlm-more__icon { width: 42px; height: 42px; }
    .dlm-foot__nav a { font-size: 12.5px; }
  }

  /* 430px: тот же макет, чуть больше воздуха — референс на широком телефоне
     не «расползается», а дышит. */
  @media (min-width: 412px) {
    body.download-page { --dlm-gutter: 22px; }
    .dlm-hero__title { font-size: 44px; }
    .dlm-faq { padding-top: 46px; padding-bottom: 50px; }
    .dlm-faq__title { font-size: 38px; }
    .dlm-cta { padding-top: 48px; }
    .dlm-cta__title { font-size: 39px; }
  }

  /* Пользователь просил меньше движения — гасим и переход постер→видео,
     и микро-нажатия. Видео при этом вообще не загружается (см. JS). */
  @media (prefers-reduced-motion: reduce) {
    .dlm-hero__video,
    .dlm-store,
    .dlm-more,
    .dlm-acc__sign,
    .dlm-acc__sign::before,
    .dlm-acc__sign::after { transition: none; }
    .dlm-store:active,
    .dlm-more:active { transform: none; }
  }
}
