/* input(4,39): run-time error CSS1030: Expected identifier, found '.'
input(4,51): run-time error CSS1025: Expected comma or open brace, found ')'
input(8,31): run-time error CSS1030: Expected identifier, found '>'
input(8,60): run-time error CSS1025: Expected comma or open brace, found ')'
input(14,72): run-time error CSS1030: Expected identifier, found ':'
input(14,80): run-time error CSS1025: Expected comma or open brace, found ')'
input(20,72): run-time error CSS1030: Expected identifier, found ':'
input(20,80): run-time error CSS1025: Expected comma or open brace, found ')'
input(26,35): run-time error CSS1030: Expected identifier, found ':'
input(26,43): run-time error CSS1025: Expected comma or open brace, found ')'
input(53,25): run-time error CSS1030: Expected identifier, found '*'
input(53,26): run-time error CSS1025: Expected comma or open brace, found ')'
input(67,89): run-time error CSS1030: Expected identifier, found ':'
input(67,97): run-time error CSS1025: Expected comma or open brace, found ')'
input(72,57): run-time error CSS1030: Expected identifier, found ':'
input(72,65): run-time error CSS1025: Expected comma or open brace, found ')'
input(77,35): run-time error CSS1030: Expected identifier, found '.'
input(77,55): run-time error CSS1025: Expected comma or open brace, found ')'
input(84,70): run-time error CSS1030: Expected identifier, found '.'
input(84,90): run-time error CSS1025: Expected comma or open brace, found ')'
input(91,56): run-time error CSS1030: Expected identifier, found '.'
input(91,86): run-time error CSS1025: Expected comma or open brace, found ')'
input(96,70): run-time error CSS1030: Expected identifier, found '['
input(96,76): run-time error CSS1031: Expected selector, found '='
input(96,76): run-time error CSS1025: Expected comma or open brace, found '=' */
/* Reglas con :has() separadas de modern-refresh.css: el minificador de nopCommerce (NUglify) no entiende :has() y, si estuvieran en el archivo principal, dejaría TODO el archivo sin minificar. Este archivo se carga justo después de modern-refresh.css (ver Head.cshtml) y queda fuera del bundle. */

.shopping-cart-page #ctn-gift-box .deals:empty,
.shopping-cart-page #ctn-gift-box:has(.deals:empty) {
    display: none;
}

.master-wrapper-page > ul:has(> .container-warehouselection) {
    margin: 0;
    padding: 0;
    list-style: none;
}

.product-details-page .attributes ul.radio-list.radio-list li:has(input:checked),
.product-details-page .attributes ul.option-list.option-list li:has(input:checked) {
    border-color: var(--mr-purple) !important;
    box-shadow: 0 0 0 2px var(--mr-purple) inset;
}

.product-details-page .attributes ul.radio-list.radio-list li:has(input:checked),
.product-details-page .attributes ul.option-list.option-list li:has(input:checked) {
    border-color: var(--mr-purple) !important;
    box-shadow: 0 0 0 2px var(--mr-purple) inset !important;
}

#payment-method-block li:has(input:checked) {
    border-color: var(--mr-purple) !important;
    box-shadow: 0 0 0 1.5px var(--mr-purple);
}


/* --------------------------------------------------------------------------
   CATEGORÍA — transición animada entre chips (fase 1, 2026-09-08).
   View Transitions entre documentos: cada categoría conserva su URL y su página
   completa; el navegador funde la vieja con la nueva. modern-refresh.js omite la
   transición (pageswap → skipTransition) salvo cuando el destino es un chip de la
   fila, así el resto del sitio navega como siempre. Chips fijos
   (fundido del root, sin cambio visible); texto e imagen de la cabecera se funden; el grid sale hacia arriba
   y entra desde abajo. Va en este archivo porque NUglify no entiende
   @view-transition ni ::view-transition-*. Navegadores sin soporte: sin efecto.
   -------------------------------------------------------------------------- */
@view-transition { navigation: auto; }

/* OJO: header y footer NO llevan view-transition-name: crearía un contexto de apilamiento en .header y el
   mega menú (z-index dentro del header) quedaría por debajo de la cabecera de categoría. Como no cambian
   entre categorías, el fundido del root los deja visualmente quietos. */
.html-category-page .mr-cat-chips-wrap { view-transition-name: mr-vt-chips; }
.html-category-page .mr-cat-head__text { view-transition-name: mr-vt-cat-text; }
.html-category-page .mr-cat-head__media { view-transition-name: mr-vt-cat-media; }
.html-category-page .mr-cat-tools { view-transition-name: mr-vt-cat-tools; }
.html-category-page .products-wrapper { view-transition-name: mr-vt-cat-grid; }

::view-transition-group(*) { animation-duration: .28s; animation-timing-function: cubic-bezier(.2, .7, .2, 1); }
::view-transition-old(mr-vt-cat-grid) { animation: mr-vt-grid-out .2s cubic-bezier(.4, 0, 1, 1) both; }
::view-transition-new(mr-vt-cat-grid) { animation: mr-vt-grid-in .34s cubic-bezier(.2, .7, .2, 1) both; }
::view-transition-old(mr-vt-cat-text), ::view-transition-old(mr-vt-cat-media) { animation-duration: .18s; }
::view-transition-new(mr-vt-cat-text), ::view-transition-new(mr-vt-cat-media) { animation-duration: .3s; }
@keyframes mr-vt-grid-out { to { opacity: 0; transform: translateY(-10px); } }
@keyframes mr-vt-grid-in { from { opacity: 0; transform: translateY(16px); } }

@media (prefers-reduced-motion: reduce) {
    @view-transition { navigation: none; }
}

/* Tarjetas de talla/tamaño (lista desplegable pintada como tarjetas): el texto de la
   elegida va en morado, como el borde. */
.product-details-page .attributes ul.option-list.option-list.vv-cards-plain li:has(input:checked) label {
    color: var(--mr-purple) !important;
}

/* Tarjetas de kit: la elegida lleva la línea de shakes en morado. */
.product-details-page .attributes ul.vv-kit li:has(input:checked) .vv-kit-main {
    color: var(--mr-purple);
}

/* VIVRI Wallet (barrido móvil 2026-09-29): la tira trae ~3 % de margen transparente por lado; se recorta para que los logos salgan más grandes. */
.checkout-page .vvcash__logos:has(.vvcash__logo--strip) {
    overflow: hidden;
    max-width: 420px;
}

/* Lista de deseos en móvil (barrido 2026-09-29): el botón de correo sólo cuando cambió una cantidad, salvo que sea "Enviar a un amigo". */
@media (max-width: 767px) {
    .wishlist-page form:not(.is-dirty) .update-email-button:not(:has(.email-a-friend-btn)) {
        display: none;
    }
}

/* === Barrido móvil 2026-10-01 · agente F2 (reglas con :has(), fuera de modern-refresh.css) === */
/* --- Formularios de dirección de Mi cuenta: el asterisco de obligatorio pegado a la etiqueta (#44) --- */
.acc-page .acc-billaddr .inputs.half-width-address:has(.required, .form-title-rquired) label::after,
.acc-page .acc-shipaddr .inputs.half-width-address:has(.required, .form-title-rquired) label::after {
    content: " *"; color: #c0392b; font-weight: 700;
}
/* --- el Estado de la factura MX sin elegir sale en gris, como placeholder (#21) --- */
.acc-page .acc-billaddr #BillingNewAddress_StateProvinceId:has(option[value="0"]:checked) { color: var(--mr-text-muted); }
/* === fin agente F2 === */

