/* =====================================================================
   БУРГЕР — РАЗДЕЛЫ НА ТЕЛЕФОНЕ

   На развороте кнопки нет вовсе: там шапка со всеми разделами стоит
   строкой. Поэтому по умолчанию, вне медиазапроса, и кнопка, и панель
   спрятаны — правило ниже включает их только на узком экране.

   Кнопка — красный квадрат в углу, продолжение угловой плашки первого
   экрана; три белых штриха на ней той же толщины, что линейки листа.

   РАЗМЕРЫ В ОБЫЧНЫХ ПИКСЕЛЯХ, НЕ В --u. Мерка --u переводит координаты
   макета 390 в координаты листа 1440 и годится только внутри сцены, у
   которой стоит масштаб. Бургер лежит на уровне страницы и живёт в
   экранных пикселях: с --u он вышел бы втрое больше.
   Панель — та же бумага, набор моношириной прописными, как везде.
   ===================================================================== */
.burger { display: none; }
.burger-menu { display: none; }

@media (max-width: 760px) {

  .burger {
    display: grid;
    position: fixed;
    right: 14px;
    top: 14px;
    z-index: 80;                 /* выше линии (6) и панели (70) */
    width: 46px;
    height: 46px;
    padding: 13px;
    align-content: space-between;
    border: 0;
    background: var(--red);
    cursor: pointer;
  }

  /* Кнопка уезжает вверх, пока читают вниз, и возвращается, стоит
     повести страницу назад. Без этого она висит в правом верхнем углу
     постоянно, и всё, что выключено по правому краю, ныряет под неё:
     заметнее всего на красных вердиктах блока 06 — строка проходит мимо
     верха экрана и на секунду прячется за квадратом. */
  /* Правило пряток при прокрутке снято вместе со скриптом: кнопка видна
     всегда (просьба Оксаны 06.09). */

  .burger span {
    display: block;
    height: 2px;
    background: var(--on-red, #fff);
  }

  /* Открытая кнопка — крест: те же три штриха, два скрещены, средний
     убран. Отдельного крестика нет намеренно: закрывает то же место,
     куда человек уже нажал. */
  html[data-menu] .burger span:nth-child(1) {
    transform: translateY(9px) rotate(45deg);
  }

  html[data-menu] .burger span:nth-child(2) { opacity: 0; }
  html[data-menu] .burger span:nth-child(3) {
    /* −9 ПИКСЕЛЕЙ, А НЕ −9 ЕДИНИЦ ЛИСТА. Здесь стояло calc(-9 * var(--u)),
       то есть 33 пикселя: кнопка живёт на уровне страницы, а не внутри
       масштабированного листа, и единицы листа тут ни при чём. Нижний
       штрих улетал втрое дальше верхнего, и вместо креста выходила
       сломанная закорючка. Полоски стоят через 9 — на столько и сводим. */
    transform: translateY(-9px) rotate(-45deg);
  }

  .burger-menu[hidden] { display: none; }
  .burger-menu {
    display: flex;
    position: fixed;
    inset: 0;
    z-index: 70;
    flex-direction: column;
    justify-content: center;
    gap: 18px;
    padding: 90px 26px 40px;
    background: var(--bg);
  }

  .burger-menu__item {
    font-family: var(--font-mono);
    font-size: 30px;
    line-height: 38px;
    letter-spacing: var(--mono-ls);
    text-transform: uppercase;
    color: var(--ink);
    text-decoration: none;
  }

  /* Телефон под кнопкой: позвонить — второе действие после «связаться»,
     и искать его в подвале, пролистав весь лист, незачем. */
  .burger-menu__tel {
    margin-top: 18px;
    color: var(--ink);
    font-size: 17px;
    letter-spacing: 0.06em;
    text-decoration: none;
    border-bottom: 1px solid var(--red);
    padding-bottom: 2px;
    align-self: flex-start;
  }

  .burger-menu__cta {
    margin-top: 16px;
    padding: 14px 20px;
    align-self: flex-start;
    background: var(--red);
    color: var(--on-red, #fff);
    font-family: var(--font-mono);
    font-size: 18px;
    line-height: 24px;
    letter-spacing: var(--mono-ls);
    text-transform: uppercase;
    text-decoration: none;
  }

  /* Пока меню открыто, лист под ним не едет. */
  html[data-menu], html[data-menu] body { overflow: hidden; }
}

/* =====================================================================
   МОБИЛЬНАЯ РАСКЛАДКА · «УЗКАЯ БУМАГА»

   ┌─ ЧТО ЗДЕСЬ ПРОИЗОШЛО 06.09 ────────────────────────────────────────┐
   │ Прежняя мобильная раскладка распускала холст в поток: position:     │
   │ static, порядок задавал flex-order, размеры — содержимое. Приём      │
   │ честный и дешёвый, но лист переставал быть плакатом: качества        │
   │ выстраивались ровным столбиком, коллаж — стопкой, а кнопка          │
   │ «связаться» оказывалась восьмой в очереди, ПОД портретом.            │
   │                                                                     │
   │ Оксана утвердила другой приём (макеты в preview-mobile/): у          │
   │ телефона СВОЙ макет шириной 390 со своими координатами. То же        │
   │ устройство, что на большом экране, только числа другие.              │
   └─────────────────────────────────────────────────────────────────────┘

   КАК 390 ЖИВЁТ ВНУТРИ САЙТА, НАРИСОВАННОГО В 1440.

   Превью считали свой масштаб сами: --k = ширина окна / 390. На сайте
   --k ставит js/main.js и делит на 1440; трогать его нельзя — на это
   число завязаны линия, заставка и интерактив, и вычислить «ширина/390»
   средствами CSS нельзя (scale() требует ЧИСЛО, а calc даёт длину).

   Поэтому телефонные координаты переводятся в координаты 1440 умножением
   на одно и то же число:

       --u = 1440 / 390 = 3.6923…   ОДИН ТЕЛЕФОННЫЙ ПИКСЕЛЬ

   и каждая координата пишется как calc(20 * var(--u)) — то есть «20 в
   макете 390». Числа в этом файле читаются один в один с preview-mobile,
   а сцена по-прежнему масштабируется общим --k. Проверка: при окне 430
   координата 20 даёт 20 * 3.6923 * (430/1440) = 22.05 = 20 * 430/390.

   ПРО !important. Их здесь много, и это осознанно. Координаты блоков
   заданы правилами вида `.stage--hero .tag { left: 613px }`, а
   js/fit-scene.js вдобавок ставит высоты ИНЛАЙНОМ — перебить их можно
   только важностью. Правило простое: !important живёт ТОЛЬКО в этом
   файле и только внутри медиазапроса.

   ПРО ГОЛЫЕ СЕЛЕКТОРЫ. Их здесь нет. За сутки 05–06.09 на голых классах
   поймали пять поломок подряд (.shot, .nav, .note, .route, .disclaimer):
   класс занят на двух листах, и правило одного блока било по другому.
   Каждое правило ниже начинается со своей сцены. Исключение — только
   структурные .scene, .stage, .thread-layer и .thread-under: это не
   классы блоков, а устройство листа, общее и на большом экране.
   Проверено скриптом: из 247 правил файла ни одно не начинается с
   класса, принадлежащего блоку.

   ПОРОГ 760px — тот же, что был, и тот же, что в preview-mobile.
   ===================================================================== */

@media (max-width: 760px) {

  /* --- 0. ЕДИНИЦА ТЕЛЕФОННОГО МАКЕТА --------------------------------- */
  :root { --u: calc(1440px / 390); }

  /* --- 1. ЛИСТ ОСТАЁТСЯ ХОЛСТОМ, ТОЛЬКО УЗКИМ ------------------------
     Сцена и сцена внутри не трогаются вовсе: ширина по-прежнему 1440,
     масштаб по-прежнему --k. Меняются только ВЫСОТЫ секций — они у
     телефона свои, и заданы там же, где блок. ------------------------- */

  /* Подложка листа: в макете 390 она отступает от кромки на 18
     ТЕЛЕФОННЫХ пикселей, а не на 18 макетных — иначе поле листа
     сжимается вчетверо и кромка пропадает. */
  .stage {
    background: linear-gradient(var(--bg), var(--bg))
                calc(18 * var(--u)) calc(18 * var(--u))
                / calc(100% - 36 * var(--u)) calc(100% - 36 * var(--u))
                no-repeat !important;
  }

  /* --- 2. ЧЕГО НА ТЕЛЕФОНЕ НЕТ ---------------------------------------
     Копии линии внутри блоков нарисованы под координаты 1440 и на узком
     листе перечёркивают кадры наискось. Мобильная линия одна — верхним
     слоем, см. хвост файла. --------------------------------------------- */
  .thread-under { display: none !important; }

  /* --- 3. СКВОЗНАЯ ЛИНИЯ ---------------------------------------------
     Сам маршрут подменяет js/thread.js (см. MOBILE_D): он взят из
     макетов preview-mobile и переведён в координаты 1440 той же меркой
     --u. Здесь остаётся только толщина: в макете 390 штрих 2, значит в
     координатах 1440 он 2 * --u — иначе на телефоне линия становится
     волоском в полпикселя.

     Кончик маркера снят: в мобильных макетах его нет, а на узкой
     полосе он читается кляксой, а не пером. */
  .thread-layer .thread__path { stroke-width: calc(2 * var(--u)) !important; }
  .thread-layer .thread__nib { display: none !important; }
}


/* =====================================================================
   01 · ПЕРВЫЙ ЭКРАН  (превью: scene--strip 844 + scene--next 700)

   В превью первый экран разложен на ДВЕ секции: полоса-афиша 844 и
   «что под ней» 700. На сайте секция одна, и делить её нельзя — правка
   разметки запрещена. Поэтому обе половины лежат в одной сцене высотой
   844 + 700 = 1544, а координаты второй половины сдвинуты на 844.
   В комментариях у таких строк стоит исходное число превью.

   ЧТО ЭТО ЗА ЛИСТ. Портрет во весь рост уходит за правую кромку, имя от
   руки поперёк, качества лесенкой по левому полю — и красная линия
   проходит ровно по их точкам. Кнопка «связаться» стоит на первом
   экране, а не восьмой в очереди, как было в потоке.
   ===================================================================== */
@media (max-width: 760px) {

  /* ВЫСОТА ЭКРАНА ПО СОДЕРЖИМОМУ. Было 1544, а сноска кончается на 1167:
     внизу оставалось 377 пустой бумаги. Укорочено до 1210 — сорок на
     нижнее поле. Всё, что ниже, поднялось на 334, и мобильный маршрут
     линии сдвинут на ту же величину: он задан числами и сам за блоками
     не следует. Пустая часть маршрута внутри экрана сжата
     пропорционально, содержимое не тронуто. */
  .scene--hero {
    aspect-ratio: 390 / 1210 !important;
    min-height: calc(100vw * 1210 / 390) !important;
  }
  .stage--hero { height: calc(1210 * var(--u)) !important; }

  /* Фактуры. Бумага во весь лист (в превью она стоит от 0, без отступа
     18 — иначе на 390 кромка съедает половину поля), зерно с отступом 6:
     18 на 1440 это 1,25 % ширины, та же доля от 390 даёт 5, округлено
     до 6. Оставить 18 значило бы обвести телефон белой рамкой. */
  .stage--hero .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--hero .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
    z-index: 7;
  }

  /* Меню на телефоне снято, как и в превью: пять ссылок в строку на 390
     становятся по 9px. Вернуть, когда решим, чем их заменить. */
  .stage--hero .nav-row { display: none !important; }

  /* Цветной дубль коллажа проявляется под курсором — на телефоне
     курсора нет вовсе. */
  .stage--hero .pic--color { display: none !important; }

  /* --- ПОЛОСА-АФИША (0…844) ----------------------------------------- */

  /* Красный угол: в макете 390 он 40×88, а не 60×113. */
  .stage--hero .bar--corner {
    left: 0 !important; top: 0 !important;
    width: calc(40 * var(--u)) !important;
    height: calc(88 * var(--u)) !important;
    z-index: 4;
  }

  /* Портрет-вырезка. Кадр 589 шире листа 390 намеренно: локоть уходит
     за правую кромку, ноги режет нижняя. 145 + 699 = 844 — фигура
     доходит до кромки полосы и стоит на ней. Пропорция исходника
     685×813 не тронута (589/699 = 0.8426), поэтому object-fit можно
     вернуть к честному fill. */
  .stage--hero .pic--portrait {
    left: calc(-28 * var(--u)) !important;
    top: calc(95 * var(--u)) !important;
    width: calc(589 * var(--u)) !important;
    height: calc(699 * var(--u)) !important;
    object-fit: fill !important;
    z-index: 1;
  }

  /* Логотип выключен ВЛЕВО, а не по центру коробки 201: у левого поля
     две центрованные строки разной длины читаются как случайный сдвиг. */
  .stage--hero .logo {
    left: calc(56 * var(--u)) !important;
    top: calc(22 * var(--u)) !important;
    width: auto !important;
    font-size: calc(20 * var(--u)) !important;
    line-height: calc(26 * var(--u)) !important;
    text-align: left !important;
    z-index: 4;
  }

  /* Рукопись. Повороты взяты с разворота без изменений: наклон руки не
     зависит от ширины листа. Пазухи (padding) с разворота сняты — там
     они отмерены под кегль 222, здесь бы сдвинули строку на треть. */
  .stage--hero .hand--name,
  .stage--hero .hand--surname {
    padding: 0 !important;
    line-height: normal !important;
    z-index: 5;
  }
  /* «Валентин» стоит НАД «Веркиным» справа, как на развороте, а не
     отдельной строкой сверху. Отступ взят с разворота: там имя правее
     фамилии на 314 из 1440, здесь на 85 из 390 — та же доля. */
  .stage--hero .hand--name {
    left: calc(160 * var(--u)) !important;
    top: calc(486 * var(--u)) !important;
    /* Белым: на телефоне имя легло на тёмный пиджак, чернильное там
       пропадало. На развороте оно на светлой бумаге и остаётся чёрным. */
    color: var(--bg) !important;
    font-size: calc(39 * var(--u)) !important;    /* +20%, потом −5% */
    transform: rotate(-7.92deg) !important;
  }
  /* ПОДПИСЬ И СПИСОК ПОМЕНЯНЫ МЕСТАМИ 06.09 по решению Оксаны: на
     телефоне сначала идут качества, под ними имя. Список поднят на 156,
     подпись опущена на 245 — промежуток между ними и расстояние до
     кнопки остались прежними. Точки списка сидят на сквозной линии,
     поэтому её мобильный маршрут пересчитан следом (js/thread.js). */
  .stage--hero .hand--surname {
    left: calc(20 * var(--u)) !important;
    top: calc(493 * var(--u)) !important;
    font-size: calc(96 * var(--u)) !important;    /* +20%, потом −5% */
    transform: rotate(-7.41deg) !important;
  }

  /* Качества лесенкой. Разброс по горизонтали сохранён (на развороте он
     254 из 1440, здесь 64 из 390 — та же доля), промежутки по вертикали
     НЕРОВНЫЕ намеренно: ровный шаг превращает шесть слов в прейскурант.
     Вынос точки 20 вместо 12: точка садится на сквозную линию, а линия
     идёт по левому полю. */
  .stage--hero .tag {
    --dot-gap: calc(20 * var(--u)) !important;
    --dot-rise: calc(7 * var(--u)) !important;
    --dot-size: calc(5 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
    z-index: 3 !important;
  }
  .stage--hero .tag--vedushiy { left: calc(48 * var(--u)) !important; top: calc(220 * var(--u)) !important; }
  .stage--hero .tag--sobytiy  { left: calc(34 * var(--u)) !important; top: calc(254 * var(--u)) !important; }
  .stage--hero .tag--tantsuyu { left: calc(62 * var(--u)) !important; top: calc(296 * var(--u)) !important; }
  .stage--hero .tag--poyu     { left: calc(98 * var(--u)) !important; top: calc(334 * var(--u)) !important; }
  .stage--hero .tag--raduyus  { left: calc(54 * var(--u)) !important; top: calc(370 * var(--u)) !important; }
  .stage--hero .tag--zhivu    { left: calc(84 * var(--u)) !important; top: calc(412 * var(--u)) !important; }

  /* Кнопка. Габарит 168×54, а не пересчитанные 194×64: пропорция дала бы
     52×17, в такое пальцем не попасть. Прижата к левой кромке — она
     продолжает красный угол и полосу, а не висит в середине. */
  /* Кнопка во всю ширину листа — решение Оксаны 06.09. На телефоне это
     единственное действие экрана, и попасть в него пальцем должно быть
     невозможно мимо. */
  .stage--hero .cta {
    left: calc(30 * var(--u)) !important;
    top: calc(660 * var(--u)) !important;      /* опущена на 120 */
    min-width: 0 !important;
    width: calc(330 * var(--u)) !important;   /* поля по 30: 30 + 330 + 30 = 390 */
    height: calc(54 * var(--u)) !important;
    padding: 0 calc(16 * var(--u)) !important;
    justify-content: center !important;        /* надпись по середине кнопки */
    text-align: center !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
    z-index: 5;
  }

  /* Гео. В превью это ТРИ отдельных строки со своими втяжками
     (40 / 56 / 34) — на сайте это один <p> с одним текстом, а править
     разметку нельзя. Поэтому строка отпущена в поток и ломается по
     ширине на те же три строки с тем же шагом 36; лесенка втяжек
     потеряна. Вопрос к Оксане: делить ли <p> на три. */
  .stage--hero .geo {
    left: calc(34 * var(--u)) !important;
    top: calc(845 * var(--u)) !important;   /* опущено на 185 по разметке Оксаны */
    width: calc(118 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(26 * var(--u)) !important;   /* было 36: три строки стояли врозь */
    white-space: normal !important;
    z-index: 3;
  }

  /* НИЖНИХ КРАСНЫХ ПОЛОС НА ТЕЛЕФОНЕ НЕТ — решение Оксаны 06.09.
     В макетах они были, но на узком листе читаются плинтусом и режут
     столбец на куски. На развороте полосы остаются: там они закрывают
     блок по ширине разворота и работают. Правила сняты целиком, а не
     спрятаны: прятать пришлось бы в двух местах — и псевдоэлементы, и
     переопределения полос первого экрана. */
  .stage--hero .bar--bottom,
  .stage--hero .bar--gradient,
  .stage--hero .bar--bottom2 { display: none !important; }

  /* --- ЧТО ПОД АФИШЕЙ (844…1544) -------------------------------------
     Дальше все числа = число превью + 844. -------------------------- */

  /* Коллаж внахлёст, а не стопкой: на развороте между кадрами просвет
     110, на 390 это треть экрана пустой бумаги, и пара распадается. */
  /* Обе пары сдвинуты вправо на 47 и вверх на 79 по разметке Оксаны
     06.09: коллаж стоял слишком низко и жался к левой кромке. */
  .stage--hero .pic--collage-top {
    left: calc(158 * var(--u)) !important;   /* 158 + 232 = 390: впритык к правой кромке */
    top: calc(790 * var(--u)) !important;
    width: calc(232 * var(--u)) !important;
    height: calc(178 * var(--u)) !important;
    z-index: 2;
  }
  .stage--hero .pic--collage-bottom {
    left: calc(106 * var(--u)) !important;   /* сдвинут на те же 15, нахлёст сохранён */
    top: calc(944 * var(--u)) !important;
    width: calc(232 * var(--u)) !important;
    height: calc(160 * var(--u)) !important;
    z-index: 3;
  }

  /* Соцсети столбиком со сдвигом — тем же приёмом, что качества. Кегль
     подписной, но площадка каждой ссылки 44 в высоту: попасть пальцем
     в две буквы высотой 16 нельзя. */
  .stage--hero .soc--tg,
  .stage--hero .soc--vk,
  .stage--hero .soc--inst {
    display: inline-flex !important;
    align-items: center !important;
    height: calc(44 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
    z-index: 3;
  }
  /* ОДНОЙ СТРОКОЙ И ПОД КОЛЛАЖЕМ — решение Оксаны 06.09. Стояли
     лесенкой в три строки ниже сноски; теперь идут в ряд сразу под
     нижним кадром, а сноска встаёт под ними. Площадка под палец (44)
     сохранена: она выше набора и в ряду не мешает. */
  .stage--hero .soc--tg   { left: calc(40 * var(--u)) !important;  top: calc(1110 * var(--u)) !important; }
  .stage--hero .soc--vk   { left: calc(100 * var(--u)) !important; top: calc(1110 * var(--u)) !important; }
  .stage--hero .soc--inst { left: calc(160 * var(--u)) !important; top: calc(1110 * var(--u)) !important; }

  /* Сноска про Meta — единственный кегль, отступающий от 16, и вот
     почему: в макете она 10, на 390 это уже не мелкий шрифт, а серая
     полоска, а требование закона — чтобы её МОЖНО было прочесть.
     Строка отпущена в поток: в одну она на 390 не влезает.

     ПРОЗРАЧНОСТЬ 0.62 СНЯТА 06.09. Она стояла только здесь, только на
     телефоне: на развороте сноска чёрная в полную силу. Вместе с кеглем
     11 она давала серый #616161 по светлой бумаге — около 4,3:1, то
     есть ровно то, от чего абзац выше и защищается. Кегль подняли ради
     читаемости и тут же погасили цветом; убрано одно из двух. */
  .stage--hero .disclaimer {
    left: calc(40 * var(--u)) !important;
    right: auto !important;
    top: calc(1147 * var(--u)) !important;   /* поднята на 50 по просьбе Оксаны */
    width: calc(320 * var(--u)) !important;
    font-size: calc(11 * var(--u)) !important;
    line-height: calc(15 * var(--u)) !important;
    white-space: normal !important;
    text-align: left !important;
    z-index: 3;
  }
}


/* =====================================================================
   02 · СОБЫТИЯ  (превью: scene--ev 800)

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

   ЧЕГО НА ТЕЛЕФОНЕ НЕТ — и это решение макета, а не пропуск: большой
   кадр зала (.pic--d), слот ролика, «я в работе», штамп «2023» и
   подпись под ним, обе каракули-выноски и нижние красные полосы. В
   утверждённых макетах их нет ни на одном экране; на 390 они
   превращали блок в ленту из восьми предметов подряд.
   ВОПРОС К ОКСАНЕ: «веду с 2023 года» — единственная дата на сайте, и
   на телефоне её теперь не видно нигде.

   ЧИНИТЬ НЕ ЗДЕСЬ: ЛИНИЯ ПРОМАХИВАЕТСЯ МИМО ТОЧЕК КАТЕГОРИЙ.
   Ради этого блок 02 и ложится на полосу: четыре красные точки должны
   сидеть НА сквозной линии, как шесть качеств первого экрана. На первом
   экране это выполняется точно — узлы MOBILE_D совпадают с точками
   до пикселя. Здесь линия опаздывает: её размах приходит на ~20
   телефонных пикселей НИЖЕ каждой точки, и на y точек она стоит на
   −10 / −20 / +27 / −18 от них. Причина в js/thread.js: у четырёх узлов
   этого блока (и у крюка под «веду») координата y на 20 больше нужной —
   8113.85 / 8246.77 / 8372.31 / 8512.62 вместо ≈8040 / 8172 / 8298 /
   8438 и 7993.85 вместо ≈7920. Из mobile.css это не лечится: подвинуть
   вниз пришлось бы сами категории, а их шаг до «веду» и «кадров»
   отмерен и держит смысл. Правится одной строкой в MOBILE_D.
   ===================================================================== */
@media (max-width: 760px) {

  .scene--events {
    aspect-ratio: 390 / 635 !important;
    min-height: calc(100vw * 635 / 390) !important;
  }
  /* Блок опущен на 22 (translateY), поэтому он на 22 короче сцены —
       иначе низ бумаги уходил под следующую секцию и по нижнему краю
       пропадала серая кромка, которая есть у всех остальных блоков. */
  .stage--events { height: calc(613 * var(--u)) !important; }

  /* БУМАГА И ЗЕРНО — ВО ВЕСЬ БЛОК, А НЕ ПО ЧИСЛУ. Высоты блоков на
     телефоне мы правим часто, а фактура стояла жёсткими числами и
     оставалась то длиннее блока, то короче: у события бумага торчала на
     187 ниже кромки. Проценты держат её ровно по блоку при любой правке. */
  .stage--events .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--events .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
  }

  .stage--events .pic--d,
  .stage--events .reel--hero,
  .stage--events .note--work,
  .stage--events .stamp--since,
  .stage--events .cap--since,
  .stage--events .lead--strip,
  .stage--events .lead--list,
  .stage--events .cat__line,
  .stage--events .bar--events,
  .stage--events .bar--events2,
  .stage--events .stamp__nib { display: none !important; }

  /* ВЕРХНЕЕ ПОЛЕ У КОЛОНТИТУЛОВ 52, А НЕ 30 — решение Оксаны 06.09,
     общее для всех блоков ниже первого экрана: на телефоне блок
     начинался почти от самой кромки, и колонтитул читался прижатым.
     Число одно на все семь: колонтитул — общий элемент листа, и разное
     поле у разных блоков читалось бы сбоем, а не приёмом. */
  /* Левое поле блоков приведено к одному числу: колонтитул 26,
     заголовок 40. Было вразнобой — 26 и 34 у колонтитулов, 34, 40, 48
     и 49 у заголовков, и лист на прокрутке ехал влево-вправо.
     Правка Оксаны 06.09. */
  .stage--events .folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* Число. 268 → 132: на 390 оно по-прежнему единственный предмет
     верхней половины, но помещается в ширину листа.

     ПРО КРОМКУ МАРКЕРА (.stamp__nib). Комментарий тут раньше обещал, что
     она «остаётся на месте», — а строкой выше она снята вместе с прочим.
     Обещание было неверным, но снятие — верное: на узком листе thread.js
     выставляет заливку числа целиком сразу (`if (narrow && big)`) и
     атрибут data-nib не ставит вовсе, а без него кромка и так стоит в
     opacity 0. Правило ничего не гасит, оно только называет вслух то,
     что и без него не рисуется, — и держится заодно с общим решением
     мобильных макетов: кончика маркера на телефоне нет нигде.
     Обводка-призрак остаётся: она под сплошной заливкой и не видна. */
  .stage--events { --num-big: calc(132 * var(--u)) !important; }
  .stage--events .stamp--big {
    left: calc(34 * var(--u)) !important;
    top: calc(66 * var(--u)) !important;
  }
  .stage--events .cap--big {
    left: calc(49 * var(--u)) !important;
    top: calc(178 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }

  /* Рукопись: 52 → 34 и наклон мягче (−13° → −9°). На узкой колонке
     сильный наклон уводит хвост строки за кромку. */
  .stage--events .note--year {
    left: calc(82 * var(--u)) !important;
    top: calc(192 * var(--u)) !important;
    font-size: calc(39 * var(--u)) !important;    /* +20%, потом −5% */
    line-height: 1.5 !important;
    padding: 0 calc(20 * var(--u)) calc(6 * var(--u)) 0 !important;
    transform: rotate(-9deg) !important;
  }

  /* Полоса кадров: три штуки лесенкой, третий уходит за правую кромку —
     тот же приём, что на развороте, только теснее. */
  /* Полоса кадров поднята на 60; первый повёрнут влево на 15 градусов,
     средний сдвинут влево на 15, правый на 30 — разметка Оксаны 06.09. */
  .stage--events .pic--a {
    left: calc(193 * var(--u)) !important; top: calc(240 * var(--u)) !important;
    width: calc(154 * var(--u)) !important; height: calc(206 * var(--u)) !important;
    transform: rotate(-15deg) !important;
    transform-origin: 50% 50% !important;
  }
  .stage--events .pic--b {
    left: calc(87 * var(--u)) !important; top: calc(282 * var(--u)) !important;
    width: calc(116 * var(--u)) !important; height: calc(132 * var(--u)) !important;
    transform: rotate(10deg) !important;
    transform-origin: 50% 50% !important;
  }
  .stage--events .pic--c {
    left: calc(20 * var(--u)) !important;  top: calc(260 * var(--u)) !important;
    width: calc(76 * var(--u)) !important;  height: calc(122 * var(--u)) !important;
  }

  .stage--events .cap--strip {
    left: calc(40 * var(--u)) !important;
    top: calc(542 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }
  .stage--events .cap--list {
    left: calc(26 * var(--u)) !important;
    top: calc(428 * var(--u)) !important;
    font-size: calc(20 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
    }

  /* Категории. На развороте это два столбца по два с каракулей под
     каждым словом; здесь — та же лесенка, что у качеств первого экрана,
     и точка вместо подчёркивания: линия идёт мимо и цепляет их. */
  .stage--events .cat { padding-bottom: 0 !important; z-index: 3 !important; }
  .stage--events .cat .tag {
    --dot-gap: calc(20 * var(--u)) !important;
    --dot-rise: calc(7 * var(--u)) !important;
    --dot-size: calc(5 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }
  .stage--events .cat--1 { left: calc(46 * var(--u)) !important; top: calc(474 * var(--u)) !important; }
  .stage--events .cat--2 { left: calc(78 * var(--u)) !important; top: calc(500 * var(--u)) !important; }
  .stage--events .cat--3 { left: calc(38 * var(--u)) !important; top: calc(526 * var(--u)) !important; }
  .stage--events .cat--4 { left: calc(70 * var(--u)) !important; top: calc(552 * var(--u)) !important; }
}


/* =====================================================================
   03 · ПОВОД  (превью: scene--pv 960)

   Разворот читался слева направо: ряд поводов над кадром, все пометки
   собраны в правый угол снимка. На 390 ряд из четырёх слов даёт по 9px
   на слово, а колонка поверх фотографии не читается вовсе. Поэтому
   макет разложен по вертикали:

     поводы столбиком (выбранный крупнее и обведён) → «жми» со стрелкой
     → кадр полосой → реплика рукой → цена → что входит → выход.

   Кадр 396 шире листа 390 намеренно: он уходит за правую кромку, как и
   портрет на первом экране.

   СЕГОДНЯШНЕЕ СОДЕРЖИМОЕ, А НЕ ПРЕВЬЮ. В превью цена — пустая линейка
   и есть строка «идёт ___ часов»; на сайте цена уже вписана, а строки
   часов нет. Берётся то, что на сайте.
   ===================================================================== */
@media (max-width: 760px) {

  .scene--povod {
    aspect-ratio: 390 / 747 !important;
    min-height: calc(100vw * 747 / 390) !important;
  }
  .stage--povod {
    height: calc(725 * var(--u)) !important;
    --fmt-fs: calc(16 * var(--u)) !important;
    --fmt-fs-on: calc(26 * var(--u)) !important;
    --price-fs: calc(44 * var(--u)) !important;
    /* Свет под колонкой на телефоне не нужен: колонка стоит не на
       фотографии, а на бумаге под ней. */
    --veil: 0 !important;
  }

  .stage--povod .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--povod .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
  }

  /* Холст-стирание и каракуля-подчёркивание на наведении: пальцем
     ни то, ни другое не вызвать. */
  .stage--povod .scratch,
  .stage--povod .mk__line { display: none !important; }

  .stage--povod .folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* Ряд поводов становится столбиком. Сама коробка ряда обнуляется по
     высоте и служит только точкой отсчёта — слова стоят координатами,
     лесенкой, как качества на первом экране. */
  .stage--povod .fmts {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 0 !important;
    display: block !important;
  }
  .stage--povod .mk--fmt {
    position: absolute !important;
    display: flex !important;
    align-items: flex-end !important;
    height: calc(46 * var(--u)) !important;   /* площадка под палец */
    padding: 0 calc(14 * var(--u)) 0 0 !important;
    line-height: 1.32 !important;
    z-index: 4;
  }
  /* В СТРОКЕ ОДНО СЛОВО — ТЕКУЩЕЕ. Столбец из четырёх поводов был
     переключателем: ткни в слово. Листание сделало его лишним и даже
     обманным — палец ведут, а столбец обещает тычок. Поэтому все четыре
     слова стоят в ОДНОЙ точке, а видно то, что выбрано: пролистнул — на
     месте «свадьбы» встал «корпоратив». Просьба Оксаны 06.09. */
  .stage--povod .mk--f1,
  .stage--povod .mk--f2,
  .stage--povod .mk--f3,
  .stage--povod .mk--f4 {
    left: calc(40 * var(--u)) !important;
    /* 88 → 66: зазор от колонтитула до заголовка приведён к общим 14.
       Стрелка, кадр, колонка и высота блока опущены на те же 22 —
       иначе под словом открывается пустое поле. */
    top: calc(66 * var(--u)) !important;
  }
  .stage--povod .mk--fmt[aria-checked="false"] { display: none !important; }

  /* Стрелка листания — справа от слова, на его базовой линии. */
  .stage--povod .fmts__swipe {
    display: block !important;
    /* .lead по умолчанию не ловит палец — стрелки на листе рисованные, а
       не кнопки. Этой ловить надо: по ней тоже листают. */
    pointer-events: auto !important;
    cursor: pointer !important;
    position: absolute !important;
    left: calc(224 * var(--u)) !important;
    top: calc(82 * var(--u)) !important;
    width: calc(104 * var(--u)) !important;
    height: calc(30 * var(--u)) !important;
    z-index: 4;
  }

  /* Обводка выбранного: пазуха вчетверо меньше макетной (10/8 вместо
     24/16) — на 390 овал иначе накрывает соседние строки. Толщина
     штриха задана в макетных 1440, а non-scaling-stroke не даёт
     растяжению овала расплющить её. */
  /* ОБВОДКА СНЯТА. Она отмечала выбранный повод среди четырёх; в строке
     теперь одно слово — текущее, и отмечать нечего. Просьба Оксаны 06.09. */
  .stage--povod .ring { display: none !important; }

  .stage--povod .ring {
    left: calc(-10 * var(--u)) !important;
    top: calc(-8 * var(--u)) !important;
    width: calc(100% + 20 * var(--u)) !important;
    height: calc(100% + 16 * var(--u)) !important;
  }
  /* ОБВОДКА РИСУЕТСЯ ЦЕЛИКОМ, БЕЗ ПРОВОДКИ ШТРИХА.
     non-scaling-stroke нужен ради толщины, но он же ломает проводку:
     js/povod.js берёт длину пути через getTotalLength() — 540 в
     единицах viewBox, — а с non-scaling-stroke браузер отмеряет штрихи
     и промежутки уже в координатах листа, где тот же путь длиной 1107.
     Штрих 540 при пути 1107 = нарисована ровно половина овала: верх и
     правый бок есть, низа и левого бока нет. Так и было видно на всех
     четырёх поводах.
     Из mobile.css правится одним способом: снять пунктир вовсе. Проводку
     обводки на телефоне теряем, целый овал получаем. Тот же приём, что в
     блоке 05 у .stage--otz .mark path. */
  .stage--povod .ring path {
    stroke-width: calc(2.6 * var(--u)) !important;
    vector-effect: non-scaling-stroke;
    stroke-dasharray: none !important;
    stroke-dashoffset: 0 !important;
  }

  /* Подсказка «жми» и стрелка к ряду сняты. Форматы теперь листаются
     свайпом, и приглашение нажать вело не туда: палец ведут, а не
     тычут. Правка Оксаны 06.09, только телефон. */
  .stage--povod .fmts__hint,
  .stage--povod .fmts__arrow { display: none !important; }

  .stage--povod .fmts__hint {
    left: calc(292 * var(--u)) !important;
    top: calc(54 * var(--u)) !important;
    font-size: calc(40 * var(--u)) !important;
    line-height: 1.3 !important;
    transform: rotate(-8deg) !important;
    transform-origin: 0 100% !important;
    z-index: 4;
  }
  .stage--povod .fmts__arrow {
    left: calc(186 * var(--u)) !important;
    top: calc(84 * var(--u)) !important;
    width: calc(100 * var(--u)) !important;
    height: calc(56 * var(--u)) !important;
    z-index: 4;
  }

  /* Кадр. На сайте пометки лежат ВНУТРИ .frame, а .frame обрезает по
     себе — на телефоне колонка стоит ниже снимка и была бы срезана.
     Поэтому коробка кадра обнуляется по высоте и перестаёт резать, а
     сам снимок получает свой габарит. Вылет за правую кромку режет
     секция, у неё overflow: clip. */
  .stage--povod .frame {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 0 !important;
    overflow: visible !important;
  }
  /* КАДР В ПОЛЯХ, А НЕ ЗА ОБРЕЗОМ. Был 396 при левом поле 40 и уходил
     за правую кромку на 46. Оксана 06.09: поля справа и слева должны
     быть равны. 390 − 40 − 40 = 310. Высоту НЕ трогаем — снимок стоит
     object-fit: cover, лишнее он срезает сам, и все отступы вокруг
     (реплика, цена, колонка) остаются на своих местах. */
  .stage--povod .shot {
    left: calc(40 * var(--u)) !important;
    /* 292 → 154: три спрятанных слова ряда освободили 138, и между
       обведённым поводом и кадром висела дыра. Колонка пометок поднята
       на столько же, блок на столько же укорочен — поле под кнопкой
       осталось прежним. */
    top: calc(132 * var(--u)) !important;
    width: calc(310 * var(--u)) !important;
    height: calc(220 * var(--u)) !important;
  }

  /* Колонка пометок: под кадром, от того же левого поля. */
  .stage--povod .pack {
    left: calc(40 * var(--u)) !important;
    top: calc(426 * var(--u)) !important;
    width: calc(310 * var(--u)) !important;
  }

  /* КОРПОРАТИВ: НАБОР ОБРАТНО ЧЕРНЫЙ.
     На развороте колонка корпоратива лежит НА тёмном кадре, и потому
     набрана белым (решение Оксаны 06.09, section-povod.css в хвосте).
     На телефоне колонка стоит не на кадре, а на бумаге под ним — и белое
     по светлой бумаге пропадало целиком: цена читалась призраком, «что
     входит» и весь состав не читались вовсе. Видны оставались только
     красные птички и строка выхода, у которой свой цвет.
     Причина белого — тёмный кадр, а под колонкой его здесь нет. */
  .stage--povod[data-fmt="korporativ"] .pack__price,
  .stage--povod[data-fmt="korporativ"] .pack__cap,
  .stage--povod[data-fmt="korporativ"] .pack__list,
  .stage--povod[data-fmt="korporativ"] .pack__list .mono {
    color: var(--ink) !important;
  }

  /* Реплика рукой стоит НАД колонкой, в просвете между кадром и ценой.
     На сайте она первый ребёнок колонки и в потоке встала бы над
     ценой вплотную — здесь её вынимают из потока координатой. */
  .stage--povod .pack__hand {
    position: absolute !important;
    left: calc(12 * var(--u)) !important;
    top: calc(-86 * var(--u)) !important;
    margin: 0 !important;
    font-size: calc(38 * var(--u)) !important;
    line-height: 1.28 !important;
    transform: rotate(-3deg) !important;
  }

  /* Цена и черта под ней. Каракуля на сайте отдельным <svg> не
     нарисована, а разметку править нельзя — поэтому она положена
     фоном той же кривой, что в макете. Толщина выходит верной сама:
     по вертикали картинка растягивается ровно в --u раз. */
  .stage--povod .pack__price {
    /* Колонка от цены и ниже поднята на 20 (просьба Оксаны 06.09, все
       четыре повода). Тянем отрицательным верхним полем самой цены:
       «что входит», список и кнопка идут за ней потоком и поднимаются
       на столько же, а реплика рукой стоит абсолютом над колонкой и
       остаётся на кадре, где ей и место. */
    margin: calc(-20 * var(--u)) 0 calc(28 * var(--u)) !important;
    padding-bottom: calc(10 * var(--u)) !important;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340 14' preserveAspectRatio='none'%3E%3Cpath d='M4 9 C 62 4, 118 12, 176 7 C 232 2, 288 11, 336 5' fill='none' stroke='%23e03342' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E")
                left bottom / 107% calc(14 * var(--u)) no-repeat !important;
  }

  .stage--povod .pack__cap {
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
    margin: 0 0 calc(10 * var(--u)) !important;
  }
  .stage--povod .pack__list li {
    padding-left: calc(24 * var(--u)) !important;
    margin: 0 0 calc(8 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }
  .stage--povod .tick {
    left: 0 !important;
    top: calc(4 * var(--u)) !important;
    width: calc(15 * var(--u)) !important;
    height: calc(13 * var(--u)) !important;
  }

  /* ВЫХОД — КРАСНАЯ ПЛАШКА, КАК НА РАЗВОРОТЕ. Мобильный макет делал из
     неё строку с каракулей под ней; Оксана 06.09 вернула плашку: это
     единственное действие блока, и оно должно читаться кнопкой, а не
     ссылкой. Габарит взят по кнопке первого экрана — в такую попадают
     пальцем. */
  .stage--povod .pack__exit {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    min-width: 0 !important;
    height: calc(54 * var(--u)) !important;
    margin: calc(22 * var(--u)) 0 0 !important;
    padding: 0 calc(24 * var(--u)) !important;
    background: var(--red) !important;
    color: var(--on-red) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    text-decoration: none !important;
  }

  /* ── КАРУСЕЛЬ ФОРМАТОВ ───────────────────────────────────────────────

     На развороте поводы переключают словом: четыре в строку, обведён
     один. На телефоне слово тоже осталось (см. .mk--fmt выше), но
     единственным входом оно быть перестало: на узком экране формат —
     это лист, а листы листают.

     Кадр и колонка пометок ЕДУТ КАК ОДНА КАРТОЧКА. Оба лежат в .frame,
     оба стоят абсолютом от одной точки, поэтому карусель не собирает их
     ни в какую обёртку — она просто сдвигает каждого на свой слот:

         сдвиг = (свой номер − текущий) × шаг  +  палец

     Отсюда два следствия, ради которых так и сделано:
       · РАЗМЕТКА НЕ ТРОНУТА — четыре .shot и четыре .pack остаются в
         единственном экземпляре, ничего не продублировано;
       · ВЫСОТА БЛОКА НЕ МЕНЯЕТСЯ — сдвиг это transform, а он не
         участвует в потоке. По высотам секций разложен маршрут красной
         линии (js/thread.js), и трогать их нельзя.

     ШАГ 390 — РОВНО ШИРИНА ЭКРАНА. Пока кадр уходил за правую кромку
     (40 + 396 = 436), шаг был 436: при 390 от соседней карточки
     оставалась бы полоса в 46 пикселей у левого края. Кадр убрали в
     поля (40 + 310 = 350), вынос пропал — и шаг стал симметричным:
     соседняя карточка входит ровно тогда, когда уходит текущая, с обеих
     сторон одинаково.

     ВКЛЮЧАЕТ ЕЁ СКРИПТ (js/povod-swipe.js) меткой data-swipe. Без
     скрипта метки нет, ни одно правило ниже не срабатывает и блок
     остаётся тем, чем был: виден один кадр, одна колонка. Это то же
     правило, по которому живёт весь лист, — содержимое видно само по
     себе. -------------------------------------------------------------- */

  .stage--povod[data-swipe] {
    --fmt-step: calc(390 * var(--u));

    /* Вертикаль отдаём странице, горизонталь берём себе, щипок
       оставляем человеку. Браузер сам решает, чей это жест, и как
       только он решает в пользу прокрутки — присылает pointercancel.
       Поэтому скрипту не нужно «догадываться», косой это жест или нет:
       за него это уже сделали. */
    touch-action: pan-y pinch-zoom;
  }

  /* Видны все четыре: три из них стоят за кромкой листа, а секция режет
     по себе (overflow: clip у .scene). Прежняя пара opacity/visibility
     переключала ровно один набор — с ней соседняя карточка не могла бы
     выехать из-за края. */
  .stage--povod[data-swipe] .frame [data-when] {
    opacity: 1 !important;
    visibility: visible !important;
  }

  .stage--povod[data-swipe] .shot,
  .stage--povod[data-swipe] .pack {
    /* --dx скрипт пишет в ТЕЛЕФОННЫХ пикселях макета, без единиц: сцена
       нарисована в координатах 1440 и целиком масштабируется, поэтому
       экранные пиксели пальца сюда не годятся — их переводит скрипт. */
    --slot: calc((var(--i, 0) - var(--cur, 0)) * var(--fmt-step)
                 + var(--dx, 0) * var(--u));
    transform: translate3d(var(--slot), 0, 0);
    /* will-change: transform ЗДЕСЬ НЕ СТАВИТЬ. Восемь карточек — восемь
       отдельных слоёв композитора на весь срок жизни страницы, и лист
       начинает рисоваться кусками: на съёмке пропадал то ряд поводов,
       то стрелка к нему, в двух прогонах из трёх. translate3d и так
       отдаёт движение на карту, а слой под него берётся на время
       перехода и возвращается обратно. */
  }

  .stage--povod[data-swipe] [data-when="svadba"]     { --i: 0; }
  .stage--povod[data-swipe] [data-when="korporativ"] { --i: 1; }
  .stage--povod[data-swipe] [data-when="vecherinka"] { --i: 2; }
  .stage--povod[data-swipe] [data-when="festival"]   { --i: 3; }

  /* Вечеринка и фестиваль отражены по горизонтали (section-povod.css):
     их отражение здесь приходится приписывать к сдвигу вручную —
     transform один на элемент, и общее правило выше его затирает. */
  .stage--povod[data-swipe] .shot--vecherinka,
  .stage--povod[data-swipe] .shot--festival {
    transform: translate3d(var(--slot), 0, 0) scaleX(-1);
  }

  /* Доводка. Метка стоит всегда, КРОМЕ мгновений, пока карточку ведёт
     палец: под пальцем движение обязано быть один в один, без догона.
     Скрипт снимает метку на время жеста и возвращает на отпускании — и
     тем же переходом карточка доезжает после тапа по слову. */
  .stage--povod[data-swipe][data-slide] .shot,
  .stage--povod[data-swipe][data-slide] .pack {
    transition: transform 0.34s cubic-bezier(0.22, 0.61, 0.36, 1);
  }

  @media (prefers-reduced-motion: reduce) {
    .stage--povod[data-swipe][data-slide] .shot,
    .stage--povod[data-swipe][data-slide] .pack { transition: none; }
  }

  /* ЧЕРНИЛЬНЫЙ НАБОР У ВСЕХ ЧЕТЫРЁХ, А НЕ ТОЛЬКО У ТЕКУЩЕГО.
     Правило выше возвращало корпоративу чёрный текст по метке
     data-fmt — то есть только когда он уже стал текущим. В карусели он
     виден раньше: выезжает из-за кромки, пока текущим ещё числится
     сосед, — и въезжал бы белым по светлой бумаге, то есть пустым
     местом. Причина белого (тёмный кадр под колонкой) на телефоне не
     действует ни у одного из четырёх, поэтому условие снимается вовсе. */
  .stage--povod[data-swipe] .pack__price,
  .stage--povod[data-swipe] .pack__cap,
  .stage--povod[data-swipe] .pack__list,
  .stage--povod[data-swipe] .pack__list .mono {
    color: var(--ink) !important;
  }
}


/* =====================================================================
   04 · АРХИВ  (превью: scene--arhm 970)

   На развороте восемь кадров выкладываются внахлёст по всему листу. На
   телефоне их ТОЖЕ ВОСЕМЬ (решение Оксаны 06.09) — стопка идёт сверху
   вниз, снимки лежат внахлёст, у каждого свой поворот и свой размер.

   Было пять: b, c и g прятались правилом display: none, перенесённым
   из мобильного макета. Пятерых хватало сказать «разные вечера», но
   архив на то и архив, что его много: на развороте восемь, и разница
   между версиями была видна как потеря.

   КУДА ВЛЕЗЛИ ТРОЕ. Прежние пять стояли от 104 до 772, а между
   последним кадром и рукописью «и это не всё» (866) лежала пустая
   бумага. Стопка пересобрана целиком: она стала теснее по вертикали и
   шире по горизонтали — кадры расходятся от левого поля к правому
   обрезу и обратно, как на развороте, — и кончается на 801. До
   рукописи остаётся 65 на воздух.

   ВЫСОТА БЛОКА ПРЕЖНЯЯ: сцена 992, лист 970. По высотам секций
   разложен маршрут красной линии (js/thread.js), и ни одна цифра
   стопки её не касается — кадры лежат внутри той же коробки.

   Подписи под кадрами (тип, город, гости) на сайте спрятаны с 05.09 —
   и у этих трёх тоже: восемь одинаковых строк «событие · город ·
   гостей» с незаполненными местами читались бланком. Возвращать их
   надо сразу все восемь и вместе с настоящими числами.

   Выкладка по прокрутке снята: на телефоне кадры лежат сразу. Она
   держится на --p, который считает arhiv.js по положению окна, а на
   узком листе кадры влетают с полутора экранов и приходят по одному
   уже после того, как человек их пролистал.
   ===================================================================== */
@media (max-width: 760px) {

  .scene--arh {
    aspect-ratio: 390 / 932 !important;
    min-height: calc(100vw * 932 / 390) !important;
  }
  /* Блок опущен на 22 (translateY), поэтому он на 22 короче сцены —
       иначе низ бумаги уходил под следующую секцию и по нижнему краю
       пропадала серая кромка, которая есть у всех остальных блоков. */
  .stage--arh { height: calc(910 * var(--u)) !important; }

  .stage--arh .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--arh .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
    /* ВЫШЕ ВСЕЙ СТОПКИ. Было 7 — этого хватало, пока кадров было пять
       (--z до 5). Их снова восемь, и на 7 два верхних вылезли бы
       из-под зерна: два чистых пятна на зернистом листе. */
    z-index: 9;
  }

  .stage--arh .folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--arh .cap--all {
    left: calc(40 * var(--u)) !important;
    top: calc(64 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }

  /* Кадры лежат сразу: оба слоя выкладки обнуляются, а разворот кадра
     переезжает на саму фигуру — так его видно в одном месте, а не в
     формуле из трёх переменных. */
  .stage--arh .shot__deal,
  .stage--arh .shot__lift { transform: none !important; }
  .stage--arh .shot__lift {
    box-shadow: 0 calc(2 * var(--u)) calc(8 * var(--u)) rgba(0, 0, 0, 0.17) !important;
  }
  .stage--arh .shot { transform-origin: 50% 50%; }

  /* ── СТОПКА ИЗ ВОСЬМИ ────────────────────────────────────────────────

     Порядок тот же, что на развороте: КТО ЛЁГ ПОЗЖЕ — ТОТ СВЕРХУ, и
     --z идёт тем же счётом, что очередь. Нахлёсты настоящие, по 10–40
     пикселей, а не нарисованные: каждый следующий кадр заходит краем
     на предыдущий, и стопка читается стопкой, а не колонкой.

     Стороны чередуются — левое поле, правый край, левое поле, — чтобы
     восемь снимков не встали лесенкой в одну сторону. Один (f) уходит
     под правый обрез листа: тот же приём, что в блоках 02 и 04 на
     развороте, — иначе разворот выглядит выставкой в рамке.

     Пропорции коробок взяты по исходникам: 3:2 у двух горизонтальных
     (a, d — 1800×1200) и 3:4 у шести вертикальных (1200×1800). При
     object-fit: cover это значит, что кадр почти не режется, а
     object-position ниже выбирает, какую часть высоты оставить.
     ------------------------------------------------------------------ */

  /* 1 · крупная панорама, левый верх — с неё начинается стопка */
  .stage--arh .shot--a {
    left: calc(16 * var(--u)) !important;  top: calc(104 * var(--u)) !important;
    width: calc(240 * var(--u)) !important; height: calc(160 * var(--u)) !important;
    transform: rotate(-1.4deg) !important; --z: 1 !important;
  }
  /* 2 · вертикаль поверх правого края панорамы, уходит под обрез */
  .stage--arh .shot--f {
    left: calc(246 * var(--u)) !important; top: calc(138 * var(--u)) !important;
    width: calc(156 * var(--u)) !important; height: calc(208 * var(--u)) !important;
    transform: rotate(2.2deg) !important;  --z: 2 !important;
  }
  /* 3 · маленький кадр у левого поля, заходит под низ панорамы */
  .stage--arh .shot--c {
    /* 236 → 246 и наклон -2.8 → -7.8: правка Оксаны 06.09, ниже на 10 и
       круче на пять градусов. */
    left: calc(22 * var(--u)) !important;  top: calc(246 * var(--u)) !important;
    width: calc(112 * var(--u)) !important; height: calc(149 * var(--u)) !important;
    transform: rotate(-7.8deg) !important; --z: 3 !important;
  }
  /* 4 · середина листа: связывает маленький слева и вертикаль справа */
  .stage--arh .shot--e {
    left: calc(124 * var(--u)) !important; top: calc(272 * var(--u)) !important;
    width: calc(132 * var(--u)) !important; height: calc(176 * var(--u)) !important;
    transform: rotate(1.6deg) !important;  --z: 4 !important;
  }
  /* 5 · правый столбец продолжается вниз */
  .stage--arh .shot--b {
    left: calc(220 * var(--u)) !important; top: calc(336 * var(--u)) !important;
    width: calc(158 * var(--u)) !important; height: calc(211 * var(--u)) !important;
    transform: rotate(-1.8deg) !important; --z: 5 !important;
  }
  /* 6 · второй крупный, левый низ — с него начинается нижняя половина */
  .stage--arh .shot--h {
    left: calc(34 * var(--u)) !important;  top: calc(430 * var(--u)) !important;
    width: calc(196 * var(--u)) !important; height: calc(254 * var(--u)) !important;
    transform: rotate(1.5deg) !important;  --z: 6 !important;
  }
  /* 7 · ложится поверх правого края второго крупного */
  .stage--arh .shot--g {
    left: calc(186 * var(--u)) !important; top: calc(536 * var(--u)) !important;
    width: calc(142 * var(--u)) !important; height: calc(190 * var(--u)) !important;
    transform: rotate(-2.2deg) !important; --z: 7 !important;
  }
  /* 8 · последним ложится горизонтальный, накрывая углы шестого и седьмого */
  .stage--arh .shot--d {
    /* 32 → 42: правка Оксаны 06.09, вправо на 10. */
    left: calc(42 * var(--u)) !important;  top: calc(656 * var(--u)) !important;
    width: calc(218 * var(--u)) !important; height: calc(145 * var(--u)) !important;
    transform: rotate(1.8deg) !important;  --z: 8 !important;
  }

  /* ЦВЕТ ПОД КУРСОРОМ ОСТАЁТСЯ НА РАЗВОРОТЕ.
     Язык блока: кадры серые, цвет наливается только под курсором. На
     телефоне курсора нет — а :hover никуда не делся. Браузеры телефона
     выдают его по касанию и ДЕРЖАТ, пока человек не ткнёт в другое
     место: ткнул в фотографию — она стала цветной и такой осталась.
     Заодно уезжал и слой: hover поднимает кадр на 30, то есть выше
     зерна (7) и рукописи (6), и по касанию с кадра слетало зерно.
     Тот же приём, что в блоке 01 (.pic--color снят) и в блоке 03
     (.mk__line снята): наведения на телефоне нет, значит нет и того,
     что оно показывает.
     Служебный [data-hover] (?hover=…) НЕ трогаем: пальцем он не
     вызывается, а снимок наведения по нему делается. */
  .stage--arh .shot:hover { z-index: var(--z, 1) !important; }
  /* Кадр под касанием остаётся ровно тем же, что и без него. С 06.09
     фотографии на телефоне цветные (см. хвост файла), поэтому здесь
     стоит цветной фильтр, а не чёрно-белый: смысл правила прежний —
     наведение не меняет ничего. */
  .stage--arh .shot:hover .shot__img {
    filter: contrast(1.02) saturate(1.04) !important;
  }

  /* Кадрировка: какие строки исходника остаются в коробке. Проценты
     выбраны по людям, а не по светлым местам — лицо целиком, с
     запасом сверху. У b, c и g своих чисел не было ни разу: на
     телефоне они не показывались, а на развороте коробки другие. */
  .stage--arh .shot--a .shot__img { object-position: 50% 36% !important; }
  .stage--arh .shot--f .shot__img { object-position: 50% 38% !important; }
  .stage--arh .shot--c .shot__img { object-position: 46% 34% !important; }
  .stage--arh .shot--e .shot__img { object-position: 50% 40% !important; }
  .stage--arh .shot--b .shot__img { object-position: 50% 38% !important; }
  .stage--arh .shot--h .shot__img { object-position: 50% 44% !important; }
  .stage--arh .shot--g .shot__img { object-position: 50% 30% !important; }
  .stage--arh .shot--d .shot__img { object-position: 50% 42% !important; }

  /* Рукопись: 58 → 34, наклон −4° → −8°. Прозрачность её на развороте
     считает arhiv.js по прокрутке (--hp) — на телефоне она видна сразу,
     как и всё остальное. */
  .stage--arh .note--more {
    /* 62 → 202 и 866 → 806: правки Оксаны 06.09 — вправо 150 и вверх 50,
       следом ещё влево 10 и вверх 10. */
    left: calc(202 * var(--u)) !important;
    top: calc(806 * var(--u)) !important;
    font-size: calc(39 * var(--u)) !important;    /* +20%, потом −5% */
    line-height: 1.5 !important;
    padding: 0 calc(20 * var(--u)) calc(6 * var(--u)) 0 !important;
    transform: rotate(-8deg) !important;
    opacity: 1 !important;
  }
}


/* =====================================================================
   05 · ОТЗЫВЫ  (превью: scene--otzm 858)

   Разворот — шесть газетных вырезок внахлёст. На 390 их четыре: крупная
   цитата, средняя, узкая с фотографией пары и маленькая. Пятая (.cut--b)
   и объявление с внешним рейтингом (.cut--e, его в разметке уже нет)
   на телефон не поехали.

   РВАНЫЕ КРОМКИ ПЕРЕСЧИТАНЫ, А НЕ ПОДОБРАНЫ. clip-path у вырезки задан
   списком точек В ПИКСЕЛЯХ и потому привязан к её габариту: оставить
   разворотные полигоны на мобильных габаритах — значит получить рваным
   только верхний край, а правый и нижний срезать по линейке. Полигоны
   взяты из preview-mobile/e.css и умножены на --u.

   ТЕКСТЫ ОТЗЫВОВ — РЫБА, их писали мы. Метки data-verify и плашки на
   вырезках остаются на месте: снимать их можно только вместе с
   подстановкой настоящих отзывов.
   ===================================================================== */
@media (max-width: 760px) {

  .scene--otz {
    aspect-ratio: 390 / 836 !important;
    min-height: calc(100vw * 836 / 390) !important;
  }
  .stage--otz {
    height: calc(814 * var(--u)) !important;
    --q-big: calc(22 * var(--u)) !important;
    --q-big-lh: calc(28 * var(--u)) !important;
    --q-mid: calc(16 * var(--u)) !important;
    --q-mid-lh: calc(22 * var(--u)) !important;
    --alien-fs: calc(12 * var(--u)) !important;
    --alien-lh: calc(16 * var(--u)) !important;
    --uline-w: calc(2.4 * var(--u)) !important;
    --ring-w: calc(2.6 * var(--u)) !important;
  }

  .stage--otz .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--otz .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
    z-index: 9;
  }

  .stage--otz .folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--otz .cap--all {
    left: calc(40 * var(--u)) !important;
    top: calc(64 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }

  /* Пятая вырезка на телефон не поехала: четыре — предел, при котором
     они ещё читаются вырезками, а не полосой набора. */
  .stage--otz .cut--b { display: none !important; }

  /* Пометки маркером нарисованы сразу: их проводку считает otzyvy.js по
     прокрутке, а на узком листе вырезка успевает уйти вверх раньше.

     ПУНКТИР СНЯТ ЦЕЛИКОМ, А НЕ ТОЛЬКО СДВИНУТ В НОЛЬ. Одного
     stroke-dashoffset: 0 не хватало, и на телефоне обе черты были
     недорисованы: у крупной вырезки штрих доходил до половины строки,
     у средней обрывался посреди слова «перезнаком|ились».
     Причина — та же ловушка, что в блоке 03 у обводки повода.
     У .mark path стоит vector-effect: non-scaling-stroke; с ним браузер
     отмеряет штрих и промежуток НЕ в единицах viewBox, а в координатах
     листа. Длина --len задана в единицах viewBox (460 у крупной, 360 у
     средней), а тот же путь в координатах листа на телефоне длиной 923
     и 526 — то есть dasharray покрывает 50 % и 68 % пути, остальное
     промежуток. На развороте этого не видно: там viewBox и лист
     совпадают один в один, и --len заведомо длиннее пути.
     Проводку черты на телефоне теряем (её и так рисовали сразу),
     целую черту получаем. */
  .stage--otz .mark path {
    stroke-dasharray: none !important;
    stroke-dashoffset: 0 !important;
  }

  /* ОТКЛИКА НА КУРСОР НА ТЕЛЕФОНЕ НЕТ — тот же приём, что в блоке 04.
     Курсора здесь нет вовсе, а :hover никуда не делся: браузер телефона
     выдаёт его по КАСАНИЮ и держит, пока человек не ткнёт в другое
     место. В этом блоке под касание попадали две вещи сразу.
       1. Кадр пары (.reel в вырезке R). По components.css под курсором
          он наливается цветом; ткнул пальцем — снимок стал цветным и
          таким остался, а язык блока: кадры чёрно-белые.
       2. Сама вырезка. Под курсором она подравнивается (наклон * 0.35);
          по касанию она так и стояла подровненной, одна из четырёх, —
          читалось не «поправили пальцем», а «съехала».
     Служебный [data-hover] (?hover=…) НЕ трогаем: пальцем он не
     вызывается, а снимок наведения по нему делается. */
  .stage--otz .cut:hover { transform: rotate(var(--rot, 0deg)) !important; }
  /* Тот же цветной фильтр, что у кадра без касания (см. хвост файла):
     наведение не меняет ничего. */
  .stage--otz .reel:hover .reel__poster,
  .stage--otz .reel:hover .reel__video {
    filter: contrast(1.02) saturate(1.04) !important;
  }

  /* Тень под вырезкой — РОВНО РАЗВОРОТНАЯ. Была своя, гуще и шире:
     чернота 0.42 против 0.2 и размытие 6 макетных единиц (22 в
     координатах листа) против 14. На телефоне это читалось не бумагой на
     бумаге, а серым пятном под каждой вырезкой. Числа сняты один в один
     с section-otzyvy.css и умножены на 1.9. Множитель не на глаз:
     вырезка на телефоне занимает 1272 единицы листа против 665 на
     развороте, то есть вдвое шире относительно координат, и то же
     размытие рядом с ней читалось бы вдвое мельче. Чернота остаётся
     разворотной, 0.2. Правка Оксаны 06.09. */
  .stage--otz .cut::before {
    left: 13px !important; right: 13px !important;
    top: 17px !important; bottom: 13px !important;
    background: rgba(0, 0, 0, 0.2) !important;
    filter: blur(27px) !important;
    transform: translate(2px, 13px) !important;
  }

  /* Плашка-подпись на кромке вырезки: кегль подписной, а не 10. */
  .stage--otz .cut__stub {
    right: calc(-10 * var(--u)) !important;
    left: auto !important;
    top: calc(-9 * var(--u)) !important;
    padding: calc(2 * var(--u)) calc(9 * var(--u)) calc(3 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    white-space: nowrap !important;
  }

  /* --- A · КРУПНАЯ ---------------------------------------------------- */
  .stage--otz .cut--a {
    left: calc(26 * var(--u)) !important; top: calc(104 * var(--u)) !important;
    width: calc(336 * var(--u)) !important; height: calc(272 * var(--u)) !important;
    --rot: -1.8deg !important; --z: 1 !important;
  }
  .stage--otz .alien--a-top { left: calc(26 * var(--u)) !important; top: calc(-6 * var(--u)) !important; width: calc(286 * var(--u)) !important; height: calc(26 * var(--u)) !important; }
  .stage--otz .cut--a .q--big { left: calc(26 * var(--u)) !important; top: calc(38 * var(--u)) !important; width: calc(282 * var(--u)) !important; }
  .stage--otz .mark--a-u { left: calc(20 * var(--u)) !important; top: calc(152 * var(--u)) !important; width: calc(250 * var(--u)) !important; height: calc(18 * var(--u)) !important; }
  .stage--otz .by--a { left: calc(26 * var(--u)) !important; top: calc(172 * var(--u)) !important; font-size: calc(16 * var(--u)) !important; line-height: calc(21 * var(--u)) !important; }
  .stage--otz .alien--a-col { left: calc(26 * var(--u)) !important; top: calc(204 * var(--u)) !important; width: calc(268 * var(--u)) !important; height: calc(68 * var(--u)) !important; }
  /* Третий обрывок крупной вырезки на 390 не помещается: под цитатой
     остаётся одна колонка, а не две. */
  .stage--otz .alien--a-bot { display: none !important; }

  /* --- D · СРЕДНЯЯ ---------------------------------------------------- */
  .stage--otz .cut--d {
    left: calc(32 * var(--u)) !important; top: calc(336 * var(--u)) !important;
    width: calc(318 * var(--u)) !important; height: calc(240 * var(--u)) !important;
    --rot: 2.4deg !important; --z: 2 !important;
  }
  /* Снимок внутри вырезки снят: на 318 в ширину он оставляет цитате
     полколонки, и вырезка перестаёт быть цитатой. */
  .stage--otz .shot--d,
  .stage--otz .alien--d-cap { display: none !important; }
  .stage--otz .alien--d-bot { left: calc(24 * var(--u)) !important; top: calc(-6 * var(--u)) !important; width: calc(196 * var(--u)) !important; height: calc(26 * var(--u)) !important; }
  .stage--otz .cut--d .q--mid { left: calc(24 * var(--u)) !important; top: calc(40 * var(--u)) !important; width: calc(238 * var(--u)) !important; }
  .stage--otz .mark--d-u { left: calc(18 * var(--u)) !important; top: calc(130 * var(--u)) !important; width: calc(200 * var(--u)) !important; height: calc(18 * var(--u)) !important; }
  .stage--otz .by--d { left: calc(24 * var(--u)) !important; top: calc(158 * var(--u)) !important; font-size: calc(16 * var(--u)) !important; line-height: calc(21 * var(--u)) !important; }
  .stage--otz .cut--d .cut__stub { left: calc(24 * var(--u)) !important; right: auto !important; }

  /* Плашки «корпоратив» и «день рождения» опущены на 20 от общей
     кромки (-9): они стоят над чужой вырезкой, а не над своей, и на
     верхнем крае читались как подпись к соседке сверху. Просьба
     Оксаны 06.09, только эти две — у свадеб плашки остаются на месте. */
  /* ПЛАШКА СТОИТ НАД ЦИТАТОЙ, А НЕ НА НЕЙ. Опущенная в кромку карточки
     (11 и 21) она накрывала первую строку — «не тянул» под «день
     рождения» было не прочесть. Теперь низ плашки садится ровно над
     первой строкой: у «дня рождения» цитата начинается на 37, у
     «корпоратива» на 41, высота плашки 34. Правка Оксаны 06.09. */
  .stage--otz .cut--d .cut__stub { top: calc(2 * var(--u)) !important; }
  .stage--otz .cut--c .cut__stub { top: calc(-1 * var(--u)) !important; }

  /* --- R · ВЫРЕЗКА С КАДРОМ ------------------------------------------- */
  .stage--otz .cut--r {
    left: calc(296 * var(--u)) !important; top: calc(250 * var(--u)) !important;
    width: calc(118 * var(--u)) !important; height: calc(210 * var(--u)) !important;
    --rot: -2.8deg !important; --z: 3 !important;
  }
  /* Плашка «фото со свадьбы» снята — так в макете. Пробовала оставить:
     на вырезке шириной 118 подпись из четырнадцати букв ложится в две
     строки чёрным прямоугольником поверх соседней цитаты.
     ВОПРОС К ОКСАНЕ: на развороте эта плашка честно говорит, что тут
     фотография, а не видеоотзыв; на телефоне такой оговорки больше нет. */
  .stage--otz .cut--r .cut__stub { display: none !important; }

  /* Полежавшая вырезка в макете — средняя, а на развороте маленькая.
     Меняем их местами по цвету, а не по разметке.

     ТОН ВЗЯТ С РАЗВОРОТА (94 %), А НЕ ИЗ МАКЕТА (86 %). В макете
     preview-mobile отлежавшая бумага — #dedede, и сюда её переписали
     оттуда. Но на развороте этот самый тон 05.09 высветлили на два тона
     ровно потому, что рядом с белой соседкой он читался не «бумага
     полежала», а «бумага серая» (см. --cut-aged в section-otzyvy.css).
     На телефоне вырезка D вдвое ближе к соседкам, чем на развороте, и
     старый тон читался серой плашкой поверх листа. Меняем местами
     ТОНА РАЗВОРОТА, а не тона макета. */
  .stage--otz .cut--d .cut__paper { background: color-mix(in srgb, var(--bg) 94%, #000000) !important; }
  .stage--otz .cut--c .cut__paper { background: color-mix(in srgb, var(--bg) 45%, #ffffff) !important; }

  /* --- C · МАЛЕНЬКАЯ -------------------------------------------------- */
  .stage--otz .cut--c {
    left: calc(44 * var(--u)) !important; top: calc(536 * var(--u)) !important;
    width: calc(220 * var(--u)) !important; height: calc(152 * var(--u)) !important;
    --rot: 2.6deg !important; --z: 4 !important;
  }
  .stage--otz .alien--c-top { left: calc(22 * var(--u)) !important; top: calc(-6 * var(--u)) !important; width: calc(176 * var(--u)) !important; height: calc(26 * var(--u)) !important; }
  .stage--otz .cut--c .q--mid { left: calc(22 * var(--u)) !important; top: calc(36 * var(--u)) !important; width: calc(176 * var(--u)) !important; }
  .stage--otz .by--c { left: calc(22 * var(--u)) !important; top: calc(118 * var(--u)) !important; font-size: calc(16 * var(--u)) !important; line-height: calc(21 * var(--u)) !important; }

  /* Рукопись: 40 → 34, наклон круче. */
  .stage--otz .note {
    /* 64 → 79 и 730 → 710: правка Оксаны 06.09, вправо 15 и вверх 20. */
    left: calc(79 * var(--u)) !important;
    top: calc(710 * var(--u)) !important;
    padding: 0 calc(20 * var(--u)) calc(6 * var(--u)) calc(24 * var(--u)) !important;
    font-size: calc(39 * var(--u)) !important;    /* +20%, потом −5% */
    line-height: 1.5 !important;
    transform: rotate(-7deg) !important;
    z-index: 8;
  }

  /* Рваные кромки, пересчитанные под мобильные габариты. */
  .stage--otz .cut--a .cut__paper,
  .stage--otz .cut--a::before { clip-path: polygon(0px 11.08px, 33.23px 36.92px, 66.46px 11.08px, 99.69px 22.15px, 132.92px 14.77px, 166.15px 7.38px, 199.38px 25.85px, 232.62px 25.85px, 265.85px 11.08px, 299.08px 36.92px, 332.31px 29.54px, 365.54px 33.23px, 398.77px 33.23px, 432px 33.23px, 465.23px 18.46px, 498.46px 55.38px, 531.69px 33.23px, 564.92px 33.23px, 598.15px 14.77px, 631.38px 18.46px, 664.62px 22.15px, 697.85px 29.54px, 731.08px 29.54px, 764.31px 22.15px, 797.54px 7.38px, 830.77px 22.15px, 864px 51.69px, 897.23px 29.54px, 930.46px 33.23px, 963.69px 18.46px, 996.92px 7.38px, 1030.15px 11.08px, 1063.38px 7.38px, 1096.62px 14.77px, 1129.85px 51.69px, 1163.08px 11.08px, 1196.31px 25.85px, 1229.54px 33.23px, 1240.62px 25.85px, 1225.85px 33.23px, 1196.31px 66.46px, 1225.85px 99.69px, 1207.38px 132.92px, 1222.15px 166.15px, 1214.77px 199.38px, 1222.15px 232.62px, 1211.08px 265.85px, 1225.85px 299.08px, 1225.85px 332.31px, 1214.77px 365.54px, 1203.69px 398.77px, 1222.15px 432px, 1222.15px 465.23px, 1203.69px 498.46px, 1211.08px 531.69px, 1225.85px 564.92px, 1207.38px 598.15px, 1203.69px 631.38px, 1229.54px 664.62px, 1211.08px 697.85px, 1222.15px 731.08px, 1225.85px 764.31px, 1203.69px 797.54px, 1214.77px 830.77px, 1229.54px 864px, 1222.15px 897.23px, 1214.77px 930.46px, 1225.85px 963.69px, 1203.69px 996.92px, 1214.77px 1004.31px, 1207.38px 967.38px, 1174.15px 996.92px, 1140.92px 978.46px, 1107.69px 978.46px, 1074.46px 985.85px, 1041.23px 989.54px, 1008px 989.54px, 974.77px 996.92px, 941.54px 971.08px, 908.31px 974.77px, 875.08px 967.38px, 841.85px 982.15px, 808.62px 989.54px, 775.38px 985.85px, 742.15px 974.77px, 708.92px 971.08px, 675.69px 989.54px, 642.46px 989.54px, 609.23px 974.77px, 576px 989.54px, 542.77px 978.46px, 509.54px 967.38px, 476.31px 993.23px, 443.08px 993.23px, 409.85px 996.92px, 376.62px 982.15px, 343.38px 974.77px, 310.15px 963.69px, 276.92px 985.85px, 243.69px 967.38px, 210.46px 982.15px, 177.23px 989.54px, 144px 974.77px, 110.77px 989.54px, 77.54px 978.46px, 44.31px 974.77px, 11.08px 978.46px, 0px 971.08px, 33.23px 971.08px, 25.85px 937.85px, 18.46px 904.62px, 18.46px 871.38px, 22.15px 838.15px, 18.46px 804.92px, 33.23px 771.69px, 7.38px 738.46px, 11.08px 705.23px, 14.77px 672px, 7.38px 638.77px, 18.46px 605.54px, 11.08px 572.31px, 33.23px 539.08px, 22.15px 505.85px, 33.23px 472.62px, 25.85px 439.38px, 14.77px 406.15px, 18.46px 372.92px, 11.08px 339.69px, 29.54px 306.46px, 29.54px 273.23px, 44.31px 240px, 11.08px 206.77px, 44.31px 173.54px, 33.23px 140.31px, 29.54px 107.08px, 22.15px 73.85px, 18.46px 40.62px, 29.54px 7.38px) !important; }

  .stage--otz .cut--d .cut__paper,
  .stage--otz .cut--d::before { clip-path: polygon(0px 18.46px, 33.23px 25.85px, 66.46px 33.23px, 99.69px 11.08px, 132.92px 18.46px, 166.15px 14.77px, 199.38px 36.92px, 232.62px 25.85px, 265.85px 11.08px, 299.08px 33.23px, 332.31px 14.77px, 365.54px 22.15px, 398.77px 33.23px, 432px 25.85px, 465.23px 18.46px, 498.46px 14.77px, 531.69px 18.46px, 564.92px 36.92px, 598.15px 11.08px, 631.38px 22.15px, 664.62px 22.15px, 697.85px 11.08px, 731.08px 18.46px, 764.31px 36.92px, 797.54px 25.85px, 830.77px 11.08px, 864px 18.46px, 897.23px 29.54px, 930.46px 11.08px, 963.69px 7.38px, 996.92px 14.77px, 1030.15px 25.85px, 1063.38px 36.92px, 1096.62px 18.46px, 1129.85px 36.92px, 1163.08px 11.08px, 1174.15px 25.85px, 1148.31px 33.23px, 1163.08px 66.46px, 1152px 99.69px, 1140.92px 132.92px, 1133.54px 166.15px, 1155.69px 199.38px, 1137.23px 232.62px, 1155.69px 265.85px, 1144.62px 299.08px, 1152px 332.31px, 1144.62px 365.54px, 1155.69px 398.77px, 1155.69px 432px, 1140.92px 465.23px, 1159.38px 498.46px, 1166.77px 531.69px, 1144.62px 564.92px, 1163.08px 598.15px, 1152px 631.38px, 1140.92px 664.62px, 1166.77px 697.85px, 1152px 731.08px, 1140.92px 764.31px, 1148.31px 797.54px, 1155.69px 830.77px, 1152px 864px, 1163.08px 886.15px, 1140.92px 871.38px, 1107.69px 871.38px, 1074.46px 860.31px, 1041.23px 871.38px, 1008px 849.23px, 974.77px 871.38px, 941.54px 871.38px, 908.31px 849.23px, 875.08px 852.92px, 841.85px 838.15px, 808.62px 864px, 775.38px 852.92px, 742.15px 852.92px, 708.92px 834.46px, 675.69px 875.08px, 642.46px 852.92px, 609.23px 864px, 576px 875.08px, 542.77px 867.69px, 509.54px 852.92px, 476.31px 852.92px, 443.08px 875.08px, 409.85px 871.38px, 376.62px 834.46px, 343.38px 867.69px, 310.15px 841.85px, 276.92px 860.31px, 243.69px 852.92px, 210.46px 860.31px, 177.23px 856.62px, 144px 867.69px, 110.77px 860.31px, 77.54px 871.38px, 44.31px 856.62px, 11.08px 875.08px, 0px 867.69px, 18.46px 852.92px, 11.08px 819.69px, 14.77px 786.46px, 18.46px 753.23px, 14.77px 720px, 14.77px 686.77px, 36.92px 653.54px, 18.46px 620.31px, 33.23px 587.08px, 11.08px 553.85px, 29.54px 520.62px, 22.15px 487.38px, 33.23px 454.15px, 18.46px 420.92px, 36.92px 387.69px, 14.77px 354.46px, 29.54px 321.23px, 18.46px 288px, 22.15px 254.77px, 11.08px 221.54px, 33.23px 188.31px, 36.92px 155.08px, 29.54px 121.85px, 36.92px 88.62px, 14.77px 55.38px, 14.77px 22.15px) !important; }

  .stage--otz .cut--r .cut__paper,
  .stage--otz .cut--r::before { clip-path: polygon(0px 33.23px, 33.23px 33.23px, 66.46px 7.38px, 99.69px 44.31px, 132.92px 44.31px, 166.15px 33.23px, 199.38px 7.38px, 232.62px 36.92px, 265.85px 22.15px, 299.08px 18.46px, 332.31px 7.38px, 365.54px 33.23px, 398.77px 11.08px, 432px 7.38px, 435.69px 7.38px, 420.92px 33.23px, 417.23px 66.46px, 395.08px 99.69px, 395.08px 132.92px, 406.15px 166.15px, 420.92px 199.38px, 420.92px 232.62px, 406.15px 265.85px, 413.54px 299.08px, 424.62px 332.31px, 424.62px 365.54px, 417.23px 398.77px, 420.92px 432px, 409.85px 465.23px, 395.08px 498.46px, 406.15px 531.69px, 398.77px 564.92px, 413.54px 598.15px, 380.31px 631.38px, 398.77px 664.62px, 417.23px 697.85px, 402.46px 731.08px, 424.62px 764.31px, 398.77px 775.38px, 402.46px 753.23px, 369.23px 742.15px, 336px 749.54px, 302.77px 742.15px, 269.54px 756.92px, 236.31px 749.54px, 203.08px 738.46px, 169.85px 753.23px, 136.62px 742.15px, 103.38px 745.85px, 70.15px 753.23px, 36.92px 745.85px, 3.69px 742.15px, 0px 712.62px, 29.54px 742.15px, 33.23px 708.92px, 18.46px 675.69px, 14.77px 642.46px, 11.08px 609.23px, 11.08px 576px, 22.15px 542.77px, 48px 509.54px, 29.54px 476.31px, 25.85px 443.08px, 25.85px 409.85px, 33.23px 376.62px, 22.15px 343.38px, 18.46px 310.15px, 11.08px 276.92px, 25.85px 243.69px, 22.15px 210.46px, 33.23px 177.23px, 22.15px 144px, 14.77px 110.77px, 14.77px 77.54px, 18.46px 44.31px, 29.54px 11.08px) !important; }

  .stage--otz .cut--c .cut__paper,
  .stage--otz .cut--c::before { clip-path: polygon(0px 29.54px, 33.23px 29.54px, 66.46px 7.38px, 99.69px 14.77px, 132.92px 18.46px, 166.15px 33.23px, 199.38px 22.15px, 232.62px 36.92px, 265.85px 25.85px, 299.08px 55.38px, 332.31px 36.92px, 365.54px 44.31px, 398.77px 36.92px, 432px 33.23px, 465.23px 22.15px, 498.46px 29.54px, 531.69px 33.23px, 564.92px 36.92px, 598.15px 11.08px, 631.38px 25.85px, 664.62px 25.85px, 697.85px 48px, 731.08px 18.46px, 764.31px 33.23px, 797.54px 25.85px, 812.31px 33.23px, 786.46px 33.23px, 779.08px 66.46px, 782.77px 99.69px, 804.92px 132.92px, 786.46px 166.15px, 775.38px 199.38px, 797.54px 232.62px, 782.77px 265.85px, 756.92px 299.08px, 797.54px 332.31px, 782.77px 365.54px, 793.85px 398.77px, 768px 432px, 782.77px 465.23px, 790.15px 498.46px, 764.31px 531.69px, 801.23px 561.23px, 779.08px 531.69px, 745.85px 550.15px, 712.62px 531.69px, 679.38px 535.38px, 646.15px 531.69px, 612.92px 502.15px, 579.69px 531.69px, 546.46px 542.77px, 513.23px 539.08px, 480px 546.46px, 446.77px 524.31px, 413.54px 539.08px, 380.31px 524.31px, 347.08px 546.46px, 313.85px 528px, 280.62px 524.31px, 247.38px 539.08px, 214.15px 528px, 180.92px 542.77px, 147.69px 528px, 114.46px 553.85px, 81.23px 542.77px, 48px 539.08px, 14.77px 516.92px, 0px 528px, 14.77px 528px, 7.38px 494.77px, 7.38px 461.54px, 33.23px 428.31px, 18.46px 395.08px, 29.54px 361.85px, 14.77px 328.62px, 11.08px 295.38px, 14.77px 262.15px, 18.46px 228.92px, 14.77px 195.69px, 14.77px 162.46px, 25.85px 129.23px, 33.23px 96px, 33.23px 62.77px, 51.69px 29.54px) !important; }

}


/* =====================================================================
   06 · ВОПРОСЫ  (превью: scene--faqm 1510)

   На развороте это оглавление: вопрос слева, отточие, короткий ответ
   справа, подробность абзацем ниже. На 390 отточие соединять нечего —
   вопрос занимает всю ширину. Поэтому строка разворачивается в три
   ступени: вопрос → короткий ответ красным по правому краю → абзац.

   ЛИНЕЙКИ. В макете между строками стоят настоящие <div class="f-rule">,
   а в разметке сайта их нет вовсе — там строки разведены отбивкой.
   Разметку править нельзя, поэтому линейки положены фоном: тонкая между
   строками, двойная (толстая плюс тонкая) в начале списка и в конце
   полосы. Это то же, чем они нарисованы в макете, — заливка, а не текст.

   СЕГОДНЯШНЕЕ СОДЕРЖИМОЕ. В превью есть титул «пять вопросов» и
   указатель «когда уже решились» — 05–06.09 оба сняты с сайта, и сюда
   они не возвращаются. Предоплата в превью пустая линейка, на сайте
   вписано «20 процентов от стоимости» — берётся сайт.
   ===================================================================== */
@media (max-width: 760px) {

  .scene--faqg {
    aspect-ratio: 390 / 1423 !important;
    min-height: calc(100vw * 1423 / 390) !important;
  }
  /* Блок опущен на 22 (translateY), поэтому он на 22 короче сцены —
       иначе низ бумаги уходил под следующую секцию и по нижнему краю
       пропадала серая кромка, которая есть у всех остальных блоков. */
  .stage--faqg { height: calc(1401 * var(--u)) !important; }

  .stage--faqg .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--faqg .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
    z-index: 7;
  }

  /* Приводочных крестов в мобильном макете нет: на 390 они попадают в
     тот же угол, что и набор. */
  .stage--faqg .fq-cross { display: none !important; }

  .stage--faqg .fq-folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* Полоса. Титул с сайта снят, поэтому головка граф встаёт на его
     место — туда же, где в блоке 05 стоит «что говорят». */
  /* ЗАКРЫВАЮЩЕЙ ДВОЙНОЙ ЧЕРТЫ НЕТ — сверено с разворотом 06.09. Здесь
     фоном стояли две линейки в конце полосы (2 и 1 в макете 390): они
     остались от макета, где строки разведены линейками. На развороте
     полоса не закрыта ничем — последний ответ, воздух, рукопись. Убрана
     одна заливка, отступ оставлен: он и держит рукопись отдельно от
     последнего абзаца. */
  .stage--faqg .fq {
    /* 34 → 40, ширина 322 → 316: колонка вопросов встаёт в то же левое
       поле, что и остальные блоки. Ширину срезали ровно настолько,
       насколько подвинули: на 310 однострочные ответы переставали
       влезать и ломались пополам — им нужно 254, а оставалось 253. */
    left: calc(40 * var(--u)) !important;
    top: calc(64 * var(--u)) !important;
    width: calc(316 * var(--u)) !important;
    padding-bottom: calc(23 * var(--u)) !important;
    background: none !important;
  }

  .stage--faqg .fq-head {
    align-items: center !important;
    margin-bottom: calc(10 * var(--u)) !important;
  }
  .stage--faqg .fq-graph {
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--faqg .fq-plate {
    height: calc(26 * var(--u)) !important;
    padding: 0 calc(10 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* ЛИНЕЕК НЕТ — сверено с разворотом 06.09. Здесь была двойная жирная
     черта над списком и такая же под ним; на развороте вопросы не
     разделены ничем, кроме воздуха. Отступ оставлен: он и держит
     головку отдельно от первого вопроса. */
  /* 16 + 25 → 16 + 6: между «о чём спрашивают» и первым вопросом висело
     41, вдвое больше, чем между самими вопросами. Правка Оксаны 06.09. */
  .stage--faqg .fq-list {
    margin-top: calc(16 * var(--u)) !important;
    padding-top: calc(6 * var(--u)) !important;
  }

  /* Между вопросами — только воздух, как на развороте. Тонкая серая
     черта, стоявшая здесь, на листе не существует. */
  .stage--faqg .fq-row { margin: 0 !important; }
  .stage--faqg .fq-row + .fq-row {
    margin-top: calc(18 * var(--u)) !important;
    padding-top: calc(18 * var(--u)) !important;
  }

  /* Строка разворачивается в столбик, отточие снимается: соединять
     нечего, вопрос и ответ стоят друг под другом. */
  /* ОТТОЧИЕ ВЕРНУЛОСЬ, НО НА СТРОКУ ОТВЕТА. На развороте вопрос, точки и
     вердикт стоят одной строкой; на 390 вопрос переносится, и точки
     сначала просто сняли. Оксана 06.09 попросила их вернуть — теперь
     строка гнётся: вопрос занимает всю ширину, а точки с вердиктом
     встают под ним одной строкой, точки тянутся от левого поля до
     ответа. Шаг и вес точки те же, что на развороте (15 на 4, радиус
     1.3), — они и там, и тут в координатах листа. */
  /* СТРОКА НА СЕТКЕ, А НЕ НА ПЕРЕНОСЕ. С flex-wrap длинный ответ
     уезжал на свою строку целиком, а отточие оставалось на предыдущей и
     растягивалось на всю ширину: перенос во флексе считается ДО сжатия,
     и ответ успевал спрыгнуть раньше, чем сжаться. Сетка не переносит:
     колонка ответа берёт свою ширину, но не больше остатка — не влез,
     значит перенёсся внутри себя на вторую строку. Точки при этом меряют
     промежуток, и промежутки у всех вопросов разные, как на развороте.
     Нижняя граница колонки точек — 48: короче отточие перестаёт читаться
     тягой и выглядит тремя случайными точками. */
  .stage--faqg .fq-line {
    display: grid !important;
    grid-template-columns: minmax(calc(48 * var(--u)), 1fr) minmax(0, auto) !important;
    column-gap: calc(8 * var(--u)) !important;
    align-items: baseline !important;
  }
  .stage--faqg .fq-q { grid-column: 1 / -1 !important; }
  .stage--faqg .fq-dots { grid-column: 1 !important; }
  .stage--faqg .fq-v { grid-column: 2 !important; }
  .stage--faqg .fq-dots {
    display: block !important;
    flex: 1 1 auto !important;
    /* Точек МЕНЬШЕ, но каждая ЖИРНЕЕ и КРАСНАЯ. Разворотные 1.3 при шаге
       15 — это доли пикселя на 390 (масштаб листа 0.27), и отточие
       читалось грязноватой серой ниткой. Здесь шаг вдвое реже, радиус
       вдвое крупнее, цвет сразу красный: на развороте красное — это
       отклик на курсор, а на телефоне курсора нет и ждать нечего.
       Просьба Оксаны 06.09. */
    height: calc(8 * var(--u)) !important;
    margin: 0 !important;
    align-self: baseline !important;
    background-image: radial-gradient(circle at 50% 50%,
                      var(--red) calc(2 * var(--u)), transparent calc(2.4 * var(--u))) !important;
    background-size: calc(11 * var(--u)) calc(5 * var(--u)) !important;
    background-position: left bottom !important;
    background-repeat: repeat-x !important;
  }
  /* Второй, «курсорный» слой отточия на телефоне не нужен: точки и так
     красные, а прозрачность ему меняло наведение, которого здесь нет. */
  .stage--faqg .fq-dots::after { display: none !important; }
  .stage--faqg .fq-q {
    display: block !important;
    font-size: calc(24 * var(--u)) !important;
    line-height: calc(30 * var(--u)) !important;
    letter-spacing: 0.02em !important;
    white-space: normal !important;
  }
  .stage--faqg .fq-v {
    display: block !important;
    /* Ответ занимает столько, сколько ему нужно, и НЕ БОЛЬШЕ. Жёсткой
       доли строки здесь нет намеренно: с ней все ответы упирались в один
       и тот же предел, и отточия выходили одинаковой длины, чего на
       развороте не бывает — там точки меряют промежуток, а промежутки
       разные. Ответ сжимается (flex-shrink) только тогда, когда иначе не
       влезает, и тогда переносится на вторую строку, оставив точкам их
       минимум. */
    min-width: 0 !important;
    margin-top: calc(10 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    /* ОТВЕТ ВЫКЛЮЧЕН ВЛЕВО, А НЕ ВПРАВО. Пока он равнялся по правому
       краю, ответ в две строки оставлял пустоту слева от первой строки:
       коробка шириной по остатку, а первая строка короче — и отточие
       упиралось не в слова, а в воздух. Слева первая строка начинается
       ровно там, где кончились точки. На однострочных ответах ничего не
       меняется: коробка там и так по ширине строки. */
    text-align: left !important;
    white-space: normal !important;
  }
  .stage--faqg .fq-full {
    margin: calc(20 * var(--u)) 0 0 calc(20 * var(--u)) !important;
    max-width: none !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    hyphens: auto;
  }

  .stage--faqg .fq-hand {
    /* 56 → 186 и 1382 → 1307: вправо 130, вверх 60, ещё 15 и ещё 10. */
    left: calc(186 * var(--u)) !important;
    top: calc(1297 * var(--u)) !important;
    padding: 0 calc(20 * var(--u)) calc(6 * var(--u)) 0 !important;
    font-size: calc(39 * var(--u)) !important;    /* +20%, потом −5% */
    line-height: 1.5 !important;
    transform: rotate(-8deg) !important;
    transform-origin: 0 0 !important;
    z-index: 6;
  }

  /* ФАКТУРЫ — ПРОЦЕНТАМИ, А НЕ ПРИБИТЫМ ЧИСЛОМ.
     Высота этой секции считается по содержимому (js/fit-scene.js): графа
     «что за мероприятие» отращивает линейки по набранному, и лист растёт
     вместе с ней. Прибитые 1720/1708 при этом отстают — снизу оставалась
     полоса без бумаги и без зерна, а на пустом бланке, наоборот, лишние
     51 телефонный пиксель бумаги уходили под обрез вместе с нижней
     кромкой зерна. То же решение, что на развороте: там фактуры тоже
     привязаны процентами. */
  .stage--formB .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--formB .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
    z-index: 7;
  }

  .stage--formB .fb-folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* Шапка. В макете она набрана моно на всю ширину полосы; на сайте она
     рукописная и красная — это правка 06.09, и она остаётся. Место —
     то же, что у макетной шапки. */
  .stage--formB .fb-head {
    /* 34 → 164 и 70 → 130: вправо 80, ещё 40 и ещё 10; вниз 70 и ещё 50,
       потом 60 обратно вместе с бланком. Наклон
       −4 → −14, потом обратно к −9. Правки Оксаны 06.09. */
    left: calc(164 * var(--u)) !important;
    top: calc(104 * var(--u)) !important;
    font-size: calc(26 * var(--u)) !important;    /* было 39 — в полтора раза мельче */
    line-height: 1.3 !important;
    transform: rotate(-9deg) !important;
    transform-origin: 0 50% !important;
  }
  .stage--formB .fb-live {
    left: calc(40 * var(--u)) !important;
    /* 152 → 92 → 66: между колонтитулом и этой строкой висело 100
       пикселей пустой бумаги, потом зазор свели к общим 14. Рукопись и
       бланк опущены на те же числа — за строкой двигается всё, что ниже. */
    top: calc(66 * var(--u)) !important;
    width: calc(322 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
    white-space: normal !important;
  }

  /* --- КНИЖКА БЛАНКОВ ------------------------------------------------- */

  /* НИЖНЯЯ ПОЛОВИНА ЛИСТА СТОИТ В ПОТОКЕ, А НЕ ПРИБИТЫМИ КООРДИНАТАМИ.
     На развороте кадр и прямые каналы лежат в ПРАВОЙ колонке, и книжка
     растёт мимо них. На 390 колонки нет, всё выстроено одной полосой —
     и книжка растёт прямо на кадр: графа «что за мероприятие» отращивает
     линейки по набранному, а кадр стоял на прибитых 1056 и не двигался.
     Пять строк в графе — и корешок ложится на зонт (проверено снимком).
     Порядок в разметке уже тот самый: книжка, кадр, подпись, каналы,
     рукопись, — поэтому достаточно снять координаты и оставить отступы.
     Числа отступов — разности прежних прибитых верхов, так что на пустом
     бланке лист собирается пиксель в пиксель как раньше.
     position: relative, а не static: на .pad висят два псевдолиста
     книжки, они считаются от неё. */
  .stage--formB .pad,
  .stage--formB .fb-shot,
  .stage--formB .fb-cap,
  .stage--formB .fb-dir,
  .stage--formB .fb-note {
    position: relative !important;
    left: auto !important;
    top: auto !important;
    right: auto !important;
    bottom: auto !important;
  }

  .stage--formB .pad {
    /* 220 → 160: строку «расскажите» подняли на 60, и всё, что ниже,
       поднимается на столько же — иначе под ней открывается пустое поле. */
    margin: calc(134 * var(--u)) 0 0 calc(34 * var(--u)) !important;
    width: calc(322 * var(--u)) !important;
  }
  .stage--formB .pad::before { transform: translate(calc(14 * var(--u)), calc(11 * var(--u))) !important; }
  .stage--formB .pad::after  { transform: translate(calc(10 * var(--u)), calc(8 * var(--u))) !important; }

  .stage--formB .pad__strip { height: calc(16 * var(--u)) !important; }
  .stage--formB .pad__perf {
    height: calc(4 * var(--u)) !important;
    background-image: radial-gradient(circle at 50% 50%,
      rgba(0, 0, 0, 0.55) calc(1.25 * var(--u)), transparent calc(1.35 * var(--u))) !important;
    background-size: calc(10 * var(--u)) calc(4 * var(--u)) !important;
  }

  /* Служебные строки бланка стоят в потоке двумя строками, а не по
     краям одной: «ЗАПОЛНЯЕТСЯ ЗАКАЗЧИКОМ» и «ЭКЗЕМПЛЯР ПЕРВЫЙ» рядом
     на 322 не помещаются. Пара, отпечатанная на самой перфорации,
     снимается — она дублирует ту, что в бланке. */
  .stage--formB .pad__strip .pad__svcline { display: none !important; }

  /* «Экземпляр первый / второй» на телефоне снят. На развороте это
     служебная строка бланка у правого поля; на 390 правого поля нет,
     строка встаёт впритык к «заполняется заказчиком» и читается не
     пометкой на полях, а второй половиной той же фразы. Просьба
     Оксаны 06.09. */
  .stage--formB .pad__svcline--right { display: none !important; }
  .stage--formB .pad__svcline {
    position: static !important;
    /* Служебная строка «копия под копирку» лежит ПЕРВОЙ ВНУТРИ копии, и
       «имя» стояло к ней вплотную. Двигать надо её низ, а не верх блока:
       верхнее поле блока отодвигает их обе разом и зазора не даёт.
       Правка Оксаны 06.09. */
    margin: 0 0 calc(18 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    white-space: normal !important;
  }
  .stage--formB .pad__svcline--right { text-align: right !important; }

  .stage--formB .pad__body,
  .stage--formB .cb {
    padding: calc(14 * var(--u)) calc(14 * var(--u)) calc(20 * var(--u)) !important;
  }
  .stage--formB .fb-form { margin-top: calc(22 * var(--u)) !important; }

  /* Графы в один столбец. */
  .stage--formB .g-row { display: block !important; }
  .stage--formB .g {
    min-height: 0 !important;
    margin-bottom: calc(18 * var(--u)) !important;
  }
  .stage--formB .g__key {
    margin-bottom: calc(5 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--formB .g__line {
    height: calc(40 * var(--u)) !important;
    border-bottom-width: calc(2 * var(--u)) !important;
  }
  .stage--formB .g__lines {
    min-height: calc(80 * var(--u)) !important;
    background-image: repeating-linear-gradient(
      to bottom,
      transparent 0 calc(38 * var(--u)),
      var(--rule) calc(38 * var(--u)) calc(40 * var(--u))) !important;
  }
  /* Шаг роста графы js/form.js берёт из её же межстрочного — значит
     специально объявлять его тут не нужно: линейки и строки отмерены
     одним числом. */
  /* Двумя классами — иначе .g__in ниже по файлу собьёт межстрочный, и
     со второй строки текст поедет поперёк линеек (ловили 06.09). */
  .stage--formB textarea.g__area { line-height: calc(40 * var(--u)) !important; }
  .stage--formB .g__in {
    padding: 0 calc(2 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(40 * var(--u)) !important;
  }
  .stage--formB .g__par,
  .stage--formB .g__err {
    margin-top: calc(5 * var(--u)) !important;
    min-height: 0 !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--formB .fb-sum {
    min-height: 0 !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* Графа ведущего до отправки не просто невидима, а снята: на
     развороте она стоит СБОКУ от связи и пустого места не занимает, а в
     столбик оставила бы дыру в две строки посреди бланка. */
  .scene--formB:not([data-state="sent"]) .stage--formB .pad__top .svc { display: none !important; }
  .stage--formB .svc {
    flex: none !important;
    margin-top: calc(36 * var(--u)) !important;
    padding-top: 0 !important;
  }
  .stage--formB .svc__head,
  .stage--formB .svc__say {
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  .stage--formB .pad__foot {
    display: block !important;
    margin-top: calc(16 * var(--u)) !important;
  }
  .stage--formB .fb-consent {
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--formB .pad__go {
    display: flex !important;
    width: 100% !important;
    min-width: 0 !important;
    height: calc(56 * var(--u)) !important;
    margin-top: calc(14 * var(--u)) !important;
    padding: 0 calc(20 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }

  /* Второй экземпляр. В макете он пустой лист, на сайте на нём
     отпечатывается копирка — она и остаётся, только в один столбец. */
  .stage--formB .cb__row {
    min-height: 0 !important;
    margin-bottom: calc(14 * var(--u)) !important;
    gap: calc(10 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  /* НАЗВАНИЕ ГРАФЫ ВСТАЁТ НАД ЛИНЕЙКОЙ, КАК НА САМОМ БЛАНКЕ.
     Строкой на 294 они не помещаются: «мероприятие» само по себе шире
     отведённых под ключ 104, а на линейку остаётся столько, что
     «свадьба, 60 гостей» обрывалась многоточием (у .cb__v на развороте
     nowrap + ellipsis). На развороте обрыва нет — значит его не должно
     быть и здесь. Столбиком копия читается ровно тем же порядком, каким
     набран бланк на этом же телефоне: название, под ним линейка. */
  .stage--formB .cb__row { flex-wrap: wrap !important; }
  .stage--formB .cb__k {
    flex: 0 0 100% !important;
    margin-bottom: calc(5 * var(--u)) !important;
  }
  .stage--formB .cb__v {
    flex: 1 1 100% !important;
    min-height: 0 !important;
    padding: 0 calc(2 * var(--u)) calc(3 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    white-space: normal !important;
    /* Длинное слово ЛОМАЕТСЯ, а не уезжает вбок. Копия набирается тем,
       что человек написал в бланке, а там бывает и строка без единого
       пробела: по умолчанию такое слово не переносится, и оно уходило
       за правое поле листа, из-под копии наружу. Просьба Оксаны 06.09 —
       написанное должно идти вниз, а не в сторону. */
    overflow-wrap: break-word !important;
    word-break: break-word !important;
    overflow: visible !important;
    text-overflow: clip !important;
    /* Линейка копии на развороте — волосок в 1 макетный пиксель. На
       телефоне лист ужат в 3,7 раза, и волосок превращался в четверть
       пикселя: линеек под значениями не было вовсе. Тот же перевод в
       телефонные единицы, что у .g__line и .cb__again выше. */
    border-bottom-width: calc(1 * var(--u)) !important;
  }
  .stage--formB .cb__foot {
    display: block !important;
    padding-top: calc(24 * var(--u)) !important;
  }
  .stage--formB .cb__side { flex: none !important; }
  .stage--formB .cb__keep {
    margin-top: calc(16 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--formB .cb__title {
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--formB .cb__dev {
    max-width: none !important;
    font-size: calc(12 * var(--u)) !important;
    line-height: calc(17 * var(--u)) !important;
  }
  .stage--formB .cb__dev code { font-size: calc(11 * var(--u)) !important; }
  .stage--formB .cb__again {
    margin-top: calc(14 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    border-bottom-width: calc(1.6 * var(--u)) !important;
  }

  /* --- КАДР И ПРЯМЫЕ КАНАЛЫ ------------------------------------------- */
  /* Отступы вместо прибитых верхов — см. пояснение у книжки. 168 = 1056
     (прежний верх кадра) минус 888 (низ книжки на пустом бланке). */
  .stage--formB .fb-shot {
    /* Правка Оксаны 06.09: выше на 200 (168 → −32, отступ ушёл в минус и
       кадр поднялся под бланк), меньше на 15 % (216×324 → 184×275),
       наклон 15° вправо и вправо на 80 тремя шагами (174 → 254). */
    margin: calc(-12 * var(--u)) 0 0 calc(254 * var(--u)) !important;
    width: calc(184 * var(--u)) !important;
    /* Верх кадра срезан на 60, низ ещё на 10 (275 → 205), сам кадр
       поднят на 60 и опущен обратно на 10. Режется именно верх: снимок внутри прижат к нижней кромке
       (object-position 50 % 100 %), поэтому пара под зонтом остаётся
       целиком, уходит только небо над ней. Только телефон. */
    height: calc(205 * var(--u)) !important;
    transform: rotate(15deg) !important;
    box-shadow: 0 calc(2 * var(--u)) calc(6 * var(--u)) rgba(0, 0, 0, 0.14) !important;
  }

  /* На развороте эта строка — подпись под кадром в правой колонке. На
     390 колонки нет, и она встаёт заголовком к прямым каналам: они
     идут сразу под ней. */
  .stage--formB .fb-cap {
    /* 40 → −110: подъём на 200, потом ещё на 50, потом 100 обратно —
       на −210 строка уходила ПОД бланк и скрывалась под ним (у бланка
       z-index 6). Ниже низа бланка она видна. Потом ещё 25 вверх, до −135.
       Тянем верхним отступом заголовка — прямые каналы и сноска идут за
       ним потоком и поднимаются на столько же. */
    margin: calc(-135 * var(--u)) 0 0 calc(34 * var(--u)) !important;
    width: calc(322 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(21 * var(--u)) !important;
  }
  .stage--formB .fb-dir {
    margin: calc(4 * var(--u)) 0 0 calc(34 * var(--u)) !important;
    width: calc(322 * var(--u)) !important;
  }
  .stage--formB .fb-soc {
    gap: calc(34 * var(--u)) !important;
    margin: 0 !important;
  }
  .stage--formB .fb-soc a {
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--formB .fb-fine {
    /* Сноска не влезала в строку и уходила под кадр. Ширина по полосе
       набора — дальше её ломает типограф, он же держит «Meta Platforms
       Inc.» вместе. Правка Оксаны 06.09. */
    max-width: calc(200 * var(--u)) !important;
    margin-top: calc(14 * var(--u)) !important;
    font-size: calc(11 * var(--u)) !important;
    line-height: calc(15 * var(--u)) !important;
  }

  /* В потоке рукопись становится строчной — возвращаем ей блок, но по
     ширине набора: на всю полосу растянутый блок увёл бы поворот
     (transform-origin: 0 0) от самого слова. */
  .stage--formB .fb-note {
    display: block !important;
    width: max-content !important;
    /* 76 → 16 и 56 → 46: правка Оксаны 06.09, вверх 60 и влево 10. */
    margin: calc(6 * var(--u)) 0 0 calc(46 * var(--u)) !important;
    padding: 0 calc(20 * var(--u)) calc(6 * var(--u)) 0 !important;
    font-size: calc(39 * var(--u)) !important;    /* +20%, потом −5% */
    line-height: 1.5 !important;
    transform: rotate(-8deg) !important;
    transform-origin: 0 0 !important;
  }

  /* ОТКЛИКА НА КУРСОР НА ТЕЛЕФОНЕ НЕТ — тот же приём, что в блоках 04 и
     05. Курсора здесь нет вовсе, а :hover никуда не делся: браузер
     телефона выдаёт его по КАСАНИЮ и держит, пока человек не ткнёт в
     другое место. На этом листе под касание попадали три вещи.
       1. TG / VK / INST. Под курсором ссылка получает красную черту
          маркером. Пальцем: ткнул, ушёл по ссылке, вернулся — черта
          так и стоит под одной из трёх, будто её пометили.
       2. Кнопка «оторвать и отправить». Под курсором она приподнята,
          а вместе с ней наливается перфорация — подсказка «оторвётся
          вот здесь». Если бланк не прошёл проверку, лист остаётся на
          месте, а подсказка горит и после касания.
       3. «Взять новый бланк» — под курсором краснеет.
     :focus-visible ниже не трогаем: он от клавиатуры, пальцем не
     вызывается. У кадра с зонтом отклика нет и на развороте — файл
     чёрно-белый, проявлять нечего, и снимать нечего. */
  .stage--formB .fb-soc a:hover { text-decoration: none !important; }
  .stage--formB .pad__go:hover { transform: none !important; }
  .stage--formB .pad__top:has(.pad__go:hover) .pad__perf { opacity: 0.72 !important; }
  .stage--formB .cb__again:hover { color: var(--ink) !important; }

}

/* =====================================================================
   08 · ФУТЕР  (превью: scene--footm 1004)

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

   СЕГОДНЯШНЕЕ СОДЕРЖИМОЕ. Из превью НЕ переносятся «после вечера»,
   «оборот последнего отпечатка», «печать окончена» и «политика
   конфиденциальности» — 06.09 они сняты с сайта. Пустые линейки связи
   тоже: телефон, телеграм и вконтакте вписаны настоящими. Рукопись
   внизу — «Спасибо за просмотр — жду сообщения», а не «дальше — ваш
   вечер».
   ===================================================================== */
@media (max-width: 760px) {

  .scene--foot {
    aspect-ratio: 390 / 814 !important;
    min-height: calc(100vw * 814 / 390) !important;
  }
  /* Блок опущен на 22 (translateY), поэтому он на 22 короче сцены —
       иначе низ бумаги уходил под следующую секцию и по нижнему краю
       пропадала серая кромка, которая есть у всех остальных блоков. */
  .stage--foot { height: calc(792 * var(--u)) !important; }

  .stage--foot .paper {
    left: 0 !important; top: 0 !important;
    width: calc(390 * var(--u)) !important;
    height: 100% !important;
  }
  .stage--foot .grain {
    left: calc(6 * var(--u)) !important; top: calc(6 * var(--u)) !important;
    width: calc(378 * var(--u)) !important;
    height: calc(100% - 12 * var(--u)) !important;
    z-index: 30;
  }
  .stage--foot .folio {
    left: calc(26 * var(--u)) !important;
    top: calc(30 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }

  /* --- СТОПКА КАДРОВ -------------------------------------------------- */
  .stage--foot .pr__lift {
    box-shadow: 0 calc(2 * var(--u)) calc(8 * var(--u)) rgba(0, 0, 0, 0.20) !important;
  }

  /* ОТКЛИКА НА КУРСОР НА ТЕЛЕФОНЕ НЕТ — тот же приём, что в блоках 04,
     05 и 07. Курсора здесь нет вовсе, а :hover никуда не делся: браузер
     телефона выдаёт его по КАСАНИЮ и держит, пока человек не ткнёт в
     другое место. В пачке под касание попадало три вещи сразу.
       1. Цвет. По section-footer.css кадр под курсором наливается
          цветом; ткнул пальцем в фотографию — она стала цветной и
          такой осталась, а язык сайта: снимки чёрно-белые.
       2. Подъём. hover приподнимает .pr__lift на 6 и увеличивает его —
          кадр так и стоял поддетым, один из пяти.
       3. Слой. hover ставит кадру z-index 10 поверх своего 5…9, и
          порядок сваливания пачки по касанию перемешивался.
     Тень трогать не нужно: она уже перебита важностью правилом выше.
     Служебный [data-hover] (?hover=…) НЕ трогаем: пальцем он не
     вызывается, а снимок наведения по нему делается.

     ОТПЕЧАТКУ (.rev) ОТДЕЛЬНОГО ПРАВИЛА НЕ НУЖНО: его hover меняет
     transform и filter, а оба уже стоят с !important ниже по этому же
     блоку — проверено вычисленными стилями, под наведением у .rev не
     меняется ничего. Отогнутого уголка (.rev__fold) в разметке нет
     вовсе, --fold: 0 — снимать там нечего. */
  .stage--foot .pr:hover { z-index: var(--z, 1) !important; }
  .stage--foot .pr:hover .pr__lift { transform: none !important; }
  /* Тот же цветной фильтр, что у кадра без касания (см. хвост файла):
     наведение не меняет ничего. */
  .stage--foot .pr:hover .pr__img {
    filter: contrast(1.02) saturate(1.04) !important;
  }
  /* Весь коллаж оборота сдвинут влево на 40 и поднят на 30 (правки
     Оксаны 06.09): по горизонтали 274→234, 146→106, 196→156, 84→44,
     228→188; по вертикали 100→70, 108→78, 214→184, 176→146, 258→228. */
  .stage--foot .pr--1 {
    left: calc(234 * var(--u)) !important; top: calc(70 * var(--u)) !important;
    width: calc(140 * var(--u)) !important; height: calc(186 * var(--u)) !important;
    --z: 8 !important; --a: -2.2deg !important;
  }
  .stage--foot .pr--3 {
    left: calc(106 * var(--u)) !important; top: calc(78 * var(--u)) !important;
    width: calc(180 * var(--u)) !important; height: calc(120 * var(--u)) !important;
    --z: 6 !important; --a: -3.4deg !important;
  }
  .stage--foot .pr--2 {
    left: calc(156 * var(--u)) !important; top: calc(184 * var(--u)) !important;
    width: calc(162 * var(--u)) !important; height: calc(108 * var(--u)) !important;
    --z: 7 !important; --a: 3.2deg !important;
  }
  .stage--foot .pr--4 {
    left: calc(44 * var(--u)) !important;  top: calc(146 * var(--u)) !important;
    width: calc(132 * var(--u)) !important; height: calc(150 * var(--u)) !important;
    --z: 5 !important; --a: 4.8deg !important;
  }
  .stage--foot .pr--5 {
    left: calc(188 * var(--u)) !important; top: calc(228 * var(--u)) !important;
    width: calc(152 * var(--u)) !important; height: calc(102 * var(--u)) !important;
    --z: 9 !important; --a: -5.2deg !important;
  }
  /* 88 % было отмерено под прежний снимок в этой рамке; у нового кадра
     на такой глубине пусто. Кадрирование считается заново под каждую
     фотографию, размеры рамок при этом не трогаем. */
  .stage--foot .pr--4 .pr__img { object-position: 50% 5% !important; }

  /* --- БЕЛЫЙ ЛИСТ С ВЫХОДНЫМИ ДАННЫМИ --------------------------------- */
  /* КОЛЛАЖ ОТПЕЧАТКОВ НА ТЕЛЕФОНЕ СНЯТ (просьба Оксаны 06.09). Пять
     кадров внахлёст занимали 67…337 — четверть блока, — а фотографий на
     листе к этому месту человек уже видел два десятка. Всё, что ниже,
     поднято на 212 и на столько же укорочен блок: пустого поля от снятой
     стопки остаться не должно. */
  .stage--foot .pr { display: none !important; }

  .stage--foot .rev {
    left: calc(40 * var(--u)) !important;
    top: calc(84 * var(--u)) !important;
    width: calc(304 * var(--u)) !important;
    height: calc(406 * var(--u)) !important;
    transform: rotate(-1.6deg) !important;
    filter: drop-shadow(0 calc(2 * var(--u)) calc(4 * var(--u)) rgba(0, 0, 0, 0.18))
            drop-shadow(0 calc(12 * var(--u)) calc(20 * var(--u)) rgba(0, 0, 0, 0.17)) !important;
  }
  /* Рваный левый край: числа в полигоне — пиксели, значит их тоже надо
     перевести в макет 390. */
  .stage--foot .rev__paper {
    clip-path: polygon(
      calc(3 * var(--u)) 0, 100% 0,
      100% 100%, 0 100%,
      0 79%, calc(4 * var(--u)) 61%, 0 44%, calc(3 * var(--u)) 26%, 0 11%) !important;
  }

  .stage--foot .imprint {
    left: calc(20 * var(--u)) !important;
    top: calc(22 * var(--u)) !important;
    width: calc(264 * var(--u)) !important;
    height: calc(102 * var(--u)) !important;
    padding: calc(14 * var(--u)) calc(16 * var(--u)) 0 !important;
  }
  .stage--foot .imprint__name {
    font-size: calc(20 * var(--u)) !important;
    line-height: calc(26 * var(--u)) !important;
  }
  .stage--foot .imprint__sub {
    margin-top: calc(4 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    white-space: normal !important;
  }
  .stage--foot .regmark {
    left: calc(130 * var(--u)) !important;
    top: calc(137 * var(--u)) !important;
    width: calc(20 * var(--u)) !important;
    height: calc(20 * var(--u)) !important;
  }
  .stage--foot .rev__sheet {
    left: calc(160 * var(--u)) !important;
    top: calc(136 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  .stage--foot .rev__rule {
    left: calc(20 * var(--u)) !important;
    top: calc(172 * var(--u)) !important;
    width: calc(264 * var(--u)) !important;
    height: calc(1 * var(--u)) !important;
  }
  .stage--foot .grp {
    left: calc(20 * var(--u)) !important;
    top: calc(186 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
  }
  /* Строки связи набраны мельче макетных 16, и это не вкусовщина.
     В макете справа стоят ПУСТЫЕ линейки, а на сайте вписаны настоящие
     контакты: «ВКОНТАКТЕ: VALENTIN_VERKIN» кеглем 16 занимает 301 при
     ширине листа 264 — половина адреса уезжает за кромку. На 13 строка
     укладывается в 247. */
  .stage--foot .row {
    width: calc(264 * var(--u)) !important;
    min-height: calc(18 * var(--u)) !important;
    gap: calc(10 * var(--u)) !important;
    font-size: calc(13 * var(--u)) !important;
    line-height: calc(18 * var(--u)) !important;
  }
  .stage--foot .row__k { flex: 0 0 calc(92 * var(--u)) !important; }

  /* ПЛОЩАДКА ПОД ПАЛЕЦ У ТЕЛЕФОНА, ТЕЛЕГРАМА И ВКОНТАКТЕ.
     Это единственные работающие контакты сайта, и строка у них 18 в
     высоту: попасть пальцем в набор высотой 13 нельзя. Тот же приём,
     что у соцсетей первого экрана, только площадку даёт псевдоэлемент,
     а не высота: у .row стоит align-items: flex-end, и любая пазуха на
     самой ссылке подняла бы её набор над строкой ключа.
     Шаг граф 34, площадка 34 — соседние площадки сходятся кромка в
     кромку и не залезают друг на друга.
     ПОДЧЁРКИВАНИЕ ПОД КУРСОРОМ СНЯТО: курсора нет, а :hover браузер
     телефона выдаёт по касанию и держит — ткнул в телеграм, вернулся,
     а красная черта так и стоит под одной из трёх строк, будто её
     пометили. :focus-visible не трогаем: он от клавиатуры. */
  .stage--foot .row__v { position: relative !important; }
  .stage--foot .row__v::after {
    content: "" !important;
    position: absolute !important;
    left: 0 !important;
    right: 0 !important;
    top: calc(-8 * var(--u)) !important;
    bottom: calc(-8 * var(--u)) !important;
  }
  .stage--foot .row__v:hover { text-decoration: none !important; }

  .stage--foot .row--c1 { left: calc(20 * var(--u)) !important; top: calc(218 * var(--u)) !important; }
  .stage--foot .row--c2 { left: calc(20 * var(--u)) !important; top: calc(252 * var(--u)) !important; }
  .stage--foot .row--c3 { left: calc(20 * var(--u)) !important; top: calc(286 * var(--u)) !important; }

  /* Шкала краски, счёт оттисков и подпись опущены на 30: между строкой
     «вконтакте» и шкалой не хватало воздуха (правка Оксаны 06.09). */
  .stage--foot .scale {
    left: calc(20 * var(--u)) !important;
    top: calc(354 * var(--u)) !important;
    gap: calc(3 * var(--u)) !important;
  }
  /* Шкала краски и счёт оттисков мельче на 20 % (правка Оксаны 06.09):
     квадрат 14 → 11, зазор 4 → 3, кегль счёта 16 → 13. */
  .stage--foot .patch {
    width: calc(11 * var(--u)) !important;
    height: calc(11 * var(--u)) !important;
    border-width: calc(1 * var(--u)) !important;
  }
  .stage--foot .count {
    left: calc(20 * var(--u)) !important;
    top: calc(377 * var(--u)) !important;
    font-size: calc(13 * var(--u)) !important;
    line-height: calc(18 * var(--u)) !important;
  }
  .stage--foot .sign {
    left: calc(186 * var(--u)) !important;
    top: calc(352 * var(--u)) !important;
    font-size: calc(36 * var(--u)) !important;
    line-height: 1.5 !important;
  }

  /* Рукопись. На развороте она в одну строку; сегодняшняя фраза длиннее
     прежней и на 390 в строку не влезает — отпущена в две. */
  .stage--foot .note {
    left: calc(56 * var(--u)) !important;
    top: calc(538 * var(--u)) !important;
    /* Ширина 310: типограф склеил «просмотр» с тире неразрывным пробелом,
       и первая строка встаёт целиком — «Спасибо за просмотр —», вторая
       «жду сообщения». На 260 не влезало, и ломалось после «Спасибо».
       Кегль +15 %
       (30 → 35), межстрочное плотнее (1.4 → 1.15) — рукопись в две
       строки не должна разъезжаться. Правка Оксаны 06.09. */
    width: calc(310 * var(--u)) !important;
    padding: 0 calc(20 * var(--u)) calc(6 * var(--u)) 0 !important;
    font-size: calc(35 * var(--u)) !important;
    line-height: 1.15 !important;
    white-space: normal !important;
    transform: rotate(-8deg) !important;
    transform-origin: 0 0 !important;
    z-index: 14;
  }

  .stage--foot .colophon {
    left: calc(26 * var(--u)) !important;
    top: calc(653 * var(--u)) !important;
    width: calc(240 * var(--u)) !important;
    font-size: calc(16 * var(--u)) !important;
    line-height: calc(22 * var(--u)) !important;
    white-space: normal !important;
  }
  /* ДВА КОЛОНТИТУЛА — СТОЛБИКОМ, ОДИН ПОД ДРУГИМ. На развороте строка
     про Валентина стоит слева, «дизайн» — справа на той же высоте; на
     390 они вставали в одну строку и жались друг к другу. Теперь
     «дизайн» уходит под строку про Валентина, к тому же левому полю.
     Саму строку про Валентина по частям НЕ разбиваем — она переносится
     как обычный текст. Правка Оксаны 06.09. */
  .stage--foot .colophon--right {
    left: calc(26 * var(--u)) !important;
    right: auto !important;
    top: calc(717 * var(--u)) !important;
    width: auto !important;
  }
  /* «Дизайн» под курсором краснеет — и по касанию краснеет насовсем.
     Последняя строка сайта не должна оставаться помеченной оттого, что
     по ней провели пальцем. */
  .stage--foot a.colophon:hover {
    color: var(--ink) !important;
    opacity: 0.78 !important;
  }

}


/* =====================================================================
   ССЫЛКИ НА ТЕЛЕФОНЕ ПОДЧЁРКНУТЫ ВСЕГДА

   На развороте красная черта появляется под рукой — это и есть знак,
   что по слову можно нажать. Пальцем «навести» нельзя: наведение на
   телефоне срабатывает уже ПОСЛЕ касания, то есть после того, как
   человек решился. Поэтому здесь черта стоит постоянно, и ссылка видна
   ссылкой до касания, а не после.

   Собраны все настоящие ссылки листа: соцсети первого экрана, соцсети
   бланка, графы связи в футере и «дизайн». Пункты бургера не в этом
   списке: там каждое слово и так строка меню, черта под ними была бы
   шумом.
   ===================================================================== */
@media (max-width: 760px) {

  .stage--hero .soc--tg,
  .stage--hero .soc--vk,
  .stage--hero .soc--inst,
  .stage--formB .fb-soc a,
  .stage--foot .row__v,
  .stage--foot a.colophon {
    text-decoration: underline !important;
    text-decoration-color: var(--red) !important;
    text-decoration-thickness: calc(1.6 * var(--u)) !important;
    text-underline-offset: calc(5 * var(--u)) !important;
  }
}


@media (max-width: 760px) {
  /* Подпись «кадры с площадок» снята 06.09 по решению Оксаны: на телефоне
     она стояла вплотную к «веду» и две подписи читались одним списком. */
  .stage--events .cap--strip { display: none !important; }
}


/* =====================================================================
   ВЕРХНЕЕ ПОЛЕ У БЛОКОВ НИЖЕ ПЕРВОГО ЭКРАНА

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

   Правильно — сдвинуть блок ЦЕЛИКОМ. Здесь это делается одним правилом
   на блок: содержимое едет вниз на 22, а высота блока на те же 22
   растёт, иначе низ ушёл бы под обрез (у .scene стоит overflow: clip).

   Порядок в transform важен: сначала масштаб, потом сдвиг. Сдвиг тогда
   считается в координатах листа, и 22 остаются теми же 22 макетными
   пикселями на любом экране.
   ===================================================================== */
@media (max-width: 760px) {
  .stage--events,
  .stage--povod,
  .stage--arh,
  .stage--otz,
  .stage--faqg,
  .stage--formB,
  .stage--foot {
    transform: scale(var(--k)) translateY(calc(22 * var(--u))) !important;
  }
}


/* =====================================================================
   ФОТОГРАФИИ НА ТЕЛЕФОНЕ — ЦВЕТНЫЕ  (решение Оксаны 06.09)

   Язык сайта: кадры чёрно-белые, цвет наливается под курсором. На
   развороте это работает — там есть курсор. На телефоне курсора нет, и
   от приёма оставалась только его половина: кадры навсегда серые, а
   цвета не видел никто.

   Поэтому здесь стоит РОВНО ТО СОСТОЯНИЕ, которое на развороте даёт
   наведение: contrast(1.02) saturate(1.04) без обесцвечивания. Числа не
   выдуманы — они списаны с десктопного :hover, чтобы телефон показывал
   те же кадры, что видит человек с мышью, а не отдельно подкрученные.

   Правила :hover, которые на телефоне гасят отклик (блоки 04, 05, 07,
   08 выше по файлу), переведены на тот же фильтр: их смысл — «касание
   не меняет ничего», и он сохраняется. Правила ниже задают состояние
   покоя и заодно снимают отклик там, где своего правила не было.

   ЧЕГО ЭТИ ПРАВИЛА СДЕЛАТЬ НЕ МОГУТ. Три кадра сайта чёрно-белые в
   САМОМ ФАЙЛЕ, и фильтром цвет из них не достать — цветного исходника
   в проекте нет:
     · коллаж первого экрана (collage-top-node.png, collage-bottom-node.png);
     · пара под зонтом (couple-umbrella-bw.jpg) — в блоках 05 и 07;
     · кадр вечеринки в блоке 03 (curtain-motion-bw.jpg) почти
       обесцвечен в исходнике, цвет из него выйдет едва заметный.
   Их нужно переснять или перевыгрузить в цвете — это к Оксане.
   ===================================================================== */
@media (max-width: 760px) {

  /* 02 · СОБЫТИЯ — четыре кадра и слот ролика */
  .stage--events .pic,
  .stage--events .pic:hover,
  .stage--events .reel__poster,
  .stage--events .reel__video,
  .stage--events .reel:hover .reel__poster,
  .stage--events .reel:hover .reel__video,

  /* 03 · ПОВОД — четыре отпечатка формата. Правило перебивает и
     .frame[data-scratch] .shot { filter: none } из section-povod.css:
     метка ставится только при живом холсте, а холст на телефоне
     выключен (.scratch display: none выше по файлу). */
  .stage--povod .shot,

  /* 04 · АРХИВ — вся стопка из восьми */
  .stage--arh .shot__img,
  .stage--arh .shot:hover .shot__img,

  /* 05 · ОТЗЫВЫ — кадр в вырезке D и постер видеоотзыва */
  .stage--otz .shot--d,
  .stage--otz .cut--d:hover .shot--d,
  .stage--otz .reel__poster,
  .stage--otz .reel__video,
  .stage--otz .reel:hover .reel__poster,
  .stage--otz .reel:hover .reel__video,

  /* 07 · ЗАЯВКА — кадр над формой */
  .stage--formB .fb-shot__img,

  /* 08 · ПОДВАЛ — пачка отпечатков и уголок оборота */
  .stage--foot .pr__img,
  .stage--foot .pr:hover .pr__img,
  .stage--foot .rev__foldimg,
  .stage--foot .rev:hover .rev__foldimg {
    filter: contrast(1.02) saturate(1.04) !important;
  }

  /* Верх кадра над формой срезан: снимок прижат к нижней кромке, чтобы
     пара под зонтом осталась целиком, а ушло небо над ней. Стоит
     ОТДЕЛЬНЫМ правилом, а не внутри перечня выше: вписанное в середину
     перечня, оно разрывало его пополам, и половина кадров сайта
     оставалась без цвета и с чужим кадрированием. */
  .stage--formB .fb-shot__img { object-position: 50% 100% !important; }

  /* 01 · ПЕРВЫЙ ЭКРАН. Правило стоит, и оно ничего не даёт: обе
     картинки коллажа выгружены из макета уже чёрно-белыми, в файле нет
     ни одного цветного пикселя. Оставлено намеренно — как только
     появятся цветные выгрузки, цвет включится сам, без правки стилей.
     Портрет Валентина цветной в файле и фильтра на себе не носит. */
  .stage--hero .pic--collage-top,
  .stage--hero .pic--collage-bottom { filter: none !important; }
}


/* Стрелка листания живёт только на телефоне: на развороте виден весь
   ряд поводов, листать там нечего. */
.fmts__swipe { display: none; }

/* ═══ КАДР АРХИВА ЦЕЛИКОМ ПО ТАПУ ══════════════════════════════════════
   Слой лежит в body, а не в блоке: блок масштабируется transform'ом, и
   fixed внутри него считался бы от блока. Поэтому правила стоят ВНЕ
   медиазапроса по блокам — но включает слой только скрипт и только на
   телефоне, на развороте он не создаётся. */
.arh-zoom {
  position: fixed;
  inset: 0;
  z-index: 60;                  /* выше сквозной линии, у неё 6 */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 18px;
  padding: 16px;
  background: rgba(17, 17, 17, 0.94);
  cursor: zoom-out;
}

/* СПРЯТАННЫЙ СЛОЙ ДОЛЖЕН ПРЯТАТЬСЯ. Браузерное [hidden] { display: none }
   слабее правила по классу выше: слой получал hidden и оставался на
   экране, а вместе с ним пропадал только адрес картинки — на месте
   снимка оставалась пустая рамка с подписью, и закрыть было нельзя. */
.arh-zoom[hidden] { display: none !important; }

.arh-zoom__img {
  max-width: 100%;
  max-height: 82vh;
  object-fit: contain;          /* целиком, а не обрезком, ради этого всё */
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
}

.arh-zoom__hint {
  margin: 0;
  color: rgba(255, 255, 255, 0.62);
  font-size: 13px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

@media (max-width: 760px) {
  /* Кадр в стопке — предмет, по которому можно ткнуть. */
  .stage--arh .shot[role="button"] { cursor: zoom-in; }
}
