/* =============================================
   Catalog Filters — Gegel Intimates
   ============================================= */

.gegel-filters {
    padding: 0 0 var(--spacing-sm);
    position: sticky;
    top: 0;
    z-index: 100;
    background: var(--color-bg-primary);
    transition: transform .25s ease;
}

/* Auto-hide on scroll-down. JS снимает класс при скролле вверх.
   iOS Safari pins position:fixed внутри sticky-родителя на этого же родителя —
   но mobile sheet (.gegel-filter__dropdown) выносится JS-ом в <body>
   (см. openMobileDropdown в catalog-filters.js), поэтому transform на баре
   не reanchorит открытую панель. */
.gegel-filters.is-hidden {
    transform: translateY(-100%);
}

/* Поверх overlay (z-index: 1062), когда открыт mobile sheet — иначе бар прячется под dimmer'ом. */
.gegel-filters.has-open-filter {
    z-index: 1065;
}

/* --- Filter bar (horizontal, centered) --- */
.gegel-filters__bar {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--spacing-md);
    flex-wrap: wrap;
    padding: var(--spacing-lg) 0;
}

/* --- Individual filter --- */
.gegel-filter {
    position: relative;
}

.gegel-filter__trigger {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-sm);
    padding: var(--spacing-xs) var(--spacing-lg);
    background: var(--color-bg-primary);
    border: 1px solid var(--color-primary-light);
    border-radius: var(--border-radius-xl);
    cursor: pointer;
    font-size: var(--font-size-sm);
    font-family: inherit;
    color: var(--color-text-dark);
    white-space: nowrap;
    transition: border-color var(--transition-fast), background-color var(--transition-fast);
}

.gegel-filter__trigger:hover {
    border-color: var(--color-primary);
}

.gegel-filter.is-active .gegel-filter__trigger {
    border-color: var(--color-primary);
    background: var(--color-bg-secondary);
    color: var(--color-primary);
}

.gegel-filter.is-open .gegel-filter__trigger {
    border-color: var(--color-primary);
}

.gegel-filter__arrow {
    transition: transform var(--transition-fast);
    flex-shrink: 0;
}

.gegel-filter.is-open .gegel-filter__arrow {
    transform: rotate(180deg);
}

/* --- Dropdown --- */
.gegel-filter__dropdown {
    display: none;
    position: absolute;
    top: calc(100% + var(--spacing-sm));
    left: 50%;
    transform: translateX(-50%);
    z-index: var(--z-dropdown);
    min-width: 280px;
    max-height: 400px;
    overflow-y: auto;
    background: var(--color-bg-primary);
    border: 1px solid var(--color-border-primary);
    border-radius: var(--border-radius-md);
    box-shadow: var(--shadow-md);
    padding: var(--spacing-md);
}

.gegel-filter.is-open .gegel-filter__dropdown,
.gegel-filter__dropdown.is-open {
    display: block;
}

/* --- Sheet header/footer (hidden by default, shown on mobile) --- */
.gegel-filter__sheet-header,
.gegel-filter__sheet-footer {
    display: none;
}

/* --- Options (checkboxes / radios) --- */
.gegel-filter__options {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-xs);
}

/* --- Sections inside dropdown --- */
.gegel-filter__section + .gegel-filter__section {
    margin-top: var(--spacing-sm);
    padding-top: var(--spacing-sm);
    border-top: 1px solid var(--color-border-primary);
}

.gegel-filter__section-label {
    font-size: var(--font-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--color-text-muted);
    margin-bottom: var(--spacing-sm);
}

/* --- Sort options --- */
.gegel-sort-options {
    gap: 0 !important;
}

.gegel-sort-option {
    display: block;
    width: 100%;
    padding: var(--spacing-sm) var(--spacing-md);
    background: none;
    border: none;
    border-radius: var(--border-radius-sm);
    font-size: var(--font-size-sm);
    font-family: inherit;
    color: var(--color-text-dark);
    text-align: left;
    cursor: pointer;
    transition: background-color var(--transition-fast);
    white-space: nowrap;
}

.gegel-sort-option:hover {
    background: var(--color-bg-secondary);
}

.gegel-sort-option.is-active {
    color: var(--color-primary);
    font-weight: var(--font-weight-medium);
}

/* --- Price slider (dual-handle range) ---
   Layout (vertical):
     0–22px  : value bubbles above each thumb
     22–54px : interactive area (32px tall) — track + range inputs share this band
*/
.gegel-price-slider {
    position: relative;
    width: 100%;
    min-width: 260px;
    height: 54px;
    margin: var(--spacing-md) 0 0;
}

/* Value bubbles that follow each thumb. JS sets `left` and a matching
   negative `translateX` so the label slides from flush-left at 0% to
   flush-right at 100% (no overflow at slider edges). */
.gegel-price-slider__bubble {
    position: absolute;
    top: 0;
    left: 0;
    font-size: var(--font-size-xs);
    color: var(--color-text-dark);
    pointer-events: none;
    white-space: nowrap;
    line-height: 1.2;
    padding: 0 2px;
    z-index: 1;
}

/* Interactive band (bottom 32px) */
.gegel-price-slider__track {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 32px;
    pointer-events: none;
}
.gegel-price-slider__track::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 3px;
    background: var(--color-primary-light);
    border-radius: 999px;
    transform: translateY(-50%);
}

.gegel-price-slider__range {
    position: absolute;
    top: 50%;
    height: 3px;
    background: var(--color-primary);
    border-radius: 999px;
    transform: translateY(-50%);
}

/* Range inputs sit on top of the track band. The inputs themselves
   ignore pointer events — only their thumbs are interactive — so the
   two ranges can overlap without one stealing events from the other. */
.gegel-price-slider__handle {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 32px;
    margin: 0;
    background: transparent;
    pointer-events: none;
    -webkit-appearance: none;
    appearance: none;
    outline: none;
}

.gegel-price-slider__handle::-webkit-slider-runnable-track {
    height: 3px;
    background: transparent;
    border: none;
}

.gegel-price-slider__handle::-moz-range-track {
    height: 3px;
    background: transparent;
    border: none;
}

.gegel-price-slider__handle::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--color-bg-primary);
    border: 2px solid var(--color-primary);
    box-shadow: 0 1px 4px rgba(0, 0, 0, .15);
    cursor: grab;
    pointer-events: auto;
    margin-top: -8px;
    transition: transform var(--transition-fast), box-shadow var(--transition-fast);
}

.gegel-price-slider__handle::-moz-range-thumb {
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--color-bg-primary);
    border: 2px solid var(--color-primary);
    box-shadow: 0 1px 4px rgba(0, 0, 0, .15);
    cursor: grab;
    pointer-events: auto;
    transition: transform var(--transition-fast), box-shadow var(--transition-fast);
}

.gegel-price-slider__handle:active::-webkit-slider-thumb {
    cursor: grabbing;
    transform: scale(1.15);
}
.gegel-price-slider__handle:active::-moz-range-thumb {
    cursor: grabbing;
    transform: scale(1.15);
}

.gegel-price-slider__handle:focus-visible::-webkit-slider-thumb {
    box-shadow: 0 0 0 4px rgba(0, 0, 0, .08), 0 1px 4px rgba(0, 0, 0, .15);
}
.gegel-price-slider__handle:focus-visible::-moz-range-thumb {
    box-shadow: 0 0 0 4px rgba(0, 0, 0, .08), 0 1px 4px rgba(0, 0, 0, .15);
}

/* Lift the active handle so it never gets stuck under its sibling */
.gegel-price-slider__handle--max { z-index: 2; }
.gegel-price-slider__handle--min { z-index: 3; }
.gegel-price-slider.is-min-on-top .gegel-price-slider__handle--min { z-index: 4; }

/* Static labels under the slider showing absolute min/max of the current page */
.gegel-price-slider__limits {
    display: flex;
    justify-content: space-between;
    margin-top: var(--spacing-xs);
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    padding: 0 2px;
}

/* --- Size chips (grid: 4 per row) --- */
.gegel-filter__chips {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--spacing-sm);
}

.gegel-size-chip {
    position: relative;
    cursor: pointer;
}

.gegel-size-chip input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.gegel-size-chip__label {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 36px;
    border: 1px solid var(--color-primary-light);
    border-radius: var(--border-radius-sm);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    color: var(--color-text-dark);
    background: var(--color-bg-primary);
    transition: all var(--transition-fast);
}

.gegel-size-chip:hover .gegel-size-chip__label {
    border-color: var(--color-primary);
    background: var(--color-bg-secondary);
}

.gegel-size-chip input:checked + .gegel-size-chip__label {
    background: var(--color-primary);
    color: var(--color-text-light);
    border-color: var(--color-primary);
}

/* --- Color chips (2 per row desktop, 3 per row mobile: dot + name) --- */
.gegel-color-swatches {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--spacing-sm);
}

.gegel-color-swatch {
    position: relative;
    cursor: pointer;
    min-width: 0;
}

.gegel-color-swatch input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.gegel-color-swatch__inner {
    display: flex;
    align-items: center;
    gap: var(--spacing-sm);
    width: 100%;
    height: 36px;
    padding: 0 var(--spacing-sm);
    border: 1px solid var(--color-primary-light);
    border-radius: var(--border-radius-sm);
    background: var(--color-bg-primary);
    color: var(--color-text-dark);
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-medium);
    box-sizing: border-box;
    transition: all var(--transition-fast);
}

.gegel-color-swatch:hover .gegel-color-swatch__inner {
    border-color: var(--color-primary);
    background: var(--color-bg-secondary);
}

.gegel-color-swatch input:checked + .gegel-color-swatch__inner {
    background: var(--color-primary);
    color: var(--color-text-light);
    border-color: var(--color-primary);
}

.gegel-color-swatch__circle {
    width: 14px;
    height: 14px;
    border-radius: var(--border-radius-full);
    flex-shrink: 0;
    box-sizing: border-box;
}

.gegel-color-swatch__name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* White/very light dots need a subtle outline so they read against the chip */
.gegel-color-swatch__circle[style*="f5f5f5"],
.gegel-color-swatch__circle[style*="ffffff"],
.gegel-color-swatch__circle[style*="FFFFFF"],
.gegel-color-swatch__circle[style*="F5F5F5"] {
    border: 1px solid var(--color-border-muted);
}

/* --- Selected count on trigger button --- */
.gegel-filter__selected-count {
    font-size: var(--font-size-xs);
    font-weight: var(--font-weight-normal);
    color: var(--color-primary);
}

.gegel-filter__selected-count:empty {
    display: none;
}

/* --- Per-chip clear (×) — оверлей на правый край чипа, заменяет стрелку
       при .is-active. Глобальный reset переехал в .gegel-filters__found,
       так что layout бара не «прыгает» при активации фильтра. */
.gegel-filter__clear {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    display: none;
    align-items: center;
    justify-content: center;
    width: 32px;
    padding: 0;
    background: none;
    border: none;
    border-radius: 0 var(--border-radius-xl) var(--border-radius-xl) 0;
    cursor: pointer;
    color: var(--color-primary);
    transition: background-color var(--transition-fast);
}

.gegel-filter.is-active .gegel-filter__clear {
    display: inline-flex;
}

.gegel-filter.is-active .gegel-filter__arrow {
    visibility: hidden;
}

/* На активном чипе фон уже --color-bg-secondary, поэтому hover у × делаем
   контрастнее — primary-light с белым крестиком. Ясная аффорданс «удалить». */
.gegel-filter__clear:hover {
    background: var(--color-primary-light);
    color: var(--color-text-light);
}

/* --- Reset button (теперь живёт в .gegel-filters__found) --- */
.gegel-filters__reset {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xs);
    padding: var(--spacing-xs) var(--spacing-lg);
    background: none;
    border: 1px solid var(--color-border-muted);
    border-radius: var(--border-radius-xl);
    color: var(--color-text-muted);
    font-size: var(--font-size-sm);
    font-family: inherit;
    cursor: pointer;
    white-space: nowrap;
    transition: all var(--transition-fast);
}

.gegel-filters__reset:hover {
    color: var(--color-primary);
    border-color: var(--color-primary-light);
    background: var(--color-bg-secondary);
}

.gegel-filters__reset svg {
    flex-shrink: 0;
}

/* --- Found row (above product grid): text + global reset --- */
.gegel-filters__found {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: var(--spacing-md);
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    padding: 0 0 var(--spacing-sm);
}

.gegel-filters__found-text:empty {
    display: none;
}

/* --- Loading overlay --- */
ul.products.gegel-loading {
    opacity: .4;
    pointer-events: none;
    transition: opacity var(--transition-fast);
}

/* --- Overlay --- */
.gegel-filters__overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .4);
    z-index: 1062;
}

.gegel-filters__overlay.is-visible {
    display: block;
    animation: gegelFadeIn .25s ease-out;
}

@keyframes gegelFadeIn {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes gegelSlideUp {
    from { transform: translateY(100%); }
    to   { transform: translateY(0); }
}

/* =============================================
   Mobile (< 768px)
   ============================================= */
@media (max-width: 767px) {

    /* Filter bar — centered, horizontal scroll when overflows */
    .gegel-filters__bar {
        justify-content: flex-start;
        flex-wrap: nowrap;
        overflow-x: auto;
        scrollbar-width: none;
        padding: var(--spacing-sm) 0;
        gap: var(--spacing-sm);
    }

    .gegel-filters__bar::-webkit-scrollbar {
        display: none;
    }

    /* Raise the bar above the overlay (z-index: 1062) when a sheet is open,
       so the fixed-positioned dropdown inside it receives tap/click events. */
    .gegel-filters.has-open-filter .gegel-filters__bar {
        position: relative;
        z-index: 1063;
    }

    /* Auto-center content when it fits, collapse when it overflows */
    .gegel-filters__bar::before,
    .gegel-filters__bar::after {
        content: '';
        flex: 1 1 0px;
    }

    /* Filters don't stretch full width */
    .gegel-filter {
        flex-shrink: 0;
    }

    /* Trigger — compact pill */
    .gegel-filter__trigger {
        padding: var(--spacing-xs) var(--spacing-sm);
        font-size: var(--font-size-xs);
    }

    /* Dropdown → bottom sheet */
    .gegel-filter__dropdown {
        position: fixed;
        top: auto;
        bottom: 0;
        left: 0;
        right: 0;
        transform: none;
        z-index: 1065;
        min-width: 0;
        max-height: 75vh;
        border: none;
        border-radius: var(--border-radius-lg) var(--border-radius-lg) 0 0;
        box-shadow: 0 -4px 30px rgba(0, 0, 0, .15);
        padding: 0 var(--spacing-lg) var(--spacing-lg);
        padding-bottom: calc(var(--spacing-lg) + env(safe-area-inset-bottom, 0px));
    }

    .gegel-filter.is-open .gegel-filter__dropdown,
    .gegel-filter__dropdown.is-open {
        animation: gegelSlideUp .3s ease-out;
    }

    /* Sheet header */
    .gegel-filter__sheet-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: var(--spacing-lg) 0 var(--spacing-md);
        font-size: var(--font-size-lg);
        font-weight: 600;
        border-bottom: 1px solid var(--color-border-primary);
        margin-bottom: var(--spacing-md);
        position: sticky;
        top: 0;
        background: var(--color-bg-primary);
        z-index: var(--z-base);
    }

    .gegel-filter__sheet-close {
        background: none;
        border: none;
        font-size: var(--font-size-3xl);
        color: var(--color-text-secondary);
        cursor: pointer;
        padding: 0;
        line-height: 1;
    }

    /* Sheet footer */
    .gegel-filter__sheet-footer {
        display: block;
        padding: var(--spacing-md) 0 0;
        border-top: 1px solid var(--color-border-primary);
        margin-top: var(--spacing-md);
        position: sticky;
        bottom: 0;
        background: var(--color-bg-primary);
    }

    .gegel-filter__sheet-done {
        display: block;
        width: 100%;
        padding: var(--spacing-md);
        background: var(--color-primary);
        color: var(--color-text-light);
        border: none;
        border-radius: var(--border-radius-md);
        font-size: var(--font-size-base);
        font-weight: var(--font-weight-medium);
        font-family: inherit;
        cursor: pointer;
    }

    /* Size chips: 5 columns on mobile, чуть компактнее и изящнее */
    .gegel-filter__chips {
        grid-template-columns: repeat(5, 1fr);
    }
    .gegel-size-chip__label {
        height: 30px;
        font-weight: var(--font-weight-normal);
        letter-spacing: .02em;
    }

    /* Цветовые чипы — 3 в ряд, компактнее, без обрезки названий до 60px */
    .gegel-color-swatches {
        grid-template-columns: repeat(3, 1fr);
        gap: var(--spacing-xs);
    }
    .gegel-color-swatch__inner {
        height: 30px;
        gap: var(--spacing-xs);
        padding: 0 var(--spacing-xs);
        font-weight: var(--font-weight-normal);
        letter-spacing: .02em;
    }
    .gegel-color-swatch__circle {
        width: 10px;
        height: 10px;
    }

    /* Reset button shouldn't shrink */
    .gegel-filters__reset {
        flex-shrink: 0;
        padding: var(--spacing-xs) var(--spacing-sm);
        font-size: var(--font-size-xs);
    }
}

/* =============================================
   Desktop refinements (>= 768px)
   ============================================= */
@media (min-width: 768px) {
    .gegel-filters__overlay {
        display: none !important;
    }

    .gegel-filter__sheet-header,
    .gegel-filter__sheet-footer {
        display: none !important;
    }
}
