/*
 * shop-filters.css — SERTARUL DE FILTRE DE PE MOBIL
 * ============================================================================
 *
 * Se încarcă DOAR pe pagina de categorie, împins cu `@push('head')` din
 * `resources/views/shop/catalog/category.blade.php`, deci după
 * `shop-responsive.css` (layout-ul emite `@stack('head')` imediat sub el).
 * Ordinea contează: câteva reguli de aici bat reguli de acolo cu aceeași
 * specificitate.
 *
 * ── CE PORTEAZĂ, ȘI DE UNDE ────────────────────────────────────────────────
 * Producția servește pe mobil o TEMĂ SEPARATĂ (`Themed/Mobile/**` +
 * `public_html/mobile/css/**`), construită pe Bootstrap 5. Sertarul de filtre
 * e `#product_filter_off`, un `.offcanvas.offcanvas-start` deschis din butonul
 * „Filtrează" din rândul de sortare.
 *
 * PORTUL NU ÎNCARCĂ ARBORELE ĂLA CSS. Verificat cu grep pe `public/css/legacy/**`
 * și pe `public/js/**`: ZERO apariții de `bootstrap`, `offcanvas`, `btn-close`,
 * `form-check`, `fs-8`, `collapse`. Deci numele de clasă ale producției ar fi
 * pur decorative aici — de aceea markup-ul folosește clase PROPRII
 * (`shop-filters-*`), iar fișierul ăsta le dă VALORILE citite din producție.
 *
 * ── VALORILE, MĂSURATE ÎN BROWSER PE PRODUCȚIE ─────────────────────────────
 * Chrome headless, 375×812, UA de iPhone, `/category/lenjerie-erotica/
 * lenjerie-pentru-ea/body`, sertarul DESCHIS prin click pe „Filtrează".
 * `getComputedStyle` pe fiecare parte (nu valori „ochite" din foaie):
 *
 *   #product_filter_off          fixed 0,0 · 375×812 · max-width 100% · #fff
 *                                z-index 1045 · flex/column
 *                                border-right 1px rgba(0,0,0,.175)
 *                                transition transform .3s ease-in-out
 *                    ÎNCHIS:     transform matrix(1,0,0,1,-375,0) · visibility hidden
 *   .offcanvas-backdrop          fixed · 100% · #000 · opacity .5 · z-index 1040
 *                                transition opacity .15s linear
 *   .offcanvas-header            flex · align-items center · padding 16px · h 62
 *   .offcanvas-title             20px/30px · weight 500 · #212529
 *   .btn-close                   30×30 (14px + padding 8px) · radius 6px · opacity .5
 *   .offcanvas-body              padding 16px · overflow-y auto · h 704
 *   .collapse-indicator          w 100% · padding 6px 0 · margin-top 16px · 18px
 *   .form-check (rândul)         flex · align-items center · gap 8px · h 24
 *                                padding-left 21px, checkbox margin-left −21px
 *   .form-check-input            14×14 · #fff · 1px solid #cbd0dd · radius 3.5px
 *   .form-check-label            14px/17.5px · #212529
 *   .offcanvas-footer            padding 0 16px 16px · h 46
 *   #clear-filters-mobile        30px înalt · #f5f7fa · #000 · 1px solid #d30009
 *   #apply-filters-mobile        radius 4px · padding 4px 8px · 18px/20px
 *   butonul „Filtrează"          la fel, dar padding 4px 24px · inline-block
 *   rândul sortare+buton         flex · space-between · align-items center · margin 10px 0
 *   <body> cât e sertarul deschis: overflow „visible" (`data-bs-scroll="true"`)
 *
 * `#d30009` e roșul temei mobile a producției; foaia desktop a portului
 * folosește `#da0000` pentru alte componente. S-a păstrat valoarea MĂSURATĂ,
 * fiindcă asta e componenta portată.
 *
 * ── BOOTSTRAP: NU EXISTĂ ÎN PORT ───────────────────────────────────────────
 * `data-bs-toggle="offcanvas"` / `bootstrap.Offcanvas` NU pot fi folosite:
 * storefront-ul încarcă jQuery 3.6.4 + 6 fișiere vanilla, niciun Bootstrap
 * (singura apariție în tot proiectul e `public/js/admin.js`, panoul de admin).
 * Deschiderea/închiderea sunt scrise în `public/js/shop-filters.js`, pe clasa
 * de stare `.is-open`.
 *
 * ── DESKTOPUL NU SE ATINGE ─────────────────────────────────────────────────
 * Tot ce e „sertar" trăiește într-un singur `@media (max-width: 767px)`.
 * În afara lui există DOAR reguli `display: none` pe cele patru noduri NOI
 * (`.shop-filters-toggle`, `.shop-filters-head`, `.shop-filters-foot`,
 * `.shop-filters-backdrop`), care pe desktop nu existau deloc. Breakpoint-ul e
 * 767, ca restul proiectului (`shop-responsive.css`), NU 768.
 */

/* ==========================================================================
   0. Pe DESKTOP nodurile noi nu există vizual
   ========================================================================== */
.shop-filters-toggle,
.shop-filters-head,
.shop-filters-foot,
.shop-filters-backdrop {
    display: none;
}

/* ==========================================================================
   1. MOBIL (≤767px)
   ========================================================================== */
@media (max-width: 767px) {

    /* ── 1.1 Declanșatorul, în rândul de sortare ───────────────────────────
       Producția: `inline-block`, 30px înalt, bg #f5f7fa, text #000,
       bordură 1px #d30009, radius 4px, padding 4px 24px, 18px/20px. */
    .shop-filters-toggle {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        height: 30px;
        padding: 4px 24px;
        background: #f5f7fa;
        color: #000;
        border: 1px solid #d30009;
        border-radius: 4px;
        font-size: 18px;
        line-height: 20px;
        font-weight: 400;
        text-align: center;
        white-space: nowrap;
        cursor: pointer;
        -webkit-appearance: none;
        appearance: none;
    }

    /* Pâlnia din `<i class="fas fa-filter">` a producției, desenată din
       borduri: portul nu are Font Awesome (verificat cu grep pe
       `public/css/legacy/**` — zero `@font-face` de FA). */
    .shop-filters-toggle::before {
        content: "";
        display: inline-block;
        width: 0;
        height: 0;
        border-left: 6px solid transparent;
        border-right: 6px solid transparent;
        border-top: 9px solid currentColor;
        flex: 0 0 auto;
    }

    /* Bara de listare (contor + sortare + buton) trebuie să încapă pe 375px.
       Stilul inline al producției (`margin-left:auto`, `gap:15px`) rămâne; aici
       doar i se dă voie să se rupă pe mai multe rânduri în loc să depășească.

       NB: bara portului are trei piese („Afișare: 60 din 420 produse",
       „Sortare: <select min-width:200px>", butonul), în timp ce tema mobilă a
       producției are doar două (un `select` de 169px, fără etichetă, plus
       butonul) — de aceea acolo încap pe un rând, iar aici butonul cade pe
       rândul următor. NU se strâmtează `#product-sort`: `min-width: 200px` e
       stil INLINE moștenit din producție, iar suprascrierea lui ar cere
       `!important` pe un control care nu ține de sertar. */
    .category-heading .breadcrumb > div:last-child {
        flex-wrap: wrap;
        gap: 8px 10px;
        width: 100%;
    }

    /* Butonul stă la DREAPTA, ca în producție (`margin-left: auto`,
       `view.ctp:54`) — pe rândul lui sau lângă sortare, după cum încape. */
    .shop-filters-toggle {
        margin-left: auto;
    }

    /* ── 1.2 SERTARUL ──────────────────────────────────────────────────────
       `.filters-sidebar` DEVINE panoul. Selectorul e pe ID ca să bată
       `.mobile-variant-c .col2-left-layout .col-left.sidebar > .filters-sidebar`
       (0,5,0) din `shop-responsive.css` fără `!important`. */
    #shop-filters-drawer {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        width: 400px;
        max-width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        background: #fff;
        color: #212529;
        border-right: 1px solid rgba(0, 0, 0, 0.175);
        border-radius: 0;
        z-index: 1045;
        display: flex;
        flex-direction: column;
        transform: translateX(-100%);
        visibility: hidden;
        transition: transform 0.3s ease-in-out, visibility 0.3s ease-in-out;
    }

    #shop-filters-drawer.is-open {
        transform: translateX(0);
        visibility: visible;
    }

    /* Fără animație pentru cine a cerut mai puțină mișcare. */
    @media (prefers-reduced-motion: reduce) {
        #shop-filters-drawer,
        .shop-filters-backdrop {
            transition: none;
        }
    }

    /* Scrimul. */
    .shop-filters-backdrop {
        display: block;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: #000;
        z-index: 1040;
        opacity: 0;
        visibility: hidden;
        transition: opacity 0.15s linear, visibility 0.15s linear;
    }

    .shop-filters-backdrop.is-open {
        opacity: 0.5;
        visibility: visible;
    }

    /* ── 1.3 Antetul sertarului ────────────────────────────────────────────
       `.offcanvas-header`: flex, align-items center, padding 16px. */
    .shop-filters-head {
        display: flex;
        align-items: center;
        flex: 0 0 auto;
        padding: 16px;
    }

    .shop-filters-head-title {
        font-size: 20px;
        line-height: 30px;
        font-weight: 500;
        color: #212529;
    }

    /* `.btn-close`: 30×30 (14px conținut + 8px padding), radius 6px,
       opacity .5, împinsă la dreapta. Producția folosește un SVG de fundal;
       aici e caracterul „×", ca să nu adăugăm un asset. */
    .shop-filters-close {
        margin-left: auto;
        width: 30px;
        height: 30px;
        padding: 0;
        background: transparent;
        border: 0;
        border-radius: 6px;
        color: #000;
        opacity: 0.5;
        font-size: 24px;
        line-height: 1;
        cursor: pointer;
        -webkit-appearance: none;
        appearance: none;
    }

    .shop-filters-close:hover,
    .shop-filters-close:focus {
        opacity: 0.85;
    }

    /* Titlul desktop („Filtrează", `h3.filters-title`) iese: antetul
       sertarului îi ia locul, cu textul producției de pe mobil
       („Filtre produse", `view.ctp:126`). */
    #shop-filters-drawer > .filters-title {
        display: none;
    }

    /* ── 1.4 Corpul derulabil ──────────────────────────────────────────────
       `.offcanvas-body`: padding 16px, overflow-y auto, ocupă tot restul.
       `.attributes-filter` are `max-height: 500px; overflow-y: auto` din
       `product_filters.css` — un al doilea scroller înăuntru ar da două bare
       suprapuse, deci se relaxează aici. */
    #shop-filters-drawer > .filter-section {
        flex: 1 1 auto;
        min-height: 0;
        margin: 0;
        padding: 16px;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }

    #shop-filters-drawer .attributes-filter {
        max-height: none;
        overflow: visible;
    }

    /* Rândurile: suprafață de atins mai mare decât cei 12px de pe desktop,
       la valorile producției (rând h 24, gap 8, etichetă 14px/17.5). */
    #shop-filters-drawer .attribute-group-title {
        font-size: 18px;
        line-height: 20px;
        font-weight: 400;
        color: #212529;
        margin-bottom: 8px;
    }

    /* Rândul iese 24px înalt, exact ca `.form-check`-ul producției (măsurat
       h 24). NU se mărește pentru „suprafață de atins": decizia de proiect e
       paritate, îmbunătățirile se consemnează în registru, nu se aplică. */
    #shop-filters-drawer .attribute-value-label {
        gap: 8px;
        margin-bottom: 0;
        padding: 3px 0;
        font-size: 14px;
        line-height: 17.5px;
        color: #212529;
    }

    #shop-filters-drawer .attribute-checkbox {
        width: 14px;
        height: 14px;
        margin-right: 0;
        flex: 0 0 auto;
    }

    /* Numele nu se mai taie cu „…" într-un panou de 400px. */
    #shop-filters-drawer .attribute-value-name {
        overflow: visible;
        text-overflow: clip;
        white-space: normal;
    }

    /* ── 1.5 Subsolul ──────────────────────────────────────────────────────
       `.offcanvas-footer`: padding 0 16px 16px; „Șterge filtre" la stânga
       (`float-start`), „Aplică filtrele" la dreapta (`float-end`). Cu flex +
       space-between iese aceeași dispunere, fără float-uri de curățat. */
    .shop-filters-foot {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 10px;
        flex: 0 0 auto;
        padding: 0 16px 16px;
    }

    .shop-filters-btn {
        height: 30px;
        padding: 4px 8px;
        background: #f5f7fa;
        color: #000;
        border: 1px solid #d30009;
        border-radius: 4px;
        font-size: 18px;
        line-height: 20px;
        font-weight: 400;
        text-align: center;
        white-space: nowrap;
        cursor: pointer;
        -webkit-appearance: none;
        appearance: none;
    }

    /* ── 1.6 Ce rămâne în pagină ───────────────────────────────────────────
       Butonul desktop de golire (`#clear-filters`, `.clear-filters-section`)
       se ascunde CÂND există sertar — sertarul are propriul „Șterge filtre".
       Selectorul de frați generali e exact condiția asta: `.clear-filters-section`
       se randează DUPĂ `.filters-sidebar` și doar în aceeași bară laterală.
       Când sertarul lipsește (filtru doar de preț, fără fațete de atribute),
       secțiunea rămâne vizibilă, ca azi. */
    #shop-filters-drawer ~ .clear-filters-section {
        display: none;
    }

    /* Bara laterală rămâne în DOM și fără conținut vizibil: `shop-responsive.css`
       îi ascunde cutiile (`> .box`) și îi dă `margin: 0`, iar filtrele tocmai au
       ieșit din flux. Regula de acolo îi punea 16px de sus filtrelor
       (`.col-left.sidebar > .filters-sidebar { margin-top: 16px }`) — o anulăm
       aici, altfel bara ar lăsa un gol pe pagina de categorie. */
    .col2-left-layout .col-left.sidebar > #shop-filters-drawer {
        margin-top: 0;
    }
}
