/* ==========================================================================
   Песновея — страницы поводов, сценариев и руководства
   /occasion/*, /use-case/*, /genre/*, /guides и /guides/*.

   Подключается после showcase.css и опирается на его токены (--home-*)
   и блоки: первый экран с пятнами, форма идеи, полоса оплаты, карточки
   песен и поводов, шаги мастера, вопросы, финальный призыв. Здесь — только
   то, чего у главной нет: крошки, большой рисунок повода с нотами,
   карточки брифа, компактные шаги в строку, статья руководства.

   Правила те же, что у главной: цвета — токены, коралловый не бывает
   цветом текста на светлом; движение — только transform и opacity, только
   с классами от home.js (hp-motion — разовое, hp-loop — петли под кнопкой
   «Остановить анимацию»); без скрипта и при просьбе обходиться без
   движения страница полна и неподвижна.
   ========================================================================== */

/* Оттенок страницы — от повода: диск под рисунком, карточки брифа. */
.landing {
    --landing-tint: var(--home-tint-violet);
    --landing-shape: var(--home-shape-violet);
}

.landing--coral { --landing-tint: var(--home-tint-coral); --landing-shape: var(--brand-coral); }
.landing--violet { --landing-tint: var(--home-tint-violet); --landing-shape: var(--home-shape-violet); }
.landing--sun { --landing-tint: var(--home-tint-sun); --landing-shape: var(--home-sun); }
.landing--pink { --landing-tint: var(--home-tint-pink); --landing-shape: var(--home-pink); }
.landing--mint { --landing-tint: var(--home-tint-mint); --landing-shape: #2f9e6a; }

/* --- Первый экран ---------------------------------------------------------- */

/* Крошки (.crumbs) — в app.css: они есть и на страницах без
   этого файла — тарифах, примерах, песне, документах. */

.landing-hero__title {
    max-width: 18ch;
}

/* Что мастер откроет выбранным — рядом с кнопкой, словами. Повод и вид
   уходят скрытыми полями, и без этой строки о них никто бы не знал. */
.landing-idea__preset {
    display: flex;
    flex: 1 1 15rem;
    align-items: center;
    gap: 0.5rem;
    min-height: 2.75rem;
    margin: 0;
    padding: 0.5rem 0.875rem;
    border: 1px solid var(--home-line);
    border-radius: 14px;
    background: var(--home-paper);
    font-size: 0.875rem;
    line-height: 1.35;
    color: var(--color-text);
}

.landing-idea__check {
    flex: none;
    width: 1.125rem;
    height: 1.125rem;
    fill: none;
    stroke: var(--color-success);
    stroke-width: 2.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* Рисунок повода: цветной диск, пунктирное кольцо, большой значок и ноты
   вокруг. Размер — от ширины колонки, пропорции держит aspect-ratio. */
.landing-hero__visual {
    display: grid;
    justify-items: center;
    gap: 0.75rem;
}

.landing-art {
    position: relative;
    width: min(100%, 25rem);
    aspect-ratio: 1 / 1;
}

.landing-art__disc,
.landing-art__ring,
.landing-art__figure {
    position: absolute;
    border-radius: 50%;
}

.landing-art__disc {
    inset: 7%;
    background:
        radial-gradient(circle at 32% 26%, var(--home-surface) 0%, rgba(255, 255, 255, 0) 46%),
        radial-gradient(circle at 50% 50%, var(--landing-tint) 0%, var(--landing-tint) 62%, var(--home-surface) 100%);
    box-shadow: var(--home-shadow-lg), inset 0 0 0 1px var(--home-line);
}

.landing-art__ring {
    inset: 0;
    border: 2px dashed var(--home-line-strong);
    opacity: 0.8;
}

.landing-art__figure {
    inset: 19%;
    display: grid;
    place-items: center;
}

.landing-art__icon {
    display: block;
    width: 100%;
    height: 100%;
    filter: drop-shadow(0 18px 22px rgba(49, 22, 120, 0.2));
}

/* Толщина линий значка рассчитана на 48 px; в полный рост она вырастает
   впятеро и выглядела бы рисунком маркером. */
.landing-art__icon .si-paper,
.landing-art__icon .si-line { stroke-width: 1.2; }
.landing-art__icon .si-line--thin { stroke-width: 1; }
.landing-art__icon .si-cream { stroke-width: 1.5; }
.landing-art__icon .si-cream--bold { stroke-width: 2.2; }
.landing-art__icon .si-string { stroke-width: 1.1; }
.landing-art__icon .si-shine { stroke-width: 1.4; }
.landing-art__icon .si-stem { stroke-width: 1.8; }
.landing-art__icon .si-waves { stroke-width: 1.6; }
.landing-art__icon .si-ring { stroke-width: 3; }

/* Ноты вокруг рисунка. Внешний элемент двигает home.js (прокрутка и
   курсор), внутренний — покачивание в CSS: одно свойство transform на
   один элемент. */
.landing-note {
    position: absolute;
    display: block;
    width: 3rem;
    height: 3rem;
}

.landing-note__glyph {
    display: block;
    width: 100%;
    height: 100%;
    fill: var(--home-shape-violet);
    filter: drop-shadow(0 8px 10px rgba(49, 22, 120, 0.18));
}

.landing-note--1 { top: 4%; left: 2%; }
.landing-note--2 { top: 30%; right: -3%; width: 2.5rem; height: 2.5rem; }
.landing-note--2 .landing-note__glyph { fill: var(--brand-coral); }
.landing-note--3 { top: -2%; right: 16%; width: 2.25rem; height: 2.25rem; }
.landing-note--3 .landing-note__glyph { fill: var(--home-sun); }
.landing-note--4 { bottom: 8%; left: -2%; width: 2.5rem; height: 2.5rem; }
.landing-note--4 .landing-note__glyph { fill: var(--brand-coral); }
.landing-note--5 { right: 6%; bottom: 2%; width: 2rem; height: 2rem; }
.landing-note--5 .landing-note__glyph { fill: var(--home-sun); }

/* Телефон: рисунок — после формы и меньше, как макет на главной: первым
   экраном остаются заголовок и поле идеи. */
@media (max-width: 59.99rem) {
    .landing-art {
        width: min(72%, 17rem);
    }

    .landing-note {
        width: 2.25rem;
        height: 2.25rem;
    }

    .landing-note--2,
    .landing-note--4 {
        width: 1.875rem;
        height: 1.875rem;
    }

    .landing-note--3,
    .landing-note--5 {
        width: 1.625rem;
        height: 1.625rem;
    }
}

@media (min-width: 60rem) {
    .landing-hero__grid {
        align-items: center;
    }
}

/* --- Карточки брифа -------------------------------------------------------- */

/* Абзацы вступления стоят в той же колонке, что вводный абзац других
   разделов. */
.landing-brief__lead p {
    margin: 0 0 0.75rem;
}

.landing-brief__lead p:last-child {
    margin-bottom: 0;
}

/* Колонки заданы явно, по числу карточек, а не auto-fit: при auto-fit
   три карточки на планшете вставали два плюс одна, и половина последней
   строки пустовала. Три — строкой на широком экране; остальные — в две
   колонки, и нечётная последняя карточка встаёт на всю строку. В четверти
   ширины абзац рассыпался бы на десяток коротких строк, поэтому четыре и
   больше — два на два с номером слева. */
.landing-cards {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 1rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

@media (min-width: 40rem) {
    .landing-cards {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .landing-cards > .landing-card:last-child:nth-child(odd) {
        grid-column: 1 / -1;
    }
}

@media (min-width: 48rem) {
    .landing-cards--2 .landing-card,
    .landing-cards--4 .landing-card,
    .landing-cards--5 .landing-card,
    .landing-cards > .landing-card:last-child:nth-child(odd) {
        display: grid;
        grid-template-columns: auto minmax(0, 1fr);
        column-gap: 1.5rem;
        align-content: start;
    }

    .landing-cards--2 .landing-card__num,
    .landing-cards--4 .landing-card__num,
    .landing-cards--5 .landing-card__num,
    .landing-cards > .landing-card:last-child:nth-child(odd) .landing-card__num {
        grid-row: 1 / span 4;
        margin: 0;
    }
}

@media (min-width: 60rem) {
    .landing-cards--3 {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .landing-cards--3 > .landing-card:last-child:nth-child(odd) {
        display: flex;
        grid-column: auto;
    }

    .landing-cards--3 > .landing-card:last-child:nth-child(odd) .landing-card__num {
        grid-row: auto;
        margin-bottom: 1.25rem;
    }
}

/* Карточка: номер крупно в углу, заголовок, абзацы. Пастель сверху уходит
   в цвет карточки — под текстом фон уже ровный. */
.landing-card {
    --card-tint: var(--home-tint-coral);
    position: relative;
    display: flex;
    flex-direction: column;
    padding: 1.5rem 1.375rem 1.375rem;
    overflow: hidden;
    border: 1px solid var(--home-line);
    border-radius: var(--home-radius);
    background-color: var(--home-surface);
    background-image: linear-gradient(170deg, var(--card-tint) 0%, var(--card-tint) 14%, rgba(255, 255, 255, 0) 52%);
    transition: transform 0.4s var(--home-ease), box-shadow 0.4s var(--home-ease), border-color 0.3s ease;
}

.landing-card--2 { --card-tint: var(--home-tint-violet); }
.landing-card--3 { --card-tint: var(--home-tint-sun); }
.landing-card--4 { --card-tint: var(--home-tint-pink); }

.landing-card:hover {
    border-color: var(--home-line-strong);
    box-shadow: var(--home-shadow);
    transform: translateY(-4px);
}

.landing-card__num {
    display: block;
    margin-bottom: 1.25rem;
    font-size: 2.75rem;
    font-weight: 800;
    line-height: 0.9;
    letter-spacing: -0.05em;
    font-variant-numeric: tabular-nums;
    /* Контурные цифры: заливка прозрачная, но сам цвет текста —
       акцентный. Его видят браузеры без обводки букв, режим высокой
       контрастности и проверка контраста. */
    color: var(--home-accent);
}

@supports (-webkit-text-stroke: 1px black) {
    .landing-card__num {
        -webkit-text-fill-color: transparent;
        -webkit-text-stroke: 1.5px var(--home-accent);
    }
}

@media (forced-colors: active) {
    .landing-card__num {
        -webkit-text-fill-color: currentColor;
    }
}

.landing-card__title {
    margin: 0 0 0.625rem;
    font-size: 1.1875rem;
    font-weight: 720;
    line-height: 1.3;
    letter-spacing: -0.015em;
}

.landing-card__text {
    margin: 0 0 0.625rem;
    font-size: 0.9375rem;
    line-height: 1.6;
    color: var(--color-text-muted);
}

.landing-card__text:last-child {
    margin-bottom: 0;
}

.landing-up {
    margin: 2.25rem 0 0;
    text-align: center;
}

.landing-up__button {
    border-radius: 14px;
    font-weight: 650;
}

.landing-up__button svg {
    width: 1.25rem;
    height: 1.25rem;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-linejoin: round;
    transition: transform 0.3s var(--home-ease);
}

.landing-up__button:hover svg {
    transform: translateY(-3px);
}

/* Поле идеи — цель кнопки «Описать идею ↑»: над ним остаются видны
   шапка, подпись и подсказки. */
.landing .home-idea__input {
    scroll-margin-top: 12.5rem;
}

/* --- Песни с этим поводом -------------------------------------------------- */

/* Песен меньше трёх — карточки не растягиваются на всю строку: одна
   обложка шириной в экран выглядела бы плакатом. Три (или шесть — больше
   контроллер не отдаёт) — по три в строку уже на планшете: в две колонки
   третья обложка стояла бы одна на полстроки. */
@media (min-width: 48rem) {
    .landing-songs--1 {
        grid-template-columns: minmax(0, 22rem);
    }

    .landing-songs--2 {
        grid-template-columns: repeat(2, minmax(0, 22rem));
    }

    .landing-songs--3 {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

/* --- Как это работает: шаги строкой ---------------------------------------- */

/* На широком экране четыре карточки в ряд, картинка — шапкой. Без
   липкого макета мастера, как на главной: здесь шаги — напоминание, а не
   рассказ. */
.landing-steps .home-step {
    align-content: start;
}

@media (min-width: 60rem) {
    .landing-steps {
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 1rem;
    }

    .landing-steps .home-step {
        grid-template-columns: minmax(0, 1fr);
        grid-template-areas: "art" "num" "title" "text";
        grid-template-rows: auto auto auto 1fr;
        padding: 1rem;
    }

    .landing-steps .home-step__art {
        margin-bottom: 0.875rem;
    }

    .landing-steps .home-step__text {
        margin-top: 0;
    }

    /* В четверти ширины «Подтверждение» кеглем главной не помещалось
       и рвалось посреди слова. */
    .landing-steps .home-step__title {
        font-size: 1.1875rem;
    }
}

/* --- Соседние поводы и оговорка -------------------------------------------- */

.landing-others .home-occasion__text {
    display: -webkit-box;
    overflow: hidden;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
}

/* Сетка — по числу карточек (класс ставит шаблон), а не auto-fill: три
   соседних сценария на планшете вставали два плюс один. Две колонки;
   число делится на три — на широком экране три. Нечётное — в две колонки
   последняя карточка занимает всю строку и лежит в ней, как на телефоне:
   значок слева, текст справа. */
@media (min-width: 40rem) {
    .landing-others {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .landing-others--odd > :last-child {
        grid-column: 1 / -1;
    }

    .landing-others--odd > :last-child .home-occasion__link {
        display: grid;
        grid-template-columns: 3.5rem minmax(0, 1fr);
        column-gap: 1.25rem;
        align-content: start;
    }

    .landing-others--odd > :last-child .home-occasion__icon {
        grid-row: 1 / span 3;
        margin: 0;
    }
}

@media (min-width: 60rem) {
    .landing-others--thirds {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .landing-others--thirds > :last-child {
        grid-column: auto;
    }

    .landing-others--thirds > :last-child .home-occasion__link {
        display: flex;
    }

    .landing-others--thirds > :last-child .home-occasion__icon {
        grid-row: auto;
        margin-bottom: 1rem;
    }
}

.landing-legal {
    padding-block: 0 2.5rem;
    background: var(--color-bg);
}

.landing-legal p {
    max-width: 46rem;
    margin: 0;
    padding-top: 1.5rem;
    border-top: 1px solid var(--home-line);
    font-size: 0.875rem;
    line-height: 1.6;
    color: var(--color-text-muted);
}

/* --- Подробнее: связный текст перед финальным призывом -------------------- */

/* Заголовок длиннее заголовков других разделов — в нём главный запрос
   страницы, — поэтому он мельче и шире: в 20ch он вставал бы в четыре
   строки. Колонка текста — около 68 знаков, как в руководствах. */
.landing-seo__title {
    max-width: 28ch;
    font-size: clamp(1.625rem, 1.1rem + 1.8vw, 2.375rem);
}

.landing-seo__text {
    max-width: 68ch;
    font-size: 1.0625rem;
    line-height: 1.75;
}

.landing-seo__text p {
    margin: 0 0 1.125rem;
}

.landing-seo__text p:last-child {
    margin-bottom: 0;
}

.landing-seo__subtitle {
    margin: 2.25rem 0 0.75rem;
    font-size: clamp(1.25rem, 1.1rem + 0.6vw, 1.5rem);
    font-weight: 750;
    line-height: 1.25;
    letter-spacing: -0.02em;
}

/* Кремовый раздел уже заканчивается линией — вторая линия над оговоркой
   о правах легла бы прямо под ней. */
.landing-seo + .landing-legal p {
    border-top: 0;
}

/* --- Руководство ----------------------------------------------------------- */

.guide-hero {
    padding-bottom: clamp(2.5rem, 1.5rem + 3vw, 4rem);
}

/* Фон первого экрана рассчитан на тёмную полосу оплаты под ним: центр
   фиолетового пятна стоит ровно на нижнем крае, и полоса закрывает место,
   где пятно обрезано. У руководств полосы нет, под первым экраном — белый
   раздел, и обрезанное пятно читалось резкой горизонтальной границей.
   Здесь фон сам сходит на нет к нижнему краю. */
.guide-hero .home-hero__backdrop {
    -webkit-mask-image: linear-gradient(180deg, #000 45%, transparent 100%);
    mask-image: linear-gradient(180deg, #000 45%, transparent 100%);
}

/* На главной нотный стан проходит за сплошной карточкой формы, а в
   руководстве — за абзацем под заголовком, и линии через буквы снижали
   контраст текста. В две колонки стан проявляется только правее текста,
   за рисунком; в одну колонку рисунок стоит под текстом, и стан за ним. */
@media (min-width: 60rem) {
    .guide-hero .home-hero__staff {
        -webkit-mask-image: linear-gradient(90deg, transparent 55%, #000 75%);
        mask-image: linear-gradient(90deg, transparent 55%, #000 75%);
    }
}

.guide-hero__title {
    max-width: 20ch;
}

.guide-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin: 0;
}

.guide-meta__item {
    display: inline-flex;
    align-items: center;
    min-height: 2rem;
    padding: 0 0.875rem;
    border: 1px solid var(--home-line);
    border-radius: var(--radius-full);
    background: var(--home-surface);
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--color-text);
}

.landing-art--small {
    width: min(100%, 20rem);
}

@media (max-width: 59.99rem) {
    .landing-art--small {
        width: min(60%, 14rem);
    }
}

/* Колонка текста — около 68 знаков: длиннее строку глаз теряет при
   переходе на следующую. Оглавление на широком экране липнет слева. */
.guide-body {
    display: grid;
    gap: 2rem;
    padding-block: clamp(2.5rem, 1.5rem + 3vw, 4.5rem);
}

@media (min-width: 64rem) {
    .guide-body {
        grid-template-columns: 15rem minmax(0, 68ch);
        justify-content: center;
        align-items: start;
        gap: 4rem;
    }

    .guide-toc {
        position: sticky;
        top: 6rem;
    }
}

.guide-toc {
    padding: 1.25rem 1.25rem 1rem;
    border: 1px solid var(--home-line);
    border-radius: var(--home-radius);
    background: var(--home-paper);
}

.guide-toc__kicker {
    margin-bottom: 0.75rem;
}

.guide-toc__list {
    display: grid;
    gap: 0.125rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.guide-toc__link {
    display: flex;
    gap: 0.625rem;
    align-items: baseline;
    min-height: 2.25rem;
    padding: 0.375rem 0;
    font-size: 0.9375rem;
    font-weight: 600;
    line-height: 1.35;
    color: var(--color-text);
    text-decoration: none;
}

.guide-toc__link:hover {
    color: var(--home-accent);
    text-decoration: underline;
    text-underline-offset: 0.2em;
}

.guide-toc__num {
    flex: none;
    font-size: 0.8125rem;
    font-weight: 750;
    font-variant-numeric: tabular-nums;
    color: var(--home-accent);
}

.guide-article {
    min-width: 0;
    max-width: 68ch;
    font-size: 1.0625rem;
    line-height: 1.75;
}

.guide-article p {
    margin: 0 0 1.125rem;
}

.guide-article__lead {
    font-size: 1.1875rem;
    color: var(--color-text);
}

.guide-section {
    scroll-margin-top: 6rem;
}

.guide-section + .guide-section {
    margin-top: 2.75rem;
}

.guide-section__title {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.25rem 0.875rem;
    margin: 0 0 1rem;
    font-size: clamp(1.375rem, 1.15rem + 0.9vw, 1.75rem);
    font-weight: 780;
    line-height: 1.2;
    letter-spacing: -0.025em;
}

.guide-section__num {
    font-size: 0.875rem;
    font-weight: 750;
    letter-spacing: 0.1em;
    font-variant-numeric: tabular-nums;
    color: var(--home-accent);
}

/* Тёмная карточка с призывом — после текста статьи и внизу списка. */
.guide-cta {
    display: grid;
    gap: 1.25rem 2rem;
    align-items: center;
    margin-top: clamp(2.5rem, 2rem + 2vw, 3.5rem);
    padding: clamp(1.5rem, 1rem + 2vw, 2.25rem);
    border-radius: 24px;
    background-color: var(--brand-ink);
    background-image: var(--home-night);
    color: var(--home-on-night);
}

@media (min-width: 40rem) {
    .guide-cta {
        grid-template-columns: minmax(0, 1fr) auto;
    }
}

.guide-cta__title {
    margin: 0 0 0.375rem;
    font-size: clamp(1.375rem, 1.1rem + 1vw, 1.75rem);
    font-weight: 750;
    line-height: 1.2;
    letter-spacing: -0.02em;
    color: var(--home-on-night);
}

.guide-article .guide-cta__text,
.guide-cta__text {
    margin: 0;
    font-size: 1rem;
    line-height: 1.6;
    color: var(--home-on-night-muted);
}

/* Кнопки — столбиком одной ширины: у руководства их две (мастер и
   Студия), и рядом они теснили бы текст карточки. */
.guide-cta__actions {
    display: grid;
    gap: 0.75rem;
    margin: 0;
}

.guide-cta :focus-visible {
    outline-color: #ffffff;
}

.guide-index-cta {
    padding-bottom: clamp(3rem, 2rem + 4vw, 5rem);
}

.guide-list-section {
    padding-top: clamp(2.5rem, 1.5rem + 3vw, 4rem);
}

/* Руководств немного, и каждое — статья, а не карточка повода: две в
   строку, крупнее. */
.guide-cards {
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
    gap: 1.25rem;
}

/* Крупный значок и просторные поля — только там, где карточка стоит
   столбиком. На телефоне карточка — строкой со значком слева в колонке
   3rem, с полями карточки повода (showcase.css): значок в 4.5rem вылезал
   из колонки на заголовок и текст, а широкие поля сжимали текст до пары
   слов в строке. */
@media (min-width: 40rem) {
    .guide-card {
        padding: clamp(1.5rem, 1rem + 1.5vw, 2.25rem);
    }

    .guide-card__icon {
        width: 4.5rem;
        height: 4.5rem;
    }
}

.guide-card__title {
    font-size: clamp(1.25rem, 1.1rem + 0.6vw, 1.5rem);
}

.guide-empty {
    display: grid;
    justify-items: start;
    gap: 1rem;
    max-width: 36rem;
    padding: 2rem;
    border: 1px dashed var(--home-line-strong);
    border-radius: var(--home-radius);
    background: var(--home-paper);
}

.guide-empty p {
    margin: 0;
}

/* ==========================================================================
   Движение. Всё ниже работает только с классами от home.js.
   ========================================================================== */

/* Рисунок появляется с отскоком, затем плавно парит; кольцо медленно
   вращается, ноты покачиваются. Парение и вращение — петли: их снимает
   кнопка «Остановить анимацию». */
.hp-motion .landing-hero .landing-art__icon {
    animation: landing-pop 0.9s var(--home-bounce) 0.15s backwards;
}

.hp-motion .landing-hero .landing-note__glyph {
    animation: landing-pop 0.7s var(--home-bounce) 0.45s backwards;
}

.hp-loop .landing-hero.is-live .landing-art__icon {
    animation: landing-pop 0.9s var(--home-bounce) 0.15s backwards, landing-float 6s ease-in-out 1.1s infinite alternate;
}

.hp-loop .landing-hero.is-live .landing-art__ring {
    animation: landing-spin 48s linear infinite;
}

.hp-loop .landing-hero.is-live .landing-note__glyph {
    animation: landing-pop 0.7s var(--home-bounce) 0.45s backwards, landing-bob 4.6s ease-in-out 1.2s infinite alternate;
}

.hp-loop .landing-hero.is-live .landing-note--2 .landing-note__glyph { animation-delay: 0.55s, -1.4s; }
.hp-loop .landing-hero.is-live .landing-note--3 .landing-note__glyph { animation-delay: 0.6s, -2.6s; }
.hp-loop .landing-hero.is-live .landing-note--4 .landing-note__glyph { animation-delay: 0.65s, -0.8s; }
.hp-loop .landing-hero.is-live .landing-note--5 .landing-note__glyph { animation-delay: 0.7s, -3.3s; }

/* Карточки брифа появляются лесенкой — правило для «.reveal > li» уже
   в showcase.css; здесь только номер, который «прочерчивается». */
.has-reveal .landing-cards.reveal:not(.is-visible) .landing-card__num {
    opacity: 0;
}

.has-reveal .landing-cards.reveal.is-visible .landing-card__num {
    animation: landing-num 0.8s var(--home-ease) 0.25s backwards;
}

@keyframes landing-pop {
    from { opacity: 0; transform: scale(0.6) rotate(-8deg); }
    to { opacity: 1; transform: none; }
}

@keyframes landing-float {
    from { transform: translateY(-6px) rotate(-2deg); }
    to { transform: translateY(6px) rotate(2deg); }
}

@keyframes landing-bob {
    from { transform: translateY(-6px) rotate(-8deg); }
    to { transform: translateY(6px) rotate(8deg); }
}

@keyframes landing-spin {
    to { transform: rotate(360deg); }
}

@keyframes landing-num {
    from { opacity: 0; transform: translateY(0.75rem); }
    to { opacity: 1; transform: none; }
}

/* --- Тёмная тема ----------------------------------------------------------- */

@media (prefers-color-scheme: dark) {
    :where(:root:not([data-theme="light"])) .landing-art__disc {
        background:
            radial-gradient(circle at 32% 26%, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0) 46%),
            radial-gradient(circle at 50% 50%, var(--landing-tint) 0%, var(--landing-tint) 62%, var(--home-surface) 100%);
    }

    :where(:root:not([data-theme="light"])) .landing-art__icon,
    :where(:root:not([data-theme="light"])) .landing-note__glyph {
        filter: drop-shadow(0 14px 18px rgba(0, 0, 0, 0.45));
    }

    :where(:root:not([data-theme="light"])) .landing-card {
        background-image: linear-gradient(170deg, var(--card-tint) 0%, var(--card-tint) 14%, rgba(29, 31, 44, 0) 52%);
    }
}

/* То же для тёмной темы, выбранной переключателем в шапке. */
:where(:root[data-theme="dark"]) .landing-art__disc {
    background:
        radial-gradient(circle at 32% 26%, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0) 46%),
        radial-gradient(circle at 50% 50%, var(--landing-tint) 0%, var(--landing-tint) 62%, var(--home-surface) 100%);
}

:where(:root[data-theme="dark"]) .landing-art__icon,
:where(:root[data-theme="dark"]) .landing-note__glyph {
    filter: drop-shadow(0 14px 18px rgba(0, 0, 0, 0.45));
}

:where(:root[data-theme="dark"]) .landing-card {
    background-image: linear-gradient(170deg, var(--card-tint) 0%, var(--card-tint) 14%, rgba(29, 31, 44, 0) 52%);
}

/* --- Просьба не двигать интерфейс (§18) ------------------------------------ */

/* Общая страховка (.landing * без анимаций) — в showcase.css; здесь
   подъём карточек при наведении и появление номеров. */
@media (prefers-reduced-motion: reduce) {
    .landing-card:hover,
    .landing-up__button:hover svg {
        transform: none;
    }

    .has-reveal .landing-cards.reveal:not(.is-visible) .landing-card__num {
        opacity: 1;
    }
}

@media print {
    .has-reveal .landing-cards.reveal:not(.is-visible) .landing-card__num {
        opacity: 1 !important;
    }

    .landing-art,
    .landing-up {
        display: none !important;
    }
}
