/* =============================================
   reviews.css — раздел отзывов (/review, /ro/review).

   Подключается вместе с pages.css и опирается на его переменные
   (--pg-accent/--pg-soft), а цвета берёт из :root в base.css. Отдельным
   файлом, а не внутри pages.css: рейтинг с распределением, лайтбокс и
   форма загрузки нужны ровно одной странице из семнадцати, и грузить их
   на «Доставку» или «Конфиденциальность» незачем.

   Раньше все эти правила жили инлайновым <style> прямо в pages/reviews.php
   (≈120 строк): не кэшировались браузером, не проверялись Stylelint и
   дублировались в HTML на каждый заход.
   ============================================= */

/* ---------- СВОДКА РЕЙТИНГА ---------- */

.rv-summary {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 38px;
    align-items: center;
    background: var(--card-bg);
    border: 1px solid var(--border);
    border-radius: 24px;
    padding: 32px 36px;
    box-shadow: var(--shadow);
}

.rv-score {
    text-align: center;
    padding-right: 38px;
    border-right: 1px solid var(--border);
}

.rv-score__num {
    font-family: var(--font-display);
    font-size: 3.5rem;
    font-weight: 800;
    line-height: 1;
    color: var(--pg-accent);
    font-variant-numeric: tabular-nums;
}

.rv-score__of {
    font-size: .8125rem;
    color: var(--text-light);
    margin-top: 2px;
}

.rv-score__stars {
    display: flex;
    justify-content: center;
    gap: 3px;
    margin: 11px 0 8px;
    color: var(--gold);
}

.rv-score__stars svg {
    display: block;
}

.rv-score__count {
    font-size: .875rem;
    color: var(--text-light);
}

.rv-bars {
    display: grid;
    gap: 8px;
}

.rv-bar {
    display: grid;
    grid-template-columns: 44px 1fr 52px;
    align-items: center;
    gap: 13px;
    font-size: .8125rem;
}

.rv-bar__label {
    display: flex;
    align-items: center;
    gap: 4px;
    color: var(--text-light);
    font-variant-numeric: tabular-nums;
}

.rv-bar__label svg {
    color: var(--gold);
}

/* display:block обязателен: <span>/<i> по умолчанию строчные, а строчному
   элементу браузер не применяет ни height, ни width — полосы просто не
   было бы видно (поймано в макете 2026-08-25). */
.rv-bar__track {
    display: block;
    height: 9px;
    background: var(--stone-deep);
    border-radius: 999px;
    overflow: hidden;
}

.rv-bar__fill {
    display: block;
    height: 100%;
    width: var(--rv-w, 0%);
    border-radius: 999px;
    background: linear-gradient(90deg, var(--gold), #D9B87B);
    animation: rvBarGrow .9s cubic-bezier(.4, 0, .2, 1) both;
}

/* Ширину анимируем от нуля до уже проставленной серверной величины
   (--rv-w). Так полоса «наливается» при первом взгляде, но без JS: если
   скрипты отключены, она просто сразу нужной длины. */
@keyframes rvBarGrow {
    from {
        width: 0;
    }

    to {
        width: var(--rv-w, 0%);
    }
}

.rv-bar__val {
    display: block;
    text-align: right;
    color: var(--text-light);
    font-variant-numeric: tabular-nums;
}

@media (max-width: 760px) {
    .rv-summary {
        grid-template-columns: 1fr;
        gap: 24px;
        padding: 26px;
    }

    .rv-score {
        border-right: 0;
        border-bottom: 1px solid var(--border);
        padding: 0 0 22px;
    }
}

/* ---------- ФИЛЬТРЫ ---------- */

.rv-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin: 30px 0 20px;
}

.rv-fchip {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 9px 16px;
    border: 1.5px solid var(--border);
    border-radius: 999px;
    background: var(--card-bg);
    color: var(--text);
    font-size: .875rem;
    text-decoration: none;
    transition: border-color .18s, background .18s, color .18s, transform .18s;
}

.rv-fchip:hover {
    border-color: var(--pg-accent);
    transform: translateY(-1px);
}

.rv-fchip.is-on {
    background: var(--pg-accent);
    border-color: var(--pg-accent);
    color: #fff;
}

.rv-fchip:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

.rv-fchip__n {
    font-size: .75rem;
    opacity: .65;
    font-variant-numeric: tabular-nums;
}

.rv-sep {
    width: 1px;
    height: 24px;
    background: var(--border);
    margin: 0 4px;
}

.rv-hint {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: .8125rem;
    line-height: 1.55;
    color: var(--text-light);
    background: var(--stone-deep);
    border-radius: var(--radius);
    padding: 12px 16px;
    margin-bottom: 22px;
}

.rv-hint svg {
    flex-shrink: 0;
    margin-top: 2px;
    color: var(--pg-accent);
}

/* ---------- СЕТКА КАРТОЧЕК ---------- */

/* Колонки вместо grid: отзывы РАЗНОЙ длины по замыслу (ТЗ: «не делать все
   одинаковыми по структуре»), и в grid короткая карточка растягивалась бы
   до высоты соседней длинной, создавая пустоту. columns укладывает их
   плотно, как в кладке. */
.rv-grid {
    columns: 3 300px;
    column-gap: 20px;
}

.rv-card {
    break-inside: avoid;
    background: var(--card-bg);
    border: 1px solid var(--border);
    border-radius: var(--pg-radius-lg, 20px);
    padding: 22px;
    margin-bottom: 20px;
    box-shadow: var(--shadow);
    transition: transform .28s cubic-bezier(.4, 0, .2, 1), box-shadow .28s, border-color .28s;
}

.rv-card:hover {
    transform: translateY(-4px);
    box-shadow: var(--shadow-hover);
    border-color: transparent;
}

.rv-card__top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 12px;
}

.rv-card__stars {
    display: flex;
    gap: 2px;
    color: var(--gold);
}

.rv-card__stars svg {
    display: block;
}

.rv-card__date {
    font-size: var(--fs-xs);
    color: var(--text-light);
    white-space: nowrap;
}

.rv-card__badges {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 11px;
}

.rv-badge {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: .75rem;
    border-radius: 999px;
    padding: 4px 10px;
    background: var(--pg-soft);
    color: var(--pg-accent);
}

.rv-badge--fit {
    background: #E6F0E8;
    color: #3E6B47;
}

.rv-badge--lang {
    background: var(--stone-deep);
    color: var(--plum-deep);
    font-weight: 700;
    letter-spacing: .04em;
}

.rv-card__text {
    font-size: .9375rem;
    line-height: 1.6;
    color: var(--text);
    margin: 0 0 14px;
}

.rv-card__foot {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
    padding-top: 13px;
    border-top: 1px solid var(--border);
}

.rv-card__name {
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: .05em;
    color: var(--pg-accent);
}

.rv-card__verified {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: var(--fs-xs);
    color: #3E6B47;
}

@media (max-width: 640px) {
    .rv-grid {
        columns: 1;
    }
}

.rv-more {
    display: grid;
    place-items: center;
    margin-top: 32px;
}

/* ---------- ФОТОГРАФИИ ПОКУПАТЕЛЬНИЦ ---------- */

.rv-photos {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    margin-bottom: 14px;
}

.rv-photo {
    width: 66px;
    height: 80px;
    border: 0;
    padding: 0;
    border-radius: 10px;
    overflow: hidden;
    cursor: pointer;
    background: var(--stone-deep);
    transition: transform .25s cubic-bezier(.34, 1.56, .64, 1), box-shadow .25s;
}

.rv-photo:hover {
    transform: scale(1.07);
    box-shadow: 0 6px 16px rgba(43, 30, 39, .22);
}

.rv-photo:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

.rv-photo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* ---------- ПРОСМОТР В ПОЛНЫЙ ЭКРАН ---------- */

.rv-lb {
    position: fixed;
    inset: 0;
    z-index: 300;
    background: rgba(43, 30, 39, .93);
    display: grid;
    place-items: center;
    padding: 24px;
    animation: rvLbIn .22s ease;
}

/* [hidden] на элементе с display:grid не срабатывает — правило UA имеет ту
   же специфичность и проигрывает по порядку. Тот же случай уже разобран
   для .mobile-menu и .search-overlay в base.css. */
.rv-lb[hidden] {
    display: none;
}

@keyframes rvLbIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

.rv-lb__box {
    max-width: 760px;
    width: 100%;
    margin: 0;
    text-align: center;
    animation: rvLbUp .28s cubic-bezier(.34, 1.4, .64, 1);
}

@keyframes rvLbUp {
    from {
        transform: scale(.95) translateY(12px);
    }

    to {
        transform: none;
    }
}

.rv-lb__box img {
    max-width: 100%;
    max-height: 78vh;
    border-radius: 16px;
    display: block;
    margin: 0 auto;
}

.rv-lb__cap {
    color: rgba(255, 255, 255, .82);
    font-size: .8125rem;
    letter-spacing: .05em;
    margin-top: 14px;
}

.rv-lb__close,
.rv-lb__nav {
    position: absolute;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, .3);
    background: rgba(255, 255, 255, .12);
    color: #fff;
    cursor: pointer;
    display: grid;
    place-items: center;
    transition: background .18s;
}

.rv-lb__close:hover,
.rv-lb__nav:hover {
    background: rgba(255, 255, 255, .26);
}

.rv-lb__close:focus-visible,
.rv-lb__nav:focus-visible {
    outline: 2px solid #fff;
    outline-offset: 2px;
}

.rv-lb__close {
    top: 20px;
    right: 20px;
    width: 44px;
    height: 44px;
}

.rv-lb__nav {
    top: 50%;
    transform: translateY(-50%);
    width: 48px;
    height: 48px;
}

.rv-lb__nav--prev {
    left: 20px;
    /* Одна иконка chevron-right на обе кнопки, левая — зеркалом: держать в
       спрайте вторую копию того же шеврона ради поворота незачем. */
    rotate: 180deg;
}

.rv-lb__nav--next {
    right: 20px;
}

@media (max-width: 560px) {
    .rv-lb__nav {
        width: 40px;
        height: 40px;
    }

    .rv-lb__nav--prev {
        left: 8px;
    }

    .rv-lb__nav--next {
        right: 8px;
    }
}

/* ---------- ФОРМА ---------- */

.rv-form {
    max-width: 680px;
    margin: 0 auto;
    background: var(--card-bg);
    border: 1px solid var(--border);
    border-radius: 24px;
    padding: 34px;
    box-shadow: var(--shadow);
}

.rv-form--thanks {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    color: var(--pg-accent);
}

.rv-form--thanks strong {
    display: block;
    font-size: 1.0625rem;
    color: var(--text);
    margin-bottom: 4px;
}

.rv-form--thanks p {
    margin: 0;
    font-size: .9375rem;
    color: var(--text-light);
}

.rv-form__warn {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-top: 10px !important;
    font-size: .875rem;
}

.rv-stars-field,
.rv-size-fit-field {
    border: 0;
    padding: 0;
    margin: 0 0 18px;
}

.rv-stars-field legend,
.rv-size-fit-field legend {
    font-size: .875rem;
    font-weight: 600;
    color: var(--text);
    margin-bottom: 8px;
    padding: 0;
}

.rv-stars {
    display: flex;
    flex-direction: row-reverse;
    justify-content: flex-end;
    gap: 4px;
}

/* clip-path вместо устаревшего clip: rect(...) — то же скрытие, но без
   deprecated-свойства (Stylelint property-no-deprecated). display:none
   здесь нельзя: скрытый так input выпадает из порядка табуляции, и оценку
   стало бы невозможно выставить с клавиатуры. */
.rv-stars input,
.rv-size-fit input,
.rv-file {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
}

.rv-stars label {
    font-size: 2rem;
    line-height: 1;
    cursor: pointer;
    color: var(--border);
    transition: color .15s, transform .15s;
}

.rv-stars label:hover {
    transform: scale(1.12);
}

.rv-stars input:checked ~ label,
.rv-stars label:hover,
.rv-stars label:hover ~ label {
    color: var(--gold);
}

.rv-stars input:focus-visible ~ label {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
    border-radius: 3px;
}

.rv-size-fit {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.rv-size-fit label {
    padding: 9px 16px;
    border: 1px solid var(--border);
    border-radius: 999px;
    cursor: pointer;
    font-size: .875rem;
    color: var(--text);
    transition: background .15s, border-color .15s, color .15s;
}

.rv-size-fit input:checked + label {
    background: var(--pg-accent);
    border-color: var(--pg-accent);
    color: #fff;
}

.rv-size-fit input:focus-visible + label {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

.rv-field-hint {
    font-size: .8125rem;
    line-height: 1.5;
    color: var(--text-light);
    margin: 8px 0 0;
}

.rv-drop {
    display: block;
    border: 2px dashed var(--border);
    border-radius: var(--pg-radius-lg, 20px);
    padding: 26px;
    text-align: center;
    color: var(--text-light);
    cursor: pointer;
    transition: border-color .2s, background .2s;
}

.rv-drop:hover,
.rv-file:focus-visible + .rv-drop {
    border-color: var(--pg-accent);
    background: var(--bg);
}

.rv-drop svg {
    color: var(--pg-accent);
    margin-bottom: 9px;
}

.rv-drop b {
    display: block;
    color: var(--text);
    font-size: .9375rem;
    margin-bottom: 3px;
}

.rv-drop small {
    font-size: .8125rem;
}

.rv-thumbs {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-top: 13px;
}

.rv-thumbs[hidden] {
    display: none;
}

.rv-thumbs img {
    width: 60px;
    height: 74px;
    object-fit: cover;
    border-radius: 10px;
    display: block;
}

.rv-consent {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: .8125rem;
    color: var(--text-light);
    margin: 4px 0 20px;
    cursor: pointer;
}

.rv-consent input {
    margin-top: 3px;
    flex-shrink: 0;
    width: 17px;
    height: 17px;
    accent-color: var(--primary);
}

.rv-mod {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: .8125rem;
    line-height: 1.55;
    color: var(--text-light);
    background: var(--bg);
    border-radius: var(--radius);
    padding: 13px 16px;
    margin: 18px 0 0;
}

.rv-mod svg {
    flex-shrink: 0;
    margin-top: 1px;
}

/* .form-group — правила живут в cart-checkout.css, который эта страница не
   подключает (у каждой страницы свой набор ассетов). Повторяем только то,
   что реально нужно форме отзыва. */
.rv-form .form-group {
    margin-bottom: 18px;
}

.rv-form .form-group > label {
    display: block;
    font-size: .8125rem;
    font-weight: 600;
    color: var(--text-light);
    text-transform: uppercase;
    letter-spacing: .4px;
    margin-bottom: 6px;
}

.rv-form .form-group input[type="text"],
.rv-form .form-group textarea {
    width: 100%;
    padding: 14px 16px;
    border: 1.5px solid var(--border);
    border-radius: var(--radius);
    font-size: 1rem;
    font-family: var(--font-body);
    color: var(--text);
    background: var(--white);
    transition: border-color .2s, box-shadow .2s;
}

.rv-form .form-group input[type="text"]:focus,
.rv-form .form-group textarea:focus {
    border-color: var(--primary);
    outline: none;
    box-shadow: 0 0 0 3px rgba(184, 80, 42, .1);
}

.rv-form .form-group textarea {
    resize: vertical;
    min-height: 90px;
}
