/**
 * dropfindfilters — estilos del panel de filtros.
 *
 * Principios:
 *  - No intrusivo: no impone tipografía ni colores de marca; hereda del tema.
 *  - Personalizable: todo pasa por variables --dff-* (el comerciante las
 *    sobrescribe desde el CSS propio del BO sin tocar ficheros).
 *  - Tres modos de presentación (columna / desplegable fijo / flotante) y
 *    comportamiento propio en móvil (panel deslizante a pantalla completa).
 */

/*
 * Las variables se declaran también en .dff-portal porque al abrir el panel en
 * móvil el JS lo saca del árbol del tema y lo cuelga de <body> (ver más abajo):
 * ahí ya no hereda nada de .dff-filters.
 */
.dff-filters,
.dff-portal {
    --dff-gap: 16px;
    --dff-radius: 10px;
    --dff-border: #e3e6ef;
    --dff-bg: #fff;
    --dff-text: inherit;
    --dff-muted: #6b7280;
    --dff-accent: #4b45e4;
    --dff-accent-soft: rgba(75, 69, 228, .08);
    --dff-shadow: 0 4px 24px rgba(16, 24, 40, .08);
    --dff-panel-width: 320px;
    /* Densidad. El panel compite por espacio con el listado de productos: se
       busca el mínimo que sigue siendo cómodo de pulsar (~32px de alto de fila,
       el mínimo táctil razonable con área de clic a todo el ancho). */
    --dff-item-pad-y: 7px;
    --dff-item-pad-x: 12px;
    --dff-group-pad-y: 9px;
    --dff-group-font: .82rem;
    --dff-list-max-height: 240px;
    /* z-index del panel en móvil / desplegables. Personalizable: algunos temas
       tienen iconos flotantes (chat, carrito, subir arriba) que se solapan. */
    --dff-z-panel: 1060;
    --dff-z-overlay: 1040;

    color: var(--dff-text);
    font-size: var(--dff-font-size, .875rem);
    font-family: var(--dff-font-family, inherit);
    box-sizing: border-box;
}

.dff-filters *,
.dff-filters *::before,
.dff-filters *::after,
.dff-portal *,
.dff-portal *::before,
.dff-portal *::after { box-sizing: inherit; }

.dff-filters button,
.dff-filters input,
.dff-filters label,
.dff-portal button,
.dff-portal input,
.dff-portal label { font-family: inherit; }

/* ---------- Cabecera ---------- */
.dff-filters__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: var(--dff-gap);
}

.dff-filters__title {
    font-size: .95rem;
    font-weight: var(--dff-title-weight, 600);
    margin: 0;
    letter-spacing: .01em;
}

.dff-filters__count {
    font-size: .82rem;
    color: var(--dff-muted);
    font-weight: 400;
}

.dff-filters__close {
    display: none; /* solo en móvil / desplegables */
    background: none;
    border: 0;
    font-size: 1.5rem;
    line-height: 1;
    cursor: pointer;
    color: var(--dff-muted);
    padding: 4px 8px;
}

/* ---------- Chips de filtros activos ---------- */
.dff-active {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: var(--dff-gap);
}

.dff-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: 999px;
    background: var(--dff-accent-soft);
    color: var(--dff-accent);
    font-size: .8rem;
    border: 0;
    cursor: pointer;
    max-width: 100%;
}

.dff-chip__x { font-weight: 700; line-height: 1; }
.dff-chip:hover { filter: brightness(.95); }

.dff-clear {
    background: none;
    border: 0;
    color: var(--dff-muted);
    font-size: .8rem;
    text-decoration: underline;
    cursor: pointer;
    padding: 4px 2px;
}

/* ---------- Grupos de facetas (acordeón) ---------- */
.dff-facet-group {
    border-bottom: 1px solid var(--dff-border);
    padding: 0 0 2px;
    margin-bottom: 2px;
}

.dff-facet-group:last-child { border-bottom: 0; }

.dff-facet-group__title {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    margin: 0;
    padding: var(--dff-group-pad-y, 9px) 2px;
    font-size: var(--dff-group-font, .82rem);
    font-weight: var(--dff-title-weight, 600);
    letter-spacing: .01em;
    background: none;
    border: 0;
    text-align: left;
    cursor: pointer;
    color: inherit;
    font-family: inherit;
}

/* El nombre empuja la flecha al extremo; el distintivo queda pegado al nombre. */
.dff-facet-group__name { flex: 1 1 auto; min-width: 0; }

/* Cuántos valores hay marcados en un grupo plegado. */
.dff-facet-group__badge {
    flex: 0 0 auto;
    min-width: 18px;
    padding: 1px 6px;
    border-radius: 999px;
    background: var(--dff-accent);
    color: #fff;
    font-size: .68rem;
    font-weight: 600;
    line-height: 1.5;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.dff-facet-group__title::after {
    content: "";
    width: 8px;
    height: 8px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
    transition: transform .18s ease;
    opacity: .5;
    flex: 0 0 auto;
    margin-top: -4px;
}

.dff-facet-group.is-collapsed .dff-facet-group__title::after { transform: rotate(-45deg); margin-top: 2px; }
.dff-facet-group.is-collapsed .dff-facet-list { display: none; }

.dff-facet-list {
    list-style: none;
    margin: 0 0 14px;
    padding: 0;
    max-height: var(--dff-list-max-height, 240px);
    overflow-y: auto;
    overflow-x: hidden;
    overscroll-behavior: contain;
    max-width: 100%;
}

.dff-facet-item > label {
    display: flex;
    align-items: center;
    gap: 8px;
    /* Sin margin negativo: hacía la fila más ancha que la lista y provocaba
       scroll horizontal. El aire lateral lo pone el contenedor. */
    padding: var(--dff-item-pad-y) 8px;
    margin: 0;
    cursor: pointer;
    font-weight: 400;
    line-height: 1.4;
    border-radius: 8px;
    max-width: 100%;
}

.dff-facet-item > label:hover { background: var(--dff-accent-soft); }

.dff-facet-item input[type="checkbox"] {
    flex: 0 0 auto;
    width: 16px;
    height: 16px;
    accent-color: var(--dff-accent);
    cursor: pointer;
    margin: 0;
}

.dff-facet-label {
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
}

.dff-count {
    flex: 0 0 auto;
    color: var(--dff-muted);
    font-size: .78rem;
    font-variant-numeric: tabular-nums;
}

/* Accesibilidad: foco visible sin depender del tema */
.dff-filters :focus-visible {
    outline: 2px solid var(--dff-accent);
    outline-offset: 2px;
}

/* Estado de carga */
.dff-filters.dff-loading { opacity: .6; pointer-events: none; transition: opacity .15s ease; }

/* ---------- Botón "cargar más" ---------- */
.dff-more-wrap { text-align: center; margin: 24px 0; }

.dff-more {
    padding: 10px 22px;
    border-radius: var(--dff-radius);
    border: 1px solid var(--dff-border);
    background: var(--dff-bg);
    cursor: pointer;
    font: inherit;
    font-size: .9rem;
}

.dff-more:hover { border-color: var(--dff-accent); color: var(--dff-accent); }
.dff-more[disabled] { opacity: .6; cursor: default; }

/* =======================================================================
   MODO 1 — Columna (por defecto): se integra en la columna del tema.
   ======================================================================= */
.dff-filters--column .dff-filters__inner { display: block; }

/* =======================================================================
   MODO 2 y 3 — Desplegables. El panel se abre desde un botón.
   ======================================================================= */
.dff-filters__toggle {
    display: none;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    border: 1px solid var(--dff-border);
    border-radius: var(--dff-radius);
    background: var(--dff-bg);
    font: inherit;
    font-size: .9rem;
    cursor: pointer;
}

.dff-filters__toggle:hover { border-color: var(--dff-accent); }

.dff-filters--dropdown_fixed .dff-filters__toggle,
.dff-filters--dropdown_absolute .dff-filters__toggle { display: inline-flex; }

.dff-filters--dropdown_fixed .dff-filters__inner,
.dff-filters--dropdown_absolute .dff-filters__inner {
    display: none;
    width: var(--dff-panel-width);
    max-width: calc(100vw - 24px);
    max-height: 70vh;
    overflow-y: auto;
    padding: 16px;
    background: var(--dff-bg);
    border: 1px solid var(--dff-border);
    border-radius: var(--dff-radius);
    box-shadow: var(--dff-shadow);
    z-index: var(--dff-z-panel);
}

.dff-filters--dropdown_fixed.is-open .dff-filters__inner,
.dff-filters--dropdown_absolute.is-open .dff-filters__inner { display: block; }

.dff-filters--dropdown_absolute { position: relative; }
.dff-filters--dropdown_absolute .dff-filters__inner { position: absolute; top: calc(100% + 8px); left: 0; }

.dff-filters--dropdown_fixed .dff-filters__inner { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); }

.dff-filters--dropdown_fixed.is-open .dff-filters__close,
.dff-filters--dropdown_absolute.is-open .dff-filters__close { display: block; }

/* Velo solo para el modo fijo (modal) */
.dff-filters--dropdown_fixed.is-open::before {
    content: "";
    position: fixed;
    inset: 0;
    background: rgba(16, 24, 40, .45);
    z-index: var(--dff-z-overlay);
}

/* =======================================================================
   MÓVIL — en cualquier modo, panel deslizante a pantalla completa.
   ======================================================================= */
@media (max-width: 767px) {
    .dff-filters__toggle { display: inline-flex; width: 100%; justify-content: center; }

    .dff-filters .dff-filters__inner {
        display: none;
        position: fixed;
        inset: 0;
        width: 100%;
        max-width: none;
        max-height: none;
        border: 0;
        border-radius: 0;
        padding: 16px;
        overflow-y: auto;
        background: var(--dff-bg);
        z-index: var(--dff-z-panel);
    }

    .dff-filters.is-open .dff-filters__inner { display: block; }
    .dff-filters.is-open .dff-filters__close { display: block; }
    .dff-filters--dropdown_fixed.is-open::before { display: none; }
    .dff-facet-list { max-height: none; }
}

/* ===========================================================================
 * PANEL PORTADO A <body> — arreglo de visibilidad en móviles reales.
 *
 * En iOS y Android el tema aplica transform / filter / will-change / backdrop-filter
 * a contenedores de la cabecera y del hero (menús deslizantes, animaciones,
 * parallax). Cualquiera de esas propiedades hace dos cosas a la vez:
 *   1. `position: fixed` deja de referirse al viewport y pasa a anclarse a ese
 *      ancestro, así que `inset: 0` ya no cubre la pantalla (asomaban las
 *      tarjetas por debajo del panel).
 *   2. Crea un contexto de apilamiento, con lo que nuestro z-index compite
 *      DENTRO de él y no contra la cabecera del tema: por muy alto que sea el
 *      número, el header y el hero quedaban por encima.
 *
 * No hay z-index que arregle eso desde dentro. La única solución fiable es sacar
 * el panel del árbol del tema al abrirlo: el JS lo mueve a <body> y le pone la
 * clase .dff-portal, y lo devuelve a su sitio al cerrar.
 * ========================================================================= */
.dff-filters__inner.dff-portal {
    display: block;
    position: fixed;
    /* Por defecto el panel ocupa toda la pantalla y tapa la cabecera: es lo
       normal en un filtro móvil (es un contexto modal, se sale por su botón de
       cerrar). Quien prefiera dejar la cabecera del tema a la vista solo tiene
       que dar altura a --dff-portal-top, desde el panel de estilos o con CSS. */
    top: var(--dff-portal-top, 0px);
    left: 0;
    right: 0;
    width: 100%;
    max-width: none !important;
    /* dvh sigue a la barra de direcciones de los navegadores móviles; vh no, y
       dejaba el último filtro debajo de ella. El vh queda de reserva. */
    height: calc(100vh - var(--dff-portal-top, 0px));
    height: calc(100dvh - var(--dff-portal-top, 0px));
    max-height: none;
    margin: 0;
    border: 0;
    border-radius: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    background: var(--dff-bg, #fff);
    color: var(--dff-text, inherit);
    font-size: var(--dff-font-size, .875rem);
    font-family: var(--dff-font-family, inherit);
    box-shadow: none;
    /* Por encima de cualquier cosa del tema; ya fuera de sus contextos. */
    z-index: var(--dff-z-panel, 1060);
    padding: 16px var(--dff-panel-pad-x, 16px) 32px !important;
}

/* Portado, el botón de cerrar es la ÚNICA salida: siempre visible. */
.dff-filters__inner.dff-portal .dff-filters__close {
    display: block;
    font-size: 1.75rem;
    padding: 4px 10px;
}

.dff-filters__inner.dff-portal .dff-filters__head {
    position: sticky;
    top: -16px;
    z-index: 1;
    margin: -16px 0 var(--dff-gap);
    padding: 16px 0 10px;
    background: var(--dff-bg, #fff);
    border-bottom: 1px solid var(--dff-border);
}

/* Sin tope de alto: el panel ya ocupa la pantalla y tiene su propio scroll. */
.dff-filters__inner.dff-portal .dff-facet-list { max-height: none; }

/*
 * Fondo bloqueado mientras el panel está abierto. El position:fixed sobre body
 * (lo aplica el JS junto con el desplazamiento guardado) es lo único que frena
 * de verdad el scroll de fondo en iOS; overflow:hidden por sí solo no basta.
 */
body.dff-panel-open {
    overflow: hidden !important;
    width: 100%;
}

/* Respeta la preferencia de menos movimiento */
@media (prefers-reduced-motion: reduce) {
    .dff-filters *, .dff-filters *::after { transition: none !important; }
}

/*
 * Táctil: en pantallas sin ratón fino las filas necesitan más alto, aunque el
 * panel crezca. Se detecta el puntero, no el ancho: un portátil táctil estrecho
 * también lo agradece, y un móvil apaisado no debe volver a la densidad de ratón.
 */
@media (pointer: coarse) {
    /* Suma aire, no lo fija: el valor base sigue siendo el que el comerciante
       elija en el BO (que se emite DESPUÉS de esta hoja y ganaría a un valor
       puesto aquí sobre la propia variable). */
    .dff-facet-item > label {
        padding-top: calc(var(--dff-item-pad-y) + 3px);
        padding-bottom: calc(var(--dff-item-pad-y) + 3px);
    }

    .dff-facet-group__title {
        padding-top: calc(var(--dff-group-pad-y, 9px) + 3px);
        padding-bottom: calc(var(--dff-group-pad-y, 9px) + 3px);
    }

    .dff-facet-item input[type="checkbox"] { width: 18px; height: 18px; }
}

/* ---------------------------------------------------------------------------
 * Aire lateral del panel (fix 26/07/2026).
 * Las filas usan margin negativo para que el hover llegue de lado a lado, así
 * que el aire respecto al borde tiene que ponerlo el contenedor. En modo columna
 * no lo tenía y el contenido quedaba pegado al borde.
 * Con !important para ganar a reglas del tema sobre la columna lateral.
 * ------------------------------------------------------------------------- */
.dff-filters {
    --dff-panel-pad-x: 18px;
}

.dff-filters .dff-filters__inner {
    padding-inline: var(--dff-panel-pad-x) !important;
}

/* El botón de abrir y la cabecera se alinean con el mismo eje. */
.dff-filters--column .dff-filters__head,
.dff-filters--column .dff-active {
    padding-inline: 0;
}

@media (min-width: 768px) {
    .dff-filters {
        --dff-panel-pad-x: 26px;
    }
}

/* En el panel a pantalla completa de móvil, algo menos de aire lateral. */
@media (max-width: 767px) {
    .dff-filters {
        --dff-panel-pad-x: 16px;
    }
}

/* ---------------------------------------------------------------------------
 * Contención: el panel nunca debe desbordar su columna ni generar scroll
 * horizontal, y en modo columna no debe estirarse hasta el borde de la ventana.
 * ------------------------------------------------------------------------- */
/* OJO: el overflow-x NO puede ir en .dff-filters cuando el panel es flotante
   (dropdown_absolute), porque recortaría el desplegable posicionado. Se limita
   al modo columna y, en los desplegables, solo al panel interior. */
.dff-filters--column,
.dff-filters--column .dff-filters__inner,
.dff-filters--dropdown_fixed .dff-filters__inner,
.dff-filters--dropdown_absolute .dff-filters__inner {
    overflow-x: hidden !important;
}

.dff-filters--column .dff-filters__inner {
    /* Tope de ancho para que en columnas muy anchas el panel siga siendo legible. */
    max-width: var(--dff-column-max-width, 420px) !important;
}

.dff-facet-item,
.dff-facet-group {
    max-width: 100%;
    min-width: 0;
}

.dff-facet-label {
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* La barra de scroll vertical de cada grupo, discreta. */
.dff-facet-list::-webkit-scrollbar { width: 6px; }
.dff-facet-list::-webkit-scrollbar-thumb {
    background: var(--dff-border);
    border-radius: 3px;
}
.dff-facet-list { scrollbar-width: thin; }

/* ---------------------------------------------------------------------------
 * Rango de precios (slider de doble mango, sin librerías).
 * Dos <input type=range> superpuestos sobre una pista común: el truco es dejar
 * pasar los clics a través del carril (pointer-events) y capturarlos solo en los
 * mangos, para que ambos sean manejables aunque se solapen.
 * ------------------------------------------------------------------------- */
.dff-price__body { padding: 4px 8px 14px; }

.dff-price__track {
    position: relative;
    height: 28px;
    margin: 6px 0 4px;
}

.dff-price__track::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: var(--dff-slider-rail, 4px);
    transform: translateY(-50%);
    background: var(--dff-border);
    border-radius: 999px;
}

.dff-price__fill {
    position: absolute;
    top: 50%;
    height: var(--dff-slider-rail, 4px);
    transform: translateY(-50%);
    background: var(--dff-accent);
    border-radius: 999px;
    pointer-events: none;
}

.dff-price__range {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 28px;
    margin: 0;
    background: none;
    appearance: none;
    -webkit-appearance: none;
    pointer-events: none; /* el carril no captura: lo hacen los mangos */
}

.dff-price__range::-webkit-slider-thumb {
    -webkit-appearance: none;
    pointer-events: auto;
    width: var(--dff-slider-thumb, 18px);
    height: var(--dff-slider-thumb, 18px);
    border-radius: 50%;
    background: #fff;
    border: 2px solid var(--dff-accent);
    box-shadow: 0 1px 4px rgba(16, 24, 40, .2);
    cursor: grab;
}

.dff-price__range::-moz-range-thumb {
    pointer-events: auto;
    width: var(--dff-slider-thumb, 18px);
    height: var(--dff-slider-thumb, 18px);
    border-radius: 50%;
    background: #fff;
    border: 2px solid var(--dff-accent);
    box-shadow: 0 1px 4px rgba(16, 24, 40, .2);
    cursor: grab;
}

.dff-price__range:active::-webkit-slider-thumb { cursor: grabbing; }
.dff-price__range::-moz-range-track { background: none; border: 0; }

.dff-price__values {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    font-size: .85rem;
    font-variant-numeric: tabular-nums;
}

.dff-price__lo,
.dff-price__hi {
    padding: 3px 10px;
    border: 1px solid var(--dff-border);
    border-radius: 6px;
    background: var(--dff-bg);
}

.dff-price__sep { color: var(--dff-muted); }

/* ===========================================================================
 * MODO "CHIPS" — valores como píldoras en flex-wrap. Más compacto que la lista
 * de checkboxes y mucho mejor para grupos con muchos valores cortos (tallas,
 * tallas, colores). El <input> sigue en el DOM (oculto) para no cambiar
 * el JS; el estado seleccionado lo marca el servidor con .is-on.
 * ========================================================================= */
.dff-values--chips .dff-facet-list {
    display: flex;
    flex-wrap: wrap;
    gap: var(--dff-chip-gap, 6px);
    max-height: none;
    overflow: visible;
    margin-bottom: 12px;
}

.dff-values--chips .dff-facet-item { max-width: 100%; }

.dff-values--chips .dff-facet-item > label {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin: 0;
    padding: var(--dff-chip-pad-y, 5px) var(--dff-chip-pad-x, 11px);
    border: 1px solid var(--dff-border);
    border-radius: var(--dff-chip-radius, 999px);
    background: var(--dff-bg);
    font-size: var(--dff-chip-font, .8rem);
    line-height: 1.25;
    color: var(--dff-muted);
    white-space: nowrap;
    transition: border-color .12s ease, color .12s ease, background-color .12s ease;
}

/* El checkbox se oculta sin perder accesibilidad (sigue siendo focusable). */
.dff-values--chips .dff-facet-item input[type="checkbox"] {
    position: absolute;
    width: 1px;
    height: 1px;
    opacity: 0;
    margin: 0;
    pointer-events: none;
}

.dff-values--chips .dff-facet-item > label:hover {
    border-color: var(--dff-accent);
    color: var(--dff-accent);
    background: var(--dff-bg);
}

.dff-values--chips .dff-facet-item.is-on > label {
    border-color: var(--dff-accent);
    background: var(--dff-accent-soft);
    color: var(--dff-accent);
    font-weight: 500;
}

/* Foco visible en el chip cuando se navega con teclado. */
.dff-values--chips .dff-facet-item input[type="checkbox"]:focus-visible + .dff-facet-label {
    outline: 2px solid var(--dff-accent);
    outline-offset: 3px;
    border-radius: 3px;
}

/* El conteo, discreto: en chips suele estorbar más que ayudar. */
.dff-values--chips .dff-count {
    font-size: .72rem;
    opacity: .65;
}

.dff-values--chips.dff-hide-counts .dff-count { display: none; }

/* Valores extra ocultos tras el botón "+" */
.dff-facet-group.is-limited .dff-facet-item.is-extra { display: none; }
/* Al revelarlos, cada modo recupera SU disposición: en chips van en línea, en
   lista siguen siendo filas (inline-flex las ponía una junto a otra). */
.dff-facet-group.is-open-all .dff-facet-item.is-extra { display: block; }
.dff-values--chips .dff-facet-group.is-open-all .dff-facet-item.is-extra { display: inline-flex; }
.dff-facet-group.is-open-all .dff-facet-more { display: none; }
.dff-facet-more { display: inline-flex; }
.dff-facet-group:not(.is-limited) .dff-facet-more { display: none; }

/* En modo lista el "+N" no es una píldora más entre píldoras: se lee como enlace. */
.dff-values--list .dff-facet-more { display: block; }
.dff-values--list .dff-more-values {
    min-width: 0;
    padding: 6px 8px;
    border: 0;
    color: var(--dff-accent);
    font-size: .8rem;
    text-decoration: underline;
}

.dff-more-values {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 30px;
    padding: var(--dff-chip-pad-y, 5px) 10px;
    border: 1px dashed var(--dff-border);
    border-radius: var(--dff-chip-radius, 999px);
    background: none;
    color: var(--dff-muted);
    font: inherit;
    font-size: var(--dff-chip-font, .8rem);
    line-height: 1.25;
    cursor: pointer;
}

.dff-more-values:hover { border-color: var(--dff-accent); color: var(--dff-accent); }

/* ---------------------------------------------------------------------------
 * Grupos que exceden el cupo visible ("Ver más filtros").
 * Con 20-30 facetas activas la columna se convierte en un muro de cabeceras y
 * el listado de productos queda fuera de pantalla. El servidor marca el
 * excedente (ver DropfindFilters::markGroupOverflow) y aquí se esconde hasta
 * que el usuario lo pide. La clase que lo revela vive en el contenedor raíz,
 * así el estado sobrevive al re-render del sidebar tras filtrar.
 * ------------------------------------------------------------------------- */
.dff-facet-group.is-extra-group { display: none; }
.dff-filters.dff-groups-all .dff-facet-group.is-extra-group { display: block; }
.dff-filters.dff-groups-all .dff-groups-more { display: none; }

.dff-groups-more {
    display: block;
    width: 100%;
    margin-top: 10px;
    padding: 9px 2px;
    border: 0;
    border-top: 1px solid var(--dff-border);
    background: none;
    color: var(--dff-accent);
    font: inherit;
    font-size: .82rem;
    font-weight: 500;
    text-align: left;
    cursor: pointer;
}

.dff-groups-more:hover { text-decoration: underline; }
.dff-groups-more__n { color: var(--dff-muted); font-weight: 400; }

/* ---- Precio: inputs numéricos en vez de etiquetas ---- */
.dff-price__input {
    width: 100%;
    min-width: 0;
    padding: 5px 8px;
    border: 1px solid var(--dff-border);
    border-radius: var(--dff-radius);
    background: var(--dff-bg);
    color: inherit;
    font: inherit;
    font-size: .8rem;
    text-align: center;
    -moz-appearance: textfield;
}

.dff-price__input::-webkit-outer-spin-button,
.dff-price__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.dff-price__input:focus { border-color: var(--dff-accent); outline: none; }
.dff-price__values { gap: 6px; }

/* ---------------------------------------------------------------------------
 * Ordenación propia del panel.
 * Al filtrar por AJAX el listado deja de pasar por el orden nativo de
 * PrestaShop; sin este control se perdía la capacidad de ordenar en cuanto se
 * marcaba un filtro.
 * ------------------------------------------------------------------------- */
.dff-sort {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: var(--dff-gap);
}

.dff-sort label {
    flex: 0 0 auto;
    margin: 0;
    font-size: .8rem;
    font-weight: 400;
    color: var(--dff-muted);
}

.dff-sort__select {
    flex: 1 1 auto;
    min-width: 0;
    padding: 6px 8px;
    border: 1px solid var(--dff-border);
    border-radius: var(--dff-radius);
    background: var(--dff-bg);
    color: inherit;
    font: inherit;
    font-size: .82rem;
    cursor: pointer;
}

.dff-sort__select:focus { border-color: var(--dff-accent); outline: none; }


/* ---------- Pie del panel: "Ver los productos" ---------- */
/*
 * Solo aparece con el panel PORTADO al body, que es el caso móvil: allí el panel
 * tapa el listado, así que sin este botón el comprador marca filtros a ciegas y
 * tiene que buscar la × para ver el resultado. En escritorio los filtros se
 * aplican sobre la vista y el botón sobra.
 *
 * Se cuelga de `.dff-filters__inner.dff-portal` y NO de `.dff-filters.is-open`:
 * al portar, el inner deja de ser descendiente del wrapper y cualquier selector
 * que empiece por `.dff-filters` deja de casar. Misma razón por la que el botón
 * de cerrar tiene su propia regla aquí al lado.
 */
.dff-filters__foot { display: none; }

.dff-filters__inner.dff-portal {
    display: flex;
    flex-direction: column;
}

.dff-filters__inner.dff-portal .dff-filters__groups {
    flex: 1 1 auto;
}

.dff-filters__inner.dff-portal .dff-filters__foot {
    display: block;
    position: sticky;
    /* El inner lleva 32px de padding inferior: se compensa para que el pie
       quede pegado al borde y no flotando sobre un hueco. */
    bottom: -32px;
    margin: auto calc(var(--dff-panel-pad-x, 16px) * -1) -32px;
    padding: 12px var(--dff-panel-pad-x, 16px);
    background: var(--dff-bg, #fff);
    border-top: 1px solid var(--dff-border, #e5e7eb);
}

.dff-filters__apply {
    display: block;
    width: 100%;
    padding: 14px 16px;
    border: 0;
    border-radius: var(--dff-radius, 8px);
    background: var(--dff-accent, #4f46e5);
    color: #fff;
    font-size: 15px;
    font-weight: 600;
    cursor: pointer;
}

.dff-filters__apply-count { opacity: .85; font-weight: 500; }
