/*
 * PageBlocks - вёрстка стартового набора блоков.
 *
 * Отдельный файл от pb.blocks.css, и это не произвол. pb.blocks.css - контракт,
 * на который опирается ЛЮБОЙ блок: токены, ширина колонки, вертикальный ритм
 * секций. Тема, которая перевёрстывает поставочные блоки под себя, контракт при
 * этом сохраняет - её собственные блоки продолжают становиться в тот же ритм.
 * Лежали бы они в одном файле, отказ от нашей вёрстки уносил бы и ритм.
 *
 * Своей палитры файл не приносит: все цвета выведены из currentColor через
 * токены, то есть блок берёт цвет текста темы. Шрифты, кнопки и типографику не
 * трогает вовсе - это территория темы, и драться с ней на каждой странице
 * значило бы проиграть на первом же сайте.
 *
 * Всё лежит в @layer pageblocks: неслоёное правило темы сильнее любого слоя, и
 * переопределить здесь что угодно можно из своего css, не правя этот файл.
 * Обновление компонента его перезапишет, тему не тронет.
 */

@layer pageblocks {
    /* ----------------------------------------------------------------
     * Фон секции
     *
     * Три градации одного приёма, а не три цвета: подложка и акцент - это
     * процент от currentColor, поэтому они работают и на светлой теме, и на
     * тёмной, и инвертировать текст на них не нужно. Настоящий фирменный цвет
     * тема ставит сама, переопределив --pb-surface / --pb-surface-strong.
     * ---------------------------------------------------------------- */
    .pb-page {
        --pb-surface-strong: color-mix(in srgb, currentColor 12%, transparent);
    }

    .pb-tone--surface {
        background: var(--pb-surface);
    }

    .pb-tone--accent {
        background: var(--pb-surface-strong);
    }

    /* ----------------------------------------------------------------
     * Сетка: общая у карточек и галереи
     *
     * Число колонок приходит из поля блока, поэтому классов ровно три. auto-fit
     * здесь не подходит: редактор выбирает «три колонки» и ждёт три, а не
     * столько, сколько уместилось.
     * ---------------------------------------------------------------- */
    .pb-grid--2,
    .pb-grid--3,
    .pb-grid--4 {
        display: grid;
        gap: var(--pb-gap);
        margin: 0;
        padding: 0;
        list-style: none;
    }

    .pb-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .pb-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .pb-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

    /* minmax(0, 1fr), а не 1fr: иначе длинное слово или широкая картинка в
       карточке растягивает колонку и сетка перестаёт быть равномерной. */

    /* ----------------------------------------------------------------
     * Обложка
     * ---------------------------------------------------------------- */
    .pb-hero__inner {
        display: grid;
        gap: var(--pb-gap);
        align-items: center;
    }

    /* Две колонки появляются, только когда есть картинка: без неё
       .pb-hero__media в разметке отсутствует, и :has() это видит. Так один
       шаблон обслуживает оба случая. */
    .pb-hero__inner:has(.pb-hero__media) {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .pb-hero--reverse .pb-hero__body {
        order: 2;
    }

    .pb-hero--center .pb-hero__inner,
    .pb-hero--center .pb-hero__inner:has(.pb-hero__media) {
        grid-template-columns: minmax(0, 1fr);
        justify-items: center;
        text-align: center;
    }

    .pb-hero__subtitle {
        color: var(--pb-muted);
    }

    .pb-hero__image {
        display: block;
        width: 100%;
        height: auto;
        border-radius: var(--pb-radius);
    }

    /* ----------------------------------------------------------------
     * Текст
     * ---------------------------------------------------------------- */
    .pb-richtext__content > :first-child {
        margin-block-start: 0;
    }

    .pb-richtext__content > :last-child {
        margin-block-end: 0;
    }

    /* Картинка и таблица внутри размеченного текста не вылезают из колонки:
       редактор вставляет их из медиатеки в натуральном размере. */
    .pb-richtext__content img {
        max-width: 100%;
        height: auto;
        border-radius: var(--pb-radius);
    }

    .pb-richtext__content table {
        width: 100%;
        border-collapse: collapse;
    }

    /* ----------------------------------------------------------------
     * Карточки
     * ---------------------------------------------------------------- */
    .pb-cards__intro,
    .pb-gallery__title + *,
    .pb-cards__title + * {
        margin-block-start: 0;
    }

    .pb-cards__intro {
        max-width: var(--pb-content-narrow);
        color: var(--pb-muted);
    }

    .pb-cards__grid,
    .pb-gallery__grid {
        margin-block-start: var(--pb-gap);
    }

    .pb-card {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
        padding: var(--pb-gap);
        border: var(--pb-border);
        border-radius: var(--pb-radius);
        background: var(--pb-surface);
    }

    /* Карточка-ссылка целиком: кликают туда, куда навели, а не в одну строчку
       внизу. Подчёркивание и цвет остаются от темы - здесь только снимается
       разрыв между картинкой и текстом внутри одной ссылки. */
    .pb-card__link {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
        color: inherit;
        text-decoration: none;
    }

    .pb-card__image {
        display: block;
        width: 100%;
        height: auto;
        border-radius: calc(var(--pb-radius) / 2);
    }

    .pb-card__title {
        margin: 0;
    }

    .pb-card__text {
        margin: 0;
        color: var(--pb-muted);
    }

    /* Ссылка прижата к низу: у карточек с разным объёмом текста «Подробнее»
       иначе стоит на разной высоте и сетка выглядит рваной. */
    .pb-card__more {
        margin-block-start: auto;
    }

    /* ----------------------------------------------------------------
     * Галерея
     * ---------------------------------------------------------------- */
    .pb-gallery__figure {
        margin: 0;
    }

    .pb-gallery__image {
        display: block;
        width: 100%;
        height: auto;
        border-radius: var(--pb-radius);
    }

    .pb-gallery__caption {
        margin-block-start: 0.5rem;
        color: var(--pb-muted);
        font-size: 0.875em;
    }

    /* ----------------------------------------------------------------
     * Вопросы и ответы
     *
     * На <details>/<summary>: раскрытие, фокус с клавиатуры и поиск по странице
     * браузером работают без строки JS.
     * ---------------------------------------------------------------- */
    .pb-faq__list {
        margin-block-start: var(--pb-gap);
        border-block-start: var(--pb-border);
    }

    .pb-faq__item {
        border-block-end: var(--pb-border);
    }

    .pb-faq__question {
        display: flex;
        gap: var(--pb-gap);
        align-items: baseline;
        justify-content: space-between;
        padding-block: 1rem;
        cursor: pointer;
        font-weight: 600;
    }

    /* Свой маркер вместо треугольника браузера: ::marker у summary правится не
       во всех движках, а list-style: none снимает его везде. */
    .pb-faq__question {
        list-style: none;
    }

    .pb-faq__question::-webkit-details-marker {
        display: none;
    }

    .pb-faq__question::after {
        content: '+';
        flex: none;
        color: var(--pb-muted);
        font-weight: 400;
        line-height: 1;
    }

    .pb-faq__item[open] > .pb-faq__question::after {
        content: '−';
    }

    .pb-faq__answer {
        padding-block-end: 1rem;
    }

    .pb-faq__answer > :first-child {
        margin-block-start: 0;
    }

    .pb-faq__answer > :last-child {
        margin-block-end: 0;
    }

    /* ----------------------------------------------------------------
     * Призыв к действию
     * ---------------------------------------------------------------- */
    .pb-cta__inner {
        display: flex;
        gap: var(--pb-gap);
        flex-wrap: wrap;
        align-items: center;
        justify-content: space-between;
    }

    .pb-cta__title {
        margin: 0;
    }

    .pb-cta__text {
        margin-block-end: 0;
        color: var(--pb-muted);
    }

    .pb-cta__actions {
        display: flex;
        gap: 0.75rem;
        flex-wrap: wrap;
        align-items: center;
    }

    /* ----------------------------------------------------------------
     * Отступ
     *
     * Высоту несёт сам блок, а не padding секции: секция погашена --flush,
     * иначе ритм складывался бы из двух источников и не поддавался счёту.
     * ---------------------------------------------------------------- */
    .pb-spacer--sm { block-size: calc(var(--pb-section-gap) / 2); }
    .pb-spacer--md { block-size: var(--pb-section-gap); }
    .pb-spacer--lg { block-size: calc(var(--pb-section-gap) * 1.5); }

    /* Линия ровно посередине отступа. */
    .pb-spacer:has(.pb-spacer__line) {
        display: grid;
        align-content: center;
    }

    .pb-spacer__line {
        margin: 0;
        border: 0;
        border-block-start: var(--pb-border);
    }

    /* ----------------------------------------------------------------
     * Узкие экраны
     *
     * Один порог, тот же, что у токенов в pb.blocks.css. Сетки сворачиваются в
     * одну колонку, двухколоночная обложка - тоже: картинка рядом с текстом на
     * 375px не помещается ни в каком виде.
     * ---------------------------------------------------------------- */
    @media (max-width: 48rem) {
        .pb-grid--2,
        .pb-grid--3,
        .pb-grid--4,
        .pb-hero__inner:has(.pb-hero__media) {
            grid-template-columns: minmax(0, 1fr);
        }

        .pb-hero--reverse .pb-hero__body {
            order: 0;
        }

        .pb-cta__inner {
            flex-direction: column;
            align-items: flex-start;
        }
    }

    /* Промежуточная ширина: четыре колонки на планшете нечитаемы, две - в
       самый раз. Три оставлены как есть - они на 768px ещё держатся. */
    @media (min-width: 48.0625rem) and (max-width: 64rem) {
        .pb-grid--4 {
            grid-template-columns: repeat(2, minmax(0, 1fr));
        }
    }
}
