Этот документ — единственный источник правды по слоям: три fixed-элемента
первого экрана, blend-режимы и обязательное правило «relative z-10 +
непрозрачный фон» для всего, что идёт после hero. Открыть ПЕРЕД добавлением
новой секции или любой правкой z-index. Работоспособность fixed-слоёв
зависит и от режима Lenis — см. MOTION.md.
В hero-секции (первый экран) живут три fixed-элемента, которые рисуются относительно viewport и продолжают «висеть» при скролле вниз. Порядок снизу вверх — это порядок в DOM:
img#sky-fixed— небо-подложка во весь экран (fixed inset-0 object-cover), компонентSkyFixed.astro, рендерится вindex.astroдо<DenisFixed />; закреплена на всех брейкпоинтах, включая мобильный;aside#denis-fixed— фото Дениса справа (fixed top-0 right-0 h-screen),md+только;img#mountain-fixed— гора в левом нижнем углу (md:fixed bottom-0 left-0), живёт внутриHero.astro.
У всех трёх намеренно нет z-index — слои выстраиваются по DOM-order, чтобы
mix-blend-difference на героике могла смешиваться с небом, горой и Денисом
(blend работает только внутри одного stacking context — у body).
mountain.jpg — JPEG без альфы: гора вырезана на белом поле. Пока фоном
первого экрана был чистый #FFFFFF, поле сливалось с ним само. Поверх неба
(#F2F4F6 в среднем) оно проступило бы светлым прямоугольником, поэтому у
картинки стоит mix-blend-multiply: умножение гасит белое до фона, а дуотон
(filter: url(#mountain-duotone)) остаётся. Снимать blend нельзя — вернётся
прямоугольник. Фото Дениса — PNG с альфой, ему blend не нужен.
Чтобы fixed-слои не «проступали» сквозь следующие блоки, каждая секция/блок ниже hero обязан создать собственный stacking context, который их перекроет. Шаблон такой:
<section class="relative z-10 bg-bg ...">
...
</section>Так уже сделаны все основные секции: #about-training (bg-panel),
#video (bg-black), #examples (bg-bg), #offer-stats
(фон-картинка + overlay), плюс концевой воздушный <div> после offer-stats.
- На корневом элементе блока —
relative z-10. - Непрозрачный
bg-*(неbg-*/NN, не прозрачный градиент без подложки). Прозрачный/полупрозрачный фон = fixed-небо, Денис и гора снова видны. Небо кроет весь экран, поэтому дыру в фоне теперь видно в любой точке блока, а не только в углах. - Если блок — это просто воздух/разделитель, всё равно нужны
z-10+bg-*, иначе сквозь него «выстреливают» fixed-слои (этот баг уже ловили). - Иконки/декор внутри блока с
position: absoluteотносительно self — нормально, они в stacking context секции.
<div class="h-12">безz-10и фона после offer-stats / любой секции.- Снятие
z-10с секции «для экономии» — fixed-слои сразу проступают. - Назначение
z-indexнебу, Денису или горе — ломаетmix-blend-differenceв hero. - Снятие
mix-blend-multiplyс горы — её белое поле проступит поверх неба.