body.spwsv-simple{
    --spwsv-space-xxs: 4px;
    --spwsv-space-xs: 8px;
    --spwsv-space-sm: 10px;
    --spwsv-space-md: 12px;
    --spwsv-space-lg: 14px;
    --spwsv-space-xl: 16px;
    --spwsv-space-2xl: 18px;
    --spwsv-space-3xl: 22px;
    --spwsv-space-4xl: 26px;
    --spwsv-space-5xl: 60px;

    --spwsv-radius: 12px;
    --spwsv-radius-sm: 10px;
    --spwsv-radius-xs: 8px;
    --spwsv-radius-pill: 999px;

    --spwsv-container-width: 1200px;
    --spwsv-sidebar-width: 360px;

    --spwsv-logo-max-width: 180px;
    --spwsv-logo-max-height: 44px;

    /*
     * Fallback neutro para "Sin tema" (theme === 'none'): con ese ajuste
     * no se encola sp-checkout-steps-theme-common.css ni theme-light/dark.css
     * (ver enqueue_assets() en class-sp-wsv-module-checkout-steps.php), que
     * son los que normalmente redefinen estas variables. Sin un valor real
     * aquí (inherit no sirve: no hay nada que heredar de una custom property
     * que el padre nunca definió) el layout quedaba sin bordes/colores. El
     * stepper y las cards siguen funcionando con un aspecto neutro; cuando
     * SÍ hay tema, theme-light.css/theme-dark.css sobreescriben estos mismos
     * valores (cargan después, misma especificidad de selector).
     */
    --spwsv-accent: #111827;
    --spwsv-accent-2: #111827;
    --spwsv-accent-2-ring: rgba(17,24,39,.18);
    --spwsv-on-accent: #ffffff;

    --spwsv-text: #111827;
    --spwsv-muted: #6b7280;

    --spwsv-page-bg: #f6f7f9;
    --spwsv-panel-bg: #ffffff;
    --spwsv-sidebar-bg: #ffffff;
    --spwsv-split-bg: var(--spwsv-page-bg);

    --spwsv-page-bg-split-main: #ffffff;
    --spwsv-page-bg-split-side: #f6f7f9;

    --spwsv-border: #e5e7eb;
    --spwsv-border-soft: #eef0f3;

    --spwsv-danger: #ef4444;

    --spwsv-font-size-xs: 12px;
    --spwsv-font-size-sm: 13px;
    --spwsv-font-size-md: 14px;
    --spwsv-font-size-lg: 16px;
    --spwsv-font-size-xl: 18px;
    --spwsv-line-height-tight: 1.1;
    --spwsv-line-height-snug: 1.2;

    --spwsv-control-min-height: 42px;
    --spwsv-button-min-height: 44px;

    --spwsv-stepper-num-size: 28px;
    --spwsv-stepper-header-num-size: 30px;
    --spwsv-stepper-header-border-width: 2px;

    --sp-wsv-sidebar-thumb-size: 52px;
    --sp-wsv-sidebar-thumb-qty-size: 22px;
}

/*
 * Spinner de carga (jQuery blockUI, usado por WooCommerce core en
 * block()/unblock() — ver cart.js "quantity_update"/"item_remove_clicked",
 * checkout.js "update_order_review"). Por defecto WooCommerce pinta un
 * loader.svg girando (.blockUI.blockOverlay::before, ver woocommerce.css)
 * — bug reportado: "círculo feo". Se sustituye por un anillo fino en el
 * color de marca, mismo spinner en TODAS las zonas bloqueadas (carrito,
 * checkout, sidebar) ya que todas usan el mismo mecanismo de WooCommerce.
 */
body.spwsv-simple .blockUI.blockOverlay::before{
    width: 22px;
    height: 22px;
    margin-left: -11px;
    margin-top: -11px;
    background: none;
    border: 2px solid var(--spwsv-border);
    border-top-color: var(--spwsv-accent);
    border-radius: 50%;
    animation: spwsv-spin .6s linear infinite;
}

@keyframes spwsv-spin{
    to{ transform: rotate(360deg); }
}

body.spwsv-simple #add_payment_method .cart-collaterals .cart_totals tr td,
body.spwsv-simple #add_payment_method .cart-collaterals .cart_totals tr th,
body.spwsv-simple.woocommerce-cart .cart-collaterals .cart_totals tr td,
body.spwsv-simple.woocommerce-cart .cart-collaterals .cart_totals tr th,
body.spwsv-simple.woocommerce-checkout .cart-collaterals .cart_totals tr td,
body.spwsv-simple.woocommerce-checkout .cart-collaterals .cart_totals tr th{
    border-top: none;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps{
    --spwsv-container-width: 1040px;
    --spwsv-sidebar-width: 420px;
    --spwsv-page-bg: var(--spwsv-page-bg-split-main);
    --spwsv-sidebar-bg: var(--spwsv-page-bg-split-side);
    --spwsv-split-bg: var(--spwsv-page-bg-split-side);
}

body.spwsv-simple.woocommerce-order-pay.sp-wsv-distribution-minimal-steps,
body.spwsv-simple.sp-wsv-checkout-login-required.sp-wsv-distribution-minimal-steps{
    --spwsv-page-bg: var(--spwsv-page-bg-split-main);
    --spwsv-sidebar-bg: var(--spwsv-page-bg-split-main);
    --spwsv-split-bg: var(--spwsv-page-bg-split-main);
}

/* ============================================================
   Header / Footer minimal
   ============================================================ */
.spwsv-simple-header{
    background: var(--spwsv-panel-bg);
    border-bottom: 1px solid var(--spwsv-border);
}

.spwsv-simple-header-inner{
    max-width: var(--spwsv-container-width);
    margin: 0 auto;
    padding: var(--spwsv-space-lg) var(--spwsv-space-xl);
    display: flex;
    align-items: center;
    justify-content: space-between;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-simple-header-inner,
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-steps-nav{
    padding-left: 0;
    padding-right: 0;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-steps-nav{
    margin-top: 0;
    margin-bottom: 0;
}

/*
 * Excepción al margin-bottom:0 de arriba (pensado para el header del
 * checkout) — en el carrito (step 1) el breadcrumb queda pegado al aviso
 * "Cart updated."/a la card de productos sin ningún aire (bug reportado).
 */
body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .spwsv-steps-nav{
    margin-bottom: var(--spwsv-space-xl);
}

.spwsv-simple-logo{
    display: inline-flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
}

/* Cuando hay custom logo: WP imprime <a class="custom-logo-link"><img ...></a> */
.spwsv-simple-logo .custom-logo-link{
    display: inline-flex;
    align-items: center;
    text-decoration: none;
    gap: 10px;
}

.spwsv-simple-logo img.custom-logo,
.spwsv-simple-logo .custom-logo-link img,
.spwsv-simple-logo svg{
    max-width: var(--spwsv-logo-max-width);
    max-height: var(--spwsv-logo-max-height);
    width: auto;
    height: auto;
}

.sp-wsv-site-name-link,
.spwsv-site-name{
    font-size: var(--spwsv-font-size-xl);
    font-weight: 700;
    color: var(--spwsv-text);
    text-decoration: none;
}

.spwsv-simple-main .spwsv-simple-container{
    max-width: var(--spwsv-container-width);
    margin: 0 auto;
    padding: var(--spwsv-space-2xl) var(--spwsv-space-xl) var(--spwsv-space-5xl);
}

/*
 * Móvil: el padding lateral fijo (--spwsv-space-xl, 16px) deja mucho margen
 * visual desperdiciado a los lados de las cards en pantallas pequeñas (el
 * checkout se ve "flotando" en el centro con mucho gris alrededor, bug
 * reportado: "haz que ocupe más vw"). Se reduce a la mitad solo en móvil —
 * el padding interno de las cards (--spwsv-space-xl) sigue dando aire al
 * contenido, así que el contenedor exterior no necesita tanto extra.
 */
@media (max-width: 480px){
    .spwsv-simple-main .spwsv-simple-container{
        padding-left: var(--spwsv-space-xs);
        padding-right: var(--spwsv-space-xs);
    }
}

/* ============================================================
   Stepper base (Woo skin)
   ============================================================ */

.spwsv-steps-nav{
    margin: var(--spwsv-space-sm) 0 var(--spwsv-space-2xl);
    max-width: var(--spwsv-container-width);
    margin-left: auto;
    margin-right: auto;
    padding: var(--spwsv-space-lg) var(--spwsv-space-xl);
}

body.spwsv-simple .woocommerce-notices-wrapper,
body.spwsv-simple .woocommerce-form-login-toggle,
body.spwsv-simple .woocommerce-form.woocommerce-form-login.login{
    max-width: var(--spwsv-container-width);
    margin-left: auto;
    margin-right: auto;
    padding-top: var(--spwsv-space-lg);
}

body.spwsv-simple .woocommerce-form.woocommerce-form-login.login{
    margin-bottom: var(--spwsv-space-lg);
}

body.spwsv-simple #woocommerce-checkout-form-coupon{
    margin-bottom: var(--spwsv-space-lg);
}

.spwsv-cart-notices{
    max-width: var(--spwsv-container-width);
    margin: 0 auto;
}

.spwsv-cart-notices-inner{
    max-width: none;
}

/* En minimal-steps y shopify el notice del carrito ("Cart updated.", etc.)
   se imprime dentro de .woocommerce-cart-form, para que quede contenido en
   la columna izquierda en vez de ocupar el ancho completo de la página. */
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-cart-notices--inline,
body.spwsv-simple.sp-wsv-distribution-shopify .spwsv-cart-notices--inline{
    display: block;
    width: 100%;
    max-width: none;
    margin: 0 0 var(--spwsv-space-xl);
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-cart-notices--inline .spwsv-cart-notices-inner,
body.spwsv-simple.sp-wsv-distribution-shopify .spwsv-cart-notices--inline .spwsv-cart-notices-inner{
    max-width: none;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-cart-notices--inline .woocommerce-message,
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-cart-notices--inline .woocommerce-error,
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-cart-notices--inline .woocommerce-info,
body.spwsv-simple.sp-wsv-distribution-shopify .spwsv-cart-notices--inline .woocommerce-message,
body.spwsv-simple.sp-wsv-distribution-shopify .spwsv-cart-notices--inline .woocommerce-error,
body.spwsv-simple.sp-wsv-distribution-shopify .spwsv-cart-notices--inline .woocommerce-info{
    width: 100%;
    max-width: none;
    box-sizing: border-box;
}

/*
 * Ancho consistente del aviso "Cart updated."/errores (p.ej. tras cambiar
 * cantidad o aplicar coupon) en TODAS las distribuciones del carrito, no
 * solo shopify/minimal-steps (bug reportado: no ocupaba el ancho completo
 * frente a la card de productos de debajo).
 */
body.spwsv-simple.spwsv-page-cart .woocommerce-message,
body.spwsv-simple.spwsv-page-cart .woocommerce-error,
body.spwsv-simple.spwsv-page-cart .woocommerce-info{
    width: 100%;
    max-width: none;
    box-sizing: border-box;
}

/*
 * El margen top:0/bottom:2em por defecto de WooCommerce (ver woocommerce.css,
 * .woocommerce-message{margin:0 0 2em}) deja demasiado hueco en pantallas
 * pequeñas, donde cada rem cuenta más (bug reportado: "baja demasiado").
 * Solo se reduce en móvil — en escritorio se deja el espaciado original.
 */
@media (max-width: 768px){
    body.spwsv-simple:is(.spwsv-page-cart, .spwsv-page-checkout) .woocommerce-message,
    body.spwsv-simple:is(.spwsv-page-cart, .spwsv-page-checkout) .woocommerce-error,
    body.spwsv-simple:is(.spwsv-page-cart, .spwsv-page-checkout) .woocommerce-info{
        margin: 0 0 var(--spwsv-space-md);
    }

    body.spwsv-simple:is(.spwsv-page-cart, .spwsv-page-checkout) .woocommerce-message:first-child,
    body.spwsv-simple:is(.spwsv-page-cart, .spwsv-page-checkout) .woocommerce-error:first-child,
    body.spwsv-simple:is(.spwsv-page-cart, .spwsv-page-checkout) .woocommerce-info:first-child{
        margin-top: 0;
    }
}

body.spwsv-simple.spwsv-page-cart .return-to-shop{
    margin-top: var(--spwsv-space-xl);
}

body.spwsv-simple.spwsv-page-cart .return-to-shop a{
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--spwsv-button-min-height);
    padding: var(--spwsv-space-md) var(--spwsv-space-xl);
    border-radius: var(--spwsv-radius-xs);
    font-weight: 700;
    max-width: 240px;
    width: 100%;
}

body.spwsv-simple.sp-wsv-distribution-woocommerce-steps .spwsv-steps-nav{
    padding: var(--spwsv-space-lg) var(--spwsv-space-xl);
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
}

.spwsv-steps-nav--header{
    margin: 0;
    padding: 0;
    max-width: none;
    background: transparent;
    border: 0;
    border-radius: 0;
}

.spwsv-steps-nav--header .spwsv-steps-list{
    display: flex;
    gap: var(--spwsv-space-lg);
    align-items: center;
}

.spwsv-steps-nav--header .spwsv-step-indicator{
    background: transparent;
    border: 0;
    padding: 0;
    opacity: 1;
}

.spwsv-steps-nav--header .spwsv-step-num{
    background: transparent;
    border: var(--spwsv-stepper-header-border-width) solid currentColor;
    color: var(--spwsv-text);
    width: var(--spwsv-stepper-header-num-size);
    height: var(--spwsv-stepper-header-num-size);
    font-size: var(--spwsv-font-size-md);
}

.spwsv-steps-nav--header .spwsv-step-label{
    color: var(--spwsv-text);
    font-weight: 700;
    font-size: var(--spwsv-font-size-xs);
}

body.spwsv-simple.sp-wsv-distribution-woocommerce-steps .spwsv-steps-nav--header .spwsv-step-indicator.is-active .spwsv-step-num{
    background: var(--spwsv-accent);
    border-color: var(--spwsv-accent);
    color: var(--spwsv-on-accent);
}

@media (max-width: 980px){
    body.spwsv-simple.sp-wsv-distribution-woocommerce-steps .spwsv-steps-nav--header
    .spwsv-step-indicator:not(.is-active) .spwsv-step-label {
        display: none;
    }

    body.spwsv-simple.sp-wsv-distribution-woocommerce-steps .spwsv-steps-nav--header{
        padding: var(--spwsv-space-xxs);
        border-radius: var(--spwsv-space-5xl);
    }

    body.spwsv-simple.sp-wsv-distribution-woocommerce-steps .spwsv-steps-nav--header .spwsv-steps-list{
        gap: var(--spwsv-space-xs);
    }

    body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-simple-header-inner{
        padding: var(--spwsv-space-lg) calc( var(--spwsv-space-lg) * 2 ) ;
    }

    body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-steps-nav{
        padding: 0 var(--spwsv-space-xl);
    }
}

.spwsv-steps-list{
    list-style: none;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--spwsv-space-sm);
    padding: 0;
    margin: 0;
}

@media (max-width: 760px){
    .spwsv-steps-list{
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .spwsv-cart-notices{
        padding: 0 var(--spwsv-space-xl);
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce .return-to-shop{
        padding: 0 var(--spwsv-space-xl);
    }
}

@media (max-width: 420px){
    .spwsv-steps-list{
        grid-template-columns: 1fr;
    }
}

.spwsv-step-indicator{
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius-sm);
    padding: var(--spwsv-space-sm) var(--spwsv-space-md);
    display: flex;
    align-items: center;
    gap: var(--spwsv-space-sm);
    opacity: .75;
}

.spwsv-step-indicator.is-active{
    opacity: 1;
    border-color: var(--spwsv-border);
}

.spwsv-step-indicator.is-link a{
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    text-decoration: none;
}


.spwsv-step-indicator.is-anchor a{
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    text-decoration: none;
    color: inherit;
}

.spwsv-step-indicator.is-anchor:hover{
    opacity: 1;
}

.spwsv-step-indicator.is-link:hover{
    opacity: 1;
}

.spwsv-step-num{
    width: var(--spwsv-stepper-num-size);
    height: var(--spwsv-stepper-num-size);
    border-radius: var(--spwsv-radius-pill);
    background: var(--spwsv-accent-2);
    color: var(--spwsv-on-accent);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: var(--spwsv-font-size-sm);
}

.spwsv-step-label{
    font-weight: 600;
    font-size: var(--spwsv-font-size-sm);
    color: var(--spwsv-text);
}

/* ============================================================
   Minimalista por pasos (breadcrumb)
   ============================================================ */
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-steps-list{
    display: flex;
    flex-wrap: nowrap;
    gap: 0;
}

/*
 * En pantallas angostas el breadcrumb (Carrito › Detalles › Envío y
 * pago › Resumen) no cabe en una línea. Antes hacía flex-wrap:wrap,
 * dejando el último paso suelto en una 2ª línea sin relación visual
 * con el resto (bug reportado). En vez de partirlo en dos líneas se
 * mantiene en una sola fila con scroll horizontal — mismo patrón que
 * .woocommerce-checkout-review-order-table en distribution-minimal-steps
 * (ver más abajo en este archivo). Breakpoint subido de 480px a 768px
 * (mismo que el resto de ajustes móviles del carrito): con "Summary"
 * (el paso más largo) el breadcrumb ya no cabía incluso en móviles de
 * ~500-700px, quedando cortado sin scroll (bug reportado).
 */
@media (max-width: 768px){
    body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-steps-list{
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        padding-bottom: 2px;
    }

    body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-steps-list::-webkit-scrollbar{
        display: none;
    }

    body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-indicator{
        flex: 0 0 auto;
        white-space: nowrap;
    }
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-indicator{
    background: transparent;
    border: 0;
    padding: 0;
    opacity: 1;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-indicator + .spwsv-step-indicator:before{
    content: "›";
    color: var(--spwsv-muted);
    margin: 0 var(--spwsv-space-sm);
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-num{
    display: none;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-label{
    font-weight: 500;
    font-size: var(--spwsv-font-size-sm);
    color: var(--spwsv-muted);
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-indicator.is-active .spwsv-step-label{
    color: var(--spwsv-accent);
    font-weight: 600;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-indicator.is-active .spwsv-step-label{
    text-decoration: underline;
    text-underline-offset: 4px;
}

/* ============================================================
   Layout checkout (main + lateral)
   ============================================================ */
   
body.spwsv-simple .woocommerce,
body.spwsv-simple .woocommerce-page,
body.spwsv-simple .woocommerce-checkout,
body.spwsv-simple .woocommerce-cart{
    max-width: none;
    width: auto;
}

.spwsv-checkout-layout{
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--spwsv-sidebar-width);
    grid-template-areas: "main sidebar";
    gap: var(--spwsv-space-xl);
    align-items: start;
}

.spwsv-checkout-main{
    grid-area: main;
}

.spwsv-checkout-sidebar{
    grid-area: sidebar;
    position: sticky;
    top: var(--spwsv-space-2xl);
}

body.spwsv-simple.sp-wsv-layout-sidebar-left .spwsv-checkout-layout,
.spwsv-checkout-layout.spwsv-layout-sidebar-left{
    grid-template-columns: var(--spwsv-sidebar-width) minmax(0, 1fr);
    grid-template-areas: "sidebar main";
}

@media (max-width: 980px){
    .spwsv-checkout-layout{
        grid-template-columns: 1fr;
        grid-template-areas: "main" "sidebar";
    }
    .spwsv-checkout-sidebar{
        position: static;
        top: auto;
    }
}

/*
 * checkout-steps.js (relocateCheckoutNotices) mueve el aviso de error que
 * WooCommerce core inserta con `$checkout_form.prepend(notice)` dentro de
 * .spwsv-checkout-main, para que quede contenido en la columna izquierda
 * y no empuje/desalinee la columna del sidebar.
 */
body.spwsv-simple:is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps) .spwsv-checkout-main > .woocommerce-NoticeGroup-checkout,
body.spwsv-simple:is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps) .spwsv-checkout-main > .woocommerce-error,
body.spwsv-simple:is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps) .spwsv-checkout-main > .woocommerce-message{
    margin: 0 0 var(--spwsv-space-xl);
}

/* Shopify/minimal: layout “split” */
body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-layout{
    grid-template-columns: 1.1fr 0.9fr;
    gap: 0;
}

body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-main{
    background: transparent;
    padding: 0;
}

body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-sidebar{
    background: transparent;
    border-left: 0;
    padding: 0;
}

@media (min-width: 981px){
    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-simple-main .spwsv-simple-container{
        max-width: 100%;
        padding: 0;
    }

    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps.sp-wsv-checkout-login-required .spwsv-simple-main .spwsv-simple-container{
        max-width: var(--spwsv-container-width);
        padding: var(--spwsv-space-2xl) 0 var(--spwsv-space-5xl);
    }

    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-main{
        padding: 26px 26px 26px max(16px, calc((100vw - var(--spwsv-container-width)) / 2 - 6px));
    }

    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-sidebar{
        padding: 26px max(16px, calc((100vw - var(--spwsv-container-width)) / 2)) 26px 26px;
    }
}


/* Panels */
.spwsv-step-panel{
    display: none;
    /* background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius); */
    padding: 0;
    margin-bottom: var(--spwsv-space-xl);
}

.spwsv-step-panel.is-active{
    display: block;
}

.spwsv-step-title{
    margin: 0 0 var(--spwsv-space-lg);
    font-size: var(--spwsv-font-size-xl);
    color: var(--spwsv-text);
}

/* Shopify/minimal: panel sin caja */
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-step-panel{
    background: transparent;
    border: 0;
    border-radius: 0;
    padding: 0;
    margin-bottom: var(--spwsv-space-3xl);
}

/* ============================================================
   Inputs (Shopify minimal)
   ============================================================ */
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details input[type="text"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details input[type="email"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details input[type="tel"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details input[type="password"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details select,
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details textarea{
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius-xs);
    padding: var(--spwsv-space-sm) var(--spwsv-space-md);
    /*
     * NO usar var(--spwsv-control-min-height) (42px) aquí: cards.css
     * centra el floating label contra una caja fija de 3.125rem (50px,
     * ver --spwsv-field-height en cards.css, comentario "debe coincidir
     * con el min-height real del input") — con 42px el label queda
     * centrado contra una altura que el input real ya no tiene, viéndose
     * descentrado respecto al texto/placeholder solo en esta distribución.
     */
    min-height: 3.125rem;
    box-shadow: none;
    color: var(--spwsv-text);
}

/*
 * Campo requerido vacío al intentar avanzar (.woocommerce-invalid, ver
 * validateStep2/validateStep3 en sp-checkout-steps.js): la regla de arriba
 * usa el ID #customer_details para especificidad alta y fija el borde en
 * --spwsv-border sin importar el estado, así que hace falta igualar esa
 * especificidad (mismo ID) + .woocommerce-invalid para que el rojo gane.
 */
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details .woocommerce-invalid input[type="text"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details .woocommerce-invalid input[type="email"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details .woocommerce-invalid input[type="tel"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details .woocommerce-invalid input[type="password"],
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details .woocommerce-invalid select,
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details .woocommerce-invalid textarea{
    border-color: var(--spwsv-danger);
}

/*
 * Solo tipografía: el resto del comportamiento del label (floating,
 * position:absolute, etc.) lo define cards.css
 * (.spwsv-fields-grid .spwsv-field-cell .form-row label), que se
 * encola DESPUÉS de base.css y gana esa parte de la cascada.
 */
body.spwsv-simple.sp-wsv-distribution-minimal-steps #customer_details label{
    font-weight: 600;
    font-size: var(--spwsv-font-size-sm);
    color: var(--spwsv-text);
}

body.spwsv-simple .spwsv-step-title,
body.spwsv-simple .spwsv-step-title,
body.spwsv-simple .woocommerce-additional-fields h3,
body.spwsv-simple .woocommerce-shipping-fields h3,
body.spwsv-simple .woocommerce-billing-fields h3,
body.spwsv-simple .woocommerce-billing-fields h3{
    font-size: var(--spwsv-font-size-xl);
    font-weight: 700;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .woocommerce-invalid input,
body.spwsv-simple.sp-wsv-distribution-minimal-steps .woocommerce-invalid select,
body.spwsv-simple.sp-wsv-distribution-minimal-steps .woocommerce-invalid textarea{
    border-color: var(--spwsv-danger);
}

/* ============================================================
   Sidebar summary
   ============================================================ */
.spwsv-sidebar-box{
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
    padding: var(--spwsv-space-lg);
    /* @keyframes sp-fade-in-up definido en cards.css (se carga después,
       pero el navegador resuelve todas las reglas del documento junto —
       no hace falta duplicar el @keyframes aquí). Sin delay: el sidebar
       (envío/pago/totales) aparece junto con la primera card de contacto. */
    animation: sp-fade-in-up 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
}

@media (prefers-reduced-motion: reduce) {
    .spwsv-sidebar-box{
        animation: none;
    }
}

.spwsv-sidebar-title{
    font-weight: 800;
    margin: 0 0 var(--spwsv-space-sm);
    font-size: var(--spwsv-font-size-md);
    color: var(--spwsv-text);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-items{
    display: grid;
    gap: var(--spwsv-space-md);
    margin-bottom: var(--spwsv-space-md);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-item{
    display: grid;
    grid-template-columns: var(--sp-wsv-sidebar-thumb-size) minmax(0,1fr);
    gap: var(--spwsv-space-md);
    align-items: center;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-thumb{
    position: relative;
    width: var(--sp-wsv-sidebar-thumb-size);
    height: var(--sp-wsv-sidebar-thumb-size);
    border-radius: var(--spwsv-radius-sm);
    border: 1px solid var(--spwsv-border-soft);
    background: var(--spwsv-panel-bg);
    display: flex;
    align-items: center;
    justify-content: center;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-thumb img{
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
    border-radius: 8px;
    display: block;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-thumb-qty{
    position: absolute;
    top: -8px;
    right: -8px;
    width: var(--sp-wsv-sidebar-thumb-qty-size);
    height: var(--sp-wsv-sidebar-thumb-qty-size);
    border-radius: var(--spwsv-radius-pill);
    background: var(--spwsv-accent-2);
    color: var(--spwsv-on-accent);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: var(--spwsv-font-size-xs);
    font-weight: 700;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-item-title{
    font-weight: 600;
    margin-bottom: 4px;
    font-size: var(--spwsv-font-size-sm);
    color: var(--spwsv-text);
    line-height: var(--spwsv-line-height-snug);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-item-subtotal{
    color: var(--spwsv-text);
    font-size: var(--spwsv-font-size-sm);
    font-weight: 600;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals{
    padding-top: var(--spwsv-space-md);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-coupon{
    margin: 0 0 var(--spwsv-space-sm);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-coupon-form{
    display: flex;
    gap: var(--spwsv-space-xs);
    align-items: center;
    flex-wrap: wrap;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-coupon-form input[type="text"]{
    flex: 1;
    min-width: 160px;
    border-radius: var(--spwsv-radius-sm);
    border: 1px solid var(--spwsv-border);
    background: var(--spwsv-panel-bg);
    color: var(--spwsv-text);
    padding: var(--spwsv-space-xs) var(--spwsv-space-sm);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-coupon-form button{
    border-radius: var(--spwsv-radius-sm);
}

#sp-wsv-sidebar-summary .sp-wsv-coupon-status{
    width: 100%;
    color: var(--spwsv-muted);
    font-size: var(--spwsv-font-size-xs);
    margin-top: 4px;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table{
    width: 100%;
    border-collapse: collapse;
    border: 0;
    margin-bottom: 0;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table th,
#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table td,
body.spwsv-page-cart .cart_totals .shop_table th,
body.spwsv-page-cart .cart_totals .shop_table td{
    padding: var(--spwsv-space-xs) 0;
    border-bottom: 1px solid var(--spwsv-border-soft);
    font-size: var(--spwsv-font-size-sm);
    vertical-align: top;
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table th,
body.spwsv-page-cart .cart_totals .shop_table th{
    text-align: left;
    font-weight: 600;
    color: var(--spwsv-text);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table td,
body.spwsv-page-cart .cart_totals .shop_table td{
    text-align: right;
    font-weight: 600;
    color: var(--spwsv-text);
}

#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table tr.order-total th,
#sp-wsv-sidebar-summary .sp-wsv-sidebar-totals-table tr.order-total td,
body.spwsv-page-cart .cart_totals .shop_table tr.order-total th,
body.spwsv-page-cart .cart_totals .shop_table tr.order-total td{
    border-bottom: 0;
    padding-bottom: 0;
    font-size: var(--spwsv-font-size-lg);
    font-weight: 800;
}

body.spwsv-simple .woocommerce ul#shipping_method li{
    display: flex;
    align-items: center;
    flex-direction: row-reverse;
    gap: 14px;
}

body.spwsv-simple .woocommerce-shipping-destination{
    margin-top: 20px;
}

body.spwsv-simple .woocommerce ul#shipping_method li input,
body.spwsv-simple .woocommerce ul#shipping_method li label,
body.spwsv-simple .woocommerce ul.wc_payment_methods li input,
body.spwsv-simple .woocommerce ul.wc_payment_methods li label{
    cursor: pointer;
}

#sp-wsv-sidebar-summary .spwsv-shipping-destination{
    display: block;
    margin-top: 4px;
    font-weight: 500;
    color: var(--spwsv-muted);
    font-size: var(--spwsv-font-size-xs);
}

#sp-wsv-sidebar-summary .spwsv-sidebar-edit{
    margin: var(--spwsv-space-sm) 0 0;
}

#sp-wsv-sidebar-summary .spwsv-sidebar-edit a{
    color: var(--spwsv-accent);
    text-decoration: none;
    font-weight: 600;
}

/* Shopify/minimal: sidebar “flat” */
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-sidebar-box{
    background: transparent;
    border: 0;
    border-radius: 0;
    padding: 0;
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-sidebar-title{
    display: none;
}

body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-simple-main,
body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .spwsv-simple-main{
    background: linear-gradient(90deg, var(--spwsv-page-bg) 0 55%, var(--spwsv-split-bg) 55% 100%);
    min-height: 100vh;
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty.sp-wsv-distribution-minimal-steps .spwsv-simple-main{
    background: var(--spwsv-page-bg);
}

body.spwsv-simple .sp-wsv-order-summary{
    width: 100%;
}

/*
 * El tema activo (hello-elementor-child/style.css) tiene una regla global
 * "button:not(.sp-catalogo-buscar-btn):not(.sp-open-search-btn):hover" que
 * aplica transform+box-shadow a CUALQUIER <button> del sitio — este toggle
 * es un <button> normal y lo heredaba sin querer (bug reportado:
 * "box-shadow raro al desplegar"). Se neutraliza aquí en vez de tocar el
 * tema (misma especificidad de clases que la regla del tema, pero con un
 * elemento extra — body+button — que la gana sin necesitar !important).
 */
body.spwsv-simple button.sp-wsv-order-summary__toggle:hover{
    transform: none;
    box-shadow: none;
}

body.spwsv-simple button.sp-wsv-order-summary__toggle{
    width: 100%;
    display: none;
    align-items: center;
    justify-content: space-between;
    gap: var(--spwsv-space-md);
    cursor: pointer;
    user-select: none;
    font-weight: 700;
    color: var(--spwsv-text);
    border: 0;
    background: transparent;
    padding: 0;
}

body.spwsv-simple .sp-wsv-order-summary__label{
    display: inline-flex;
    align-items: center;
    gap: var(--spwsv-space-xs);
    color: var(--spwsv-text);
    font-weight: 600;
    font-size: var(--spwsv-font-size-sm);
}

body.spwsv-simple .sp-wsv-order-summary__chevron{
    flex-shrink: 0;
    width: 14px;
    height: 14px;
    transition: transform 0.2s ease;
    color: var(--spwsv-muted);
}

body.spwsv-simple .sp-wsv-order-summary.is-open .sp-wsv-order-summary__chevron{
    transform: rotate(180deg);
}

body.spwsv-simple .sp-wsv-order-summary__amount{
    font-weight: 800;
    font-size: var(--spwsv-font-size-md);
    color: var(--spwsv-text);
}

body.spwsv-simple .sp-wsv-order-summary__body{
    padding-top: var(--spwsv-space-md);
}

@media (max-width: 980px){
    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-simple-main,
    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .spwsv-simple-main{
        background: var(--spwsv-page-bg);
    }

    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-main,
    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-sidebar{
        padding: var(--spwsv-space-2xl) 0px;
    }

    body.spwsv-simple.spwsv-page-checkout.sp-wsv-distribution-minimal-steps .spwsv-checkout-layout{
        grid-template-columns: 1fr;
        grid-template-areas: "main" "sidebar";
    }

    body.spwsv-simple .sp-wsv-order-summary{
        background: var(--spwsv-panel-bg);
        border: 1px solid var(--spwsv-border);
        border-radius: var(--spwsv-radius);
        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
        overflow: hidden;
    }

    body.spwsv-simple button.sp-wsv-order-summary__toggle{
        display: flex;
        padding: var(--spwsv-space-md) var(--spwsv-space-lg);
        background: transparent;
    }

    body.spwsv-simple .sp-wsv-order-summary.is-open button.sp-wsv-order-summary__toggle{
        border-bottom: 1px solid var(--spwsv-border-soft);
    }

    body.spwsv-simple .sp-wsv-order-summary__body{
        display: none;
        padding: 0 var(--spwsv-space-lg);
    }

    body.spwsv-simple .sp-wsv-order-summary.is-open .sp-wsv-order-summary__body{
        display: block;
        padding: var(--spwsv-space-md) var(--spwsv-space-lg) var(--spwsv-space-lg);
    }
}

@media (min-width: 981px){
    body.spwsv-simple button.sp-wsv-order-summary__toggle{
        display: none;
    }

    body.spwsv-simple .sp-wsv-order-summary__body{
        display: block;
        padding-top: 0;
    }
}

/* ============================================================
   Sidebar actions (buttons)
   ============================================================ */
.spwsv-sidebar-actions{
    margin-top: var(--spwsv-space-md);
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
    padding: var(--spwsv-space-md);
}

.spwsv-sidebar-actions-group{
    display: none;
    justify-content: flex-end;
    gap: var(--spwsv-space-sm);
}

.spwsv-sidebar-actions-group .spwsv-btn-secondary{
    margin-right: auto;
}

.spwsv-sidebar-actions-group.is-active{
    display: flex;
}

.spwsv-sidebar-actions-row{
    display: flex;
    justify-content: space-between;
    gap: var(--spwsv-space-sm);
}

.spwsv-sidebar-actions-group[data-step-actions="4"].is-active{
    display: block;
}

.spwsv-sidebar-actions-group[data-step-actions="4"] .spwsv-sidebar-actions-row{
    margin-bottom: var(--spwsv-space-sm);
}

.spwsv-sidebar-actions-group button.button,
.spwsv-sidebar-actions-group a.button{
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
}

.spwsv-sidebar-placeorder{
    width: 100%;
}

.spwsv-sidebar-placeorder .place-order{
    margin: 0;
}

body.spwsv-simple.sp-wsv-theme-light .woocommerce button.button.spwsv-btn-primary,
body.spwsv-simple.sp-wsv-theme-dark .woocommerce button.button.spwsv-btn-primary,
body.spwsv-simple.sp-wsv-theme-light .spwsv-btn-primary,
body.spwsv-simple.sp-wsv-theme-dark .spwsv-btn-primary{
    background: var(--spwsv-accent);
    border-color: var(--spwsv-accent);
    color: var(--spwsv-on-accent);
    font-weight: 700;
}

body.spwsv-simple.sp-wsv-theme-light .woocommerce button.button.spwsv-btn-secondary,
body.spwsv-simple.sp-wsv-theme-dark .woocommerce button.button.spwsv-btn-secondary,
body.spwsv-simple.sp-wsv-theme-light .spwsv-btn-secondary,
body.spwsv-simple.sp-wsv-theme-dark .spwsv-btn-secondary{
    background: var(--spwsv-panel-bg);
    border-color: var(--spwsv-border);
    color: var(--spwsv-text);
    font-weight: 600;
}

/* Shopify/minimal: acciones pegadas al layout, sin caja separada
   (solo en desktop — en mobile la barra pasa a position:fixed vía
   cards.css y necesita fondo opaco + su propio padding, ver el
   @media max-width:768px más abajo, que reinstaura ambas cosas con
   más especificidad para ganarle a esta regla). */
body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-sidebar-actions{
    background: transparent;
    border: 0;
    border-radius: 0;
    padding: 0;
    margin-top: var(--spwsv-space-2xl);
}

@media (max-width: 768px){
    /*
     * cards.css (.spwsv-sidebar-actions { position:fixed; ... }) se
     * carga DESPUÉS de este archivo, pero la regla de minimal-steps de
     * arriba tiene más especificidad (2 clases en body) y ganaba en
     * mobile también, dejando la barra fija sin fondo — el contenido
     * del formulario se veía "a través" del bottom bar (bug reportado).
     */
    body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-sidebar-actions{
        background: var(--spwsv-panel-bg);
        padding: var(--spwsv-space-md) var(--spwsv-space-xl);
        padding-bottom: max(var(--spwsv-space-md), env(safe-area-inset-bottom, 0px));
        margin-top: 0;
    }
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-btn-primary{
    min-height: var(--spwsv-button-min-height);
    padding: var(--spwsv-space-md) var(--spwsv-space-xl);
    border-radius: var(--spwsv-radius-xs);
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .spwsv-btn-secondary{
    border-radius: var(--spwsv-radius-xs);
}

/* ============================================================
   Paso 3/4: títulos
   ============================================================ */
.sp-title-step-4{ display: none; }

.spwsv-checkout-steps-wrapper[data-step="4"] .sp-title-step-3{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="4"] .sp-title-step-4{ display: block; }

/* ============================================================
   Contenido de WooCommerce (order review) según step
   ============================================================ */

/* Step 3: mostrar SOLO fila de envío (tabla) y métodos de pago (sin botón final) */
.spwsv-checkout-steps-wrapper[data-step="3"] #order_review .woocommerce-checkout-review-order-table thead{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="3"] #order_review .woocommerce-checkout-review-order-table tbody{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="3"] #order_review .woocommerce-checkout-review-order-table tfoot tr:not(.woocommerce-shipping-totals){ display: none; }
.spwsv-checkout-steps-wrapper[data-step="3"] #order_review .woocommerce-checkout-payment .place-order{ display: none; }

/* Step 4: mostrar resumen completo + botón final, ocultar la card "Payment"
   entera (se eligió en step 3) — antes solo se ocultaba .payment_methods
   (el <ul>), dejando la cabecera "Payment" (<summary>, ver
   templates/woocommerce/checkout/payment.php) huérfana y visible sin
   contenido debajo. */
.spwsv-checkout-steps-wrapper[data-step="4"] #order_review .woocommerce-checkout-payment details.sp-wsv-checkout-card{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="4"] #order_review .woocommerce-checkout-payment .payment_methods{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="4"] #order_review .woocommerce-checkout-payment .place-order{ display: block; }
.spwsv-checkout-steps-wrapper[data-step="4"] #order_review .woocommerce-checkout-review-order-table{ display: none; }

.spwsv-checkout-steps-wrapper[data-step="3"] [data-spwsv-step4-summary="1"]{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="4"] [data-spwsv-step4-summary="1"]{ display: block; }

.spwsv-checkout-steps-wrapper[data-step="4"] #sp-wsv-sidebar-summary .sp-wsv-sidebar-items{ display: none; }
.spwsv-checkout-steps-wrapper[data-step="4"] #sp-wsv-sidebar-summary .sp-wsv-sidebar-coupon{ display: none; }

.spwsv-checkout-steps-wrapper[data-step="4"] .spwsv-sidebar-actions-group[data-step-actions="4"] [data-spwsv-prev]{ display: none; }

/*
 * Sin el gate [data-step="4"] (antes lo tenía) — shopify (form-checkout.php)
 * no usa stepper, así que el <form> nunca recibe ese atributo, y el botón
 * en la barra fija se quedaba sin estos estilos (ancho/padding/radius) —
 * bug reportado: "el botón no se ve como las demás plantillas". El
 * contexto ".spwsv-sidebar-placeorder" ya implica "botón en la barra fija"
 * de sobra, sin necesitar el atributo.
 */
.spwsv-sidebar-placeorder #place_order{
    width: 100%;
    min-height: var(--spwsv-button-min-height);
    padding: var(--spwsv-space-md) var(--spwsv-space-xl);
    border-radius: var(--spwsv-radius-xs);
    font-weight: 700;
}

[data-spwsv-step4-summary="1"]{
    margin: 0 0 var(--spwsv-space-xl);
}

.spwsv-step4-count{
    color: var(--spwsv-muted);
    font-weight: 700;
    margin-bottom: var(--spwsv-space-md);
}

.spwsv-step4-items{
    display: grid;
    gap: var(--spwsv-space-md);
    margin-bottom: var(--spwsv-space-xl);
}

.spwsv-step4-item{
    display: grid;
    grid-template-columns: 70px 1fr auto;
    gap: var(--spwsv-space-md);
    align-items: center;
    padding: var(--spwsv-space-lg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
    background: var(--spwsv-panel-bg);
}

.spwsv-step4-thumb{
    position: relative;
    width: 70px;
    height: 70px;
    border-radius: var(--spwsv-radius-sm);
    overflow: hidden;
    background: rgba(0,0,0,.03);
    display: flex;
    align-items: center;
    justify-content: center;
}

.spwsv-step4-thumb img{
    max-width: 100%;
    height: auto;
    display: block;
}

.spwsv-step4-qty{
    position: absolute;
    top: 6px;
    right: 6px;
    min-width: 22px;
    height: 22px;
    padding: 0 6px;
    border-radius: 999px;
    background: var(--spwsv-accent);
    color: var(--spwsv-on-accent);
    font-size: 12px;
    line-height: 22px;
    font-weight: 800;
    text-align: center;
}

.spwsv-step4-item-title{
    font-weight: 800;
    color: var(--spwsv-text);
}

.spwsv-step4-item-meta{
    color: var(--spwsv-muted);
    font-size: var(--spwsv-font-size-sm);
    margin-top: 2px;
}

.spwsv-step4-item-subtotal{
    font-weight: 800;
    color: var(--spwsv-text);
    font-size: var(--spwsv-font-size-lg);
}

.spwsv-step4-cards{
    display: grid;
    gap: var(--spwsv-space-md);
}

.spwsv-step4-card{
    padding: var(--spwsv-space-lg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
    background: var(--spwsv-panel-bg);
}

.spwsv-step4-card-head{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--spwsv-space-md);
    margin-bottom: var(--spwsv-space-xs);
}

.spwsv-step4-card-title{
    font-weight: 800;
    color: var(--spwsv-text);
}

.spwsv-step4-card-action{
    border-radius: var(--spwsv-radius-xs);
}

.spwsv-step4-card-value{
    color: var(--spwsv-muted);
    font-weight: 600;
    line-height: 1.5;
}

/* Shopify/minimal: suaviza tabla */
body.spwsv-simple.sp-wsv-distribution-minimal-steps .woocommerce-checkout-review-order-table{
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius-sm);
    overflow: hidden;
    background: var(--spwsv-panel-bg);
}

body.spwsv-simple.sp-wsv-distribution-minimal-steps .woocommerce-checkout-review-order-table th,
body.spwsv-simple.sp-wsv-distribution-minimal-steps .woocommerce-checkout-review-order-table td{
    border-color: var(--spwsv-border-soft);
}

/* ============================================================
   Cart page: mismo look base
   ============================================================ */
body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form,
body.spwsv-simple.spwsv-page-cart .cart-collaterals{
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
    padding: var(--spwsv-space-xl);
    margin: 0 0 var(--spwsv-space-xl);
    max-width: none;
    /* @keyframes sp-fade-in-up definido en cards.css (mismo lenguaje de
       entrada que las cards del checkout/thank you). */
    animation: sp-fade-in-up 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
}

body.spwsv-simple.spwsv-page-cart .cart-collaterals{
    animation-delay: 0.1s;
}

@media (prefers-reduced-motion: reduce) {
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form,
    body.spwsv-simple.spwsv-page-cart .cart-collaterals{
        animation: none;
    }
}

body.spwsv-simple.spwsv-page-cart .woocommerce{
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--spwsv-sidebar-width);
    gap: var(--spwsv-space-xl);
    align-items: start;
}

body.spwsv-simple .woocommerce-notices-wrapper:empty{
    display: none;
}

/* En shopify, minimal-steps y woocommerce-steps los avisos del checkout se
   imprimen dentro de la columna izquierda (.spwsv-checkout-main-notices)
   para no empujar el layout entero (incluida la columna del sidebar). Antes
   woocommerce-steps se quedaba fuera de este override (bug reportado: el
   aviso "Please review the required fields..." no ocupaba el ancho
   completo de la columna, igual que el del carrito en step 1). */
body.spwsv-simple.spwsv-page-checkout:is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-minimal-steps, .sp-wsv-distribution-woocommerce-steps) .spwsv-checkout-main-notices .woocommerce-notices-wrapper{
    max-width: none;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    margin-bottom: var(--spwsv-space-xl);
}

/* El <ul class="woocommerce-error">/.woocommerce-message en sí mismo tiene
   width:auto por defecto (WooCommerce core) — sin esto se quedaba más
   estrecho que la card de debajo, igual que el aviso del carrito. */
body.spwsv-simple.spwsv-page-checkout:is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-minimal-steps, .sp-wsv-distribution-woocommerce-steps) .spwsv-checkout-main-notices .woocommerce-notices-wrapper :is(.woocommerce-error, .woocommerce-message){
    width: 100%;
    box-sizing: border-box;
}

body.spwsv-simple.spwsv-page-checkout:is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-minimal-steps, .sp-wsv-distribution-woocommerce-steps) .spwsv-checkout-main-notices .woocommerce-notices-wrapper:empty{
    display: none;
    margin-bottom: 0;
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form{
    grid-column: 1;
}

body.spwsv-simple.spwsv-page-cart .cart-collaterals{
    grid-column: 2;
}

body.spwsv-simple.spwsv-page-cart .woocommerce .cart-empty,
body.spwsv-simple.spwsv-page-cart .woocommerce .return-to-shop{
    grid-column: 1 / -1;
}

body.spwsv-simple.spwsv-page-cart .woocommerce .return-to-shop{
    max-width: var(--spwsv-container-width);
    margin: auto;
    width: 100%;
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .woocommerce{
    grid-template-columns: 1fr;
}

/*
 * Estado "carrito vacío" (ver page-cart.php, .spwsv-cart-empty-*) — nunca
 * tuvo CSS propio. El SVG (cart-empty.svg) trae width/height="800px"
 * incrustados, así que sin esto se renderizaba a tamaño nativo (bug
 * reportado: "se ve el icono grande y sin estilos").
 */
body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .spwsv-cart-empty-state{
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: var(--spwsv-space-lg);
    max-width: 28rem;
    margin: 0 auto;
    padding: var(--spwsv-space-3xl) var(--spwsv-space-md);
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .spwsv-cart-empty-icon img{
    width: 96px;
    height: 96px;
    object-fit: contain;
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .spwsv-cart-empty-content{
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--spwsv-space-sm);
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .spwsv-cart-empty-title{
    margin: 0;
    font-size: var(--spwsv-font-size-xl);
    font-weight: 800;
    color: var(--spwsv-text);
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .spwsv-cart-empty-message{
    margin: 0;
    font-size: var(--spwsv-font-size-sm);
    color: var(--spwsv-muted, #6b7280);
}

@media (max-width: 980px){
    body.spwsv-simple.spwsv-page-cart .woocommerce{
        grid-template-columns: 1fr;
    }
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form,
    body.spwsv-simple.spwsv-page-cart .cart-collaterals{
        grid-column: auto;
    }
}

/*
 * Barra inferior fija con Total + "Proceed to checkout" — las 3
 * distribuciones del módulo (shopify, woocommerce-steps, minimal-steps).
 * Mismo breakpoint y lenguaje visual que .spwsv-sidebar-actions en el
 * checkout (ver cards.css). Antes el botón quedaba suelto al final del
 * flujo normal, junto a Subtotal/Total repetidos en tabla: en móvil ahora
 * solo se ve el Total (Subtotal/Envío se omiten, ya redundantes con el
 * detalle de productos arriba) + el botón, en una fila fija.
 */
@media (max-width: 768px){
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart-collaterals{
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 40;
        margin: 0;
        background: var(--spwsv-panel-bg);
        border-radius: 0;
        border-left: 0;
        border-right: 0;
        border-bottom: 0;
        padding: var(--spwsv-space-md) var(--spwsv-space-lg);
        padding-bottom: max(var(--spwsv-space-md), env(safe-area-inset-bottom, 0px));
        box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.08);
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .woocommerce-cart-form{
        margin-bottom: calc(5.5rem + var(--spwsv-space-lg));
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals{
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: var(--spwsv-space-sm);
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table{
        margin: 0;
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table thead,
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr:not(.order-total){
        display: none;
    }

    /* Fila "Total" arriba, ancho completo: label a la izquierda, importe +
       nota de IVA (apiladas, alineadas a la derecha) a la derecha. */
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr.order-total{
        display: flex;
        align-items: flex-end;
        justify-content: space-between;
        gap: var(--spwsv-space-sm);
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr.order-total th,
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr.order-total td{
        padding: 0;
        border: 0;
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr.order-total th{
        font-size: var(--spwsv-font-size-xs);
        font-weight: 600;
        color: var(--spwsv-muted);
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr.order-total td{
        display: flex;
        flex-direction: column;
        align-items: flex-end;
        gap: 2px;
        font-size: var(--spwsv-font-size-lg);
        font-weight: 800;
        color: var(--spwsv-text);
    }

    /*
     * "(includes 52,60 € IVA (21%))" (ver wc_cart_totals_order_total_html()
     * en WooCommerce core, <small class="includes_tax">) — antes rompía a
     * 2-3 líneas junto al importe ("se ve mal", bug reportado). Se mantiene
     * (es la única indicación de si el Total lleva IVA incluido o no, según
     * "Precios con/sin IVA" de la tienda) pero como línea propia, pequeña y
     * muda, debajo del importe en vez de en el mismo renglón.
     */
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals table.shop_table tr.order-total td .includes_tax{
        display: block;
        font-size: var(--spwsv-font-size-xs);
        font-weight: 500;
        color: var(--spwsv-muted);
        white-space: nowrap;
    }

    /*
     * "We accept" (trust badges) se inyecta por PHP dentro de
     * .wc-proceed-to-checkout, hermano del botón (hook
     * woocommerce_proceed_to_checkout, prioridad 30 — ver
     * maybe_render_cart_trust_badges()). Sin ocultarlo aquí, la barra fija
     * crecía hasta tapar media pantalla (bug reportado). Sigue viéndose en
     * el resto del flujo (checkout, sidebar de escritorio); aquí solo se
     * quita de la barra de acción fija del carrito en móvil.
     */
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals .wc-proceed-to-checkout .spwsv-trust-badges{
        display: none;
    }

    /* Botón en su propia línea, ancho completo, debajo del Total. */
    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals .wc-proceed-to-checkout{
        margin: 0;
        width: 100%;
    }

    body.spwsv-simple.spwsv-page-cart:not(.spwsv-cart-empty):is(.sp-wsv-distribution-shopify, .sp-wsv-distribution-woocommerce-steps, .sp-wsv-distribution-minimal-steps) .cart_totals .wc-proceed-to-checkout a.checkout-button{
        display: block;
        width: 100%;
        text-align: center;
        margin: 0;
        white-space: nowrap;
    }
}

@media (max-width: 720px){

    body.spwsv-simple.spwsv-page-cart .spwsv-steps-nav .spwsv-steps-list{
        gap: var(--spwsv-space-md);
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        padding-bottom: 2px;
    }

    body.spwsv-simple.spwsv-page-cart .spwsv-steps-nav .spwsv-step-label{
        font-size: var(--spwsv-font-size-xs);
        white-space: nowrap;
    }
}

body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .woocommerce{
    grid-template-columns: 1.1fr 0.9fr;
    gap: 0;
}

body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty.sp-wsv-distribution-minimal-steps .woocommerce{
    grid-template-columns: 1fr;
    gap: var(--spwsv-space-xl);
}

body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .woocommerce-cart-form,
body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .cart-collaterals{
    background: transparent;
    border: 0;
    border-radius: 0;
    padding: 0;
    margin: 0;
}

@media (min-width: 981px){
    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .spwsv-simple-main .spwsv-simple-container{
        max-width: 100%;
        padding: 0;
    }

    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .woocommerce-cart-form{
        padding: 26px 26px 26px max(16px, calc((100vw - var(--spwsv-container-width)) / 2));
    }

    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .cart-collaterals{
        padding: 26px max(16px, calc((100vw - var(--spwsv-container-width)) / 2)) 26px 26px;
    }

}

@media (min-width: 981px){
    body.spwsv-simple.spwsv-page-cart.spwsv-cart-empty .spwsv-simple-main .spwsv-simple-container,
    body.spwsv-simple.sp-wsv-checkout-login-required .spwsv-simple-main .spwsv-simple-container{
        max-width: var(--spwsv-container-width);
        padding: var(--spwsv-space-2xl) 0 var(--spwsv-space-5xl)
    }
}

@media (max-width: 980px){
    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .woocommerce{
        grid-template-columns: 1fr;
        gap: var(--spwsv-space-xl);
    }

    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .woocommerce-cart-form,
    body.spwsv-simple.spwsv-page-cart.sp-wsv-distribution-minimal-steps .cart-collaterals{
        grid-column: 1 / -1;
    }
}

body.spwsv-simple.spwsv-page-cart table.shop_table{
    border: 0;
}

body.spwsv-simple.spwsv-page-cart table.shop_table th,
body.spwsv-simple.spwsv-page-cart table.shop_table td{
    border-color: var(--spwsv-border-soft);
}

body.spwsv-simple.spwsv-page-cart .cart_totals{ width: 100%; }

body.spwsv-simple.spwsv-page-cart .cart_totals > h2{ display: none; }

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table thead th{
    font-size: var(--spwsv-font-size-xs);
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--spwsv-muted);
    font-weight: 600;
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td{
    vertical-align: middle;
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td.product-thumbnail img{
    width: 64px;
    height: 64px;
    object-fit: cover;
    border-radius: var(--spwsv-radius-sm);
    border: 1px solid var(--spwsv-border-soft);
    background: rgba(0,0,0,.02);
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td.product-name a{
    color: var(--spwsv-text);
    font-weight: 700;
    text-decoration: none;
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td.product-name a:hover{
    color: var(--spwsv-accent);
}


body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td.product-remove a{
    color: var(--spwsv-muted) ;
    text-decoration: none;
    font-weight: 700;
    padding-bottom: 4px;
    height: 20px;
    width: 20px;
    line-height: 0;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td.product-remove a:hover{
    background-color: var(--spwsv-danger);
    color: #fff ;
}

/*
 * Fila "Coupon / Update basket" (<td colspan="6" class="actions">, ver
 * cart.php core) — antes sin ningún separador visual respecto a la lista
 * de productos de encima, y "Update basket" con el mismo peso visual que
 * "Apply coupon" (ambos botones .button por defecto). Se añade una
 * división clara (borde superior) y "Update basket" pasa a estilo
 * "ghost"/texto — es una acción secundaria (recalcular totales tras
 * cambiar cantidades a mano), no debería competir con "Apply coupon" ni
 * con "Proceed to checkout" (ahora en la barra fija inferior, ver bloque
 * de abajo).
 */
body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table td.actions{
    border-top: 1px solid var(--spwsv-border-soft);
    margin-top: var(--spwsv-space-lg);
    padding-top: var(--spwsv-space-lg);
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon{
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--spwsv-space-sm);
    align-items: center;
}

/*
 * Error de coupon inválido (ver cart.js core, show_coupon_error()):
 * WooCommerce añade un <p class="coupon-error-notice"> como hijo directo de
 * .coupon, que al ser flex-row quedaba como una 3ª columna angosta junto al
 * input/botón (bug reportado: "el cupón se ve mal cuando aplicas un
 * cupón"). flex-basis:100% lo baja a su propia línea.
 */
body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon .coupon-error-notice{
    flex: 1 0 100%;
    margin: 0;
    color: var(--spwsv-danger);
    font-size: var(--spwsv-font-size-sm);
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon #coupon_code.has-error{
    border-color: var(--spwsv-danger);
    box-shadow: 0 0 0 1px var(--spwsv-danger);
}

/*
 * El selector de cantidad por clic (+/-, ver sp-checkout-steps-cart.js)
 * auto-actualiza el carrito solo — el botón nativo "Update basket" ya no
 * hace falta como acción visible, pero se mantiene en el DOM (oculto, no
 * eliminado) porque el JS le sigue disparando un click programático para
 * reutilizar el flujo AJAX nativo de WooCommerce.
 */
body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .actions button[name="update_cart"]{
    display: none;
}

@media (max-width: 720px){
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .actions{
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: 0;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon{
        width: 100%;
        align-items: stretch;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon button{
        width: unset;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon input{
        flex: 1;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon :where(input, button){
        width: 100%;
    }
}

@media (max-width: 720px){
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table, table.shop_table_responsive){
        border: 0;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive thead){
        display: none;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tbody){
        display: block;
    }

    /*
     * Rediseño de "fila apilada con label" (patrón responsive-table
     * estándar de WooCommerce: imagen grande arriba + una línea entera por
     * cada Price/Quantity/Subtotal) a "fila compacta tipo card de
     * carrito": miniatura pequeña + nombre a la izquierda, precio×cantidad
     * y subtotal a la derecha, todo en una sola franja horizontal. Se
     * ocultan Price (redundante con el precio unitario en el subtotal) y
     * los labels ::before de Quantity/Subtotal — el layout ya deja claro
     * qué es cada dato sin repetirlo en texto.
     */
    /*
     * :not(:has(> td.actions)) excluye la fila de "Coupon code / Update
     * cart" (<tr><td colspan="6" class="actions">…</td></tr>, ver
     * cart.php): NO es una fila de producto, así que forzarla al mismo
     * grid de 4 columnas rompía su propio layout (.actions{flex-direction:
     * column}, ver más abajo) — el botón "Update cart" se veía angosto
     * porque quedaba encogido dentro de una de las areas del grid en vez
     * de ocupar el ancho completo de su fila.
     */
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr):not(:has(> td.actions)){
        display: grid;
        grid-template-columns: 56px 1fr auto auto;
        grid-template-areas:
            "thumb name    qty  remove"
            "thumb subtotal subtotal subtotal";
        align-items: center;
        column-gap: var(--spwsv-space-sm);
        row-gap: 4px;
        padding: var(--spwsv-space-sm) 0;
        border-bottom: 1px solid var(--spwsv-border-soft);
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr):not(:has(> td.actions)):last-child{
        border-bottom: 0;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td):not(.actions){
        display: flex;
        padding: 0;
        text-align: left;
        border: 0;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td)::before{
        content: none;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-thumbnail){
        grid-area: thumb;
        align-items: center;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-thumbnail img){
        width: 48px;
        height: 48px;
        object-fit: cover;
        border-radius: var(--spwsv-radius-sm);
    }
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form table.shop_table_responsive tr td.product-price{
        display: none;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-name){
        grid-area: name;
        align-items: center;
        font-weight: 600;
        min-width: 0;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-name) a{
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        display: block;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-quantity){
        grid-area: qty;
        justify-content: flex-end;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-quantity input.qty){
        max-width: 64px;
        text-align: center;
        padding: 4px;
        min-height: 32px;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-remove){
        grid-area: remove;
        justify-content: flex-end;
    }

    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-subtotal){
        grid-area: subtotal;
        justify-content: flex-end;
        align-items: baseline;
        gap: 6px;
        color: var(--spwsv-muted);
        font-size: var(--spwsv-font-size-sm);
    }

    /* Sin ningún label, ese número queda ambiguo (¿precio unitario o
       subtotal?) — se reintroduce como prefijo discreto en vez del label
       ::before de fila completa que había antes. */
    body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form :where(table.shop_table_responsive tr td.product-subtotal)::before{
        content: attr(data-title) ":";
        font-weight: 600;
        text-transform: lowercase;
    }
}

/*
 * Selector de cantidad (-, número, +) — ver sp-checkout-steps-cart.js
 * (initQuantitySteppers). Sustituye el input numérico "borrar y escribir"
 * por botones de clic (bug reportado: UX confusa en móvil). El input
 * original se deja en readonly (sigue enviándose en el form/serialize, y
 * WooCommerce lo sigue leyendo igual) en vez de disabled, para no perder
 * su valor al hacer submit.
 */
body.spwsv-simple.spwsv-page-cart .spwsv-qty-stepper{
    display: inline-flex;
    align-items: center;
    gap: 2px;
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius-xs);
    overflow: hidden;
}

body.spwsv-simple.spwsv-page-cart .spwsv-qty-stepper .spwsv-qty-btn{
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border: 0;
    background: var(--spwsv-panel-bg);
    color: var(--spwsv-text);
    font-size: var(--spwsv-font-size-md);
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
}

body.spwsv-simple.spwsv-page-cart .spwsv-qty-stepper .spwsv-qty-btn:hover:not(:disabled){
    background: var(--spwsv-border-soft);
}

body.spwsv-simple.spwsv-page-cart .spwsv-qty-stepper .spwsv-qty-btn:disabled{
    color: var(--spwsv-muted);
    cursor: not-allowed;
}

body.spwsv-simple.spwsv-page-cart .spwsv-qty-stepper input.qty{
    width: 32px;
    min-width: 0;
    border: 0;
    padding: 0;
    text-align: center;
    background: transparent;
    cursor: default;
}

/*
 * Coupon: oculto por defecto, se revela con un clic (ver
 * sp-checkout-steps-cart.js, initCouponToggle) en vez de ocupar espacio
 * fijo siempre (bug reportado: "cupón y update basket" desordenados).
 */
body.spwsv-simple.spwsv-page-cart .spwsv-coupon-toggle{
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin: 0 0 var(--spwsv-space-sm);
    padding: 0;
    border: 0;
    background: transparent;
    color: var(--spwsv-text);
    font-weight: 600;
    font-size: var(--spwsv-font-size-sm);
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}

body.spwsv-simple.spwsv-page-cart .woocommerce-cart-form .coupon{
    margin-bottom: var(--spwsv-space-sm);
}

body.spwsv-simple.spwsv-page-cart .woocommerce :where(a.button, button.button, input.button, input#submit){
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--spwsv-button-min-height);
    padding: var(--spwsv-space-md) var(--spwsv-space-xl);
    border-radius: var(--spwsv-radius-xs);
    cursor: pointer;
}

.woocommerce-cart .wc-proceed-to-checkout{
    margin-bottom: 0;
    padding-bottom: 0;
}

.woocommerce-cart .wc-proceed-to-checkout a.checkout-button{
    margin-bottom: 0em;
}


body.spwsv-simple.spwsv-page-cart .cart-collaterals .cart_totals > h2{
    font-size: var(--spwsv-font-size-sm);
    font-weight: 800;
    margin: 0 0 var(--spwsv-space-md);
    color: var(--spwsv-text);
}

body.spwsv-simple :where(button, [type="button"], [type="submit"], a, input[type="submit"], input[type="button"]){
    -webkit-tap-highlight-color: transparent;
}

body.spwsv-simple :where(button, [type="button"], [type="submit"], input[type="submit"], input[type="button"], a.button, button.button, input.button, #place_order){
    cursor: pointer;
}

body.spwsv-simple :where(button[disabled], [type="button"][disabled], [type="submit"][disabled], input[disabled], a.button[aria-disabled="true"]){
    cursor: not-allowed;
}

/* Shopify/minimal: cart más “clean” */
body.spwsv-simple.sp-wsv-distribution-minimal-steps.spwsv-page-cart .woocommerce-cart-form,
body.spwsv-simple.sp-wsv-distribution-minimal-steps.spwsv-page-cart .cart-collaterals{
    border-radius: var(--spwsv-radius);
}

.spwsv-anchor{ position: relative; top: -10px; }

body.spwsv-simple .alignwide{
    margin-inline: 0px;
}

table td, table th {
    border: none;
}

body.spwsv-simple.woocommerce-order-received .woocommerce-order,
body.spwsv-simple.woocommerce-order-pay .spwsv-simple-container{
    background: var(--spwsv-panel-bg);
    border: 1px solid var(--spwsv-border);
    border-radius: var(--spwsv-radius);
    padding: var(--spwsv-space-xl);
}

body.spwsv-simple.woocommerce-order-received.sp-wsv-distribution-minimal-steps .woocommerce-order,
body.spwsv-simple.woocommerce-order-pay.sp-wsv-distribution-minimal-steps .spwsv-simple-container{
    background: var(--spwsv-panel-bg);
    border: none;
}

body.spwsv-simple.woocommerce-order-received.sp-wsv-distribution-minimal-steps,
body.spwsv-simple.woocommerce-order-pay.sp-wsv-distribution-minimal-steps{
    background: var(--spwsv-panel-bg);
}

body.spwsv-simple.woocommerce-order-received.sp-wsv-distribution-minimal-steps .spwsv-simple-main{
    background: var(--spwsv-page-bg);
}

body.spwsv-simple.woocommerce-order-pay .shop_table{
    padding: 1em;
}

body.spwsv-simple.woocommerce-order-pay .spwsv-steps-nav{
    display: none;
}

body.spwsv-simple.woocommerce-order-pay .spwsv-simple-main{
    max-width: var(--spwsv-container-width);
    margin: 20px auto;
}

body.spwsv-simple.woocommerce-order-pay .woocommerce-order-pay{
    max-width: 760px;
    margin: 0 auto;
}

body.spwsv-simple :where(.woocommerce-order, .woocommerce-order-pay) :where(h2, h3){
    margin-top: 0;
}

body.spwsv-simple .woocommerce-order-overview{
    list-style: none;
    padding: 0;
    margin: 0 0 var(--spwsv-space-xl);
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--spwsv-space-sm);
}

body.spwsv-simple .woocommerce-order-overview:before{
    content: none;
}

@media (max-width: 640px){
    body.spwsv-simple .woocommerce-order-overview{
        grid-template-columns: 1fr;
    }
}

body.spwsv-simple .woocommerce-order-overview li{
    background: rgba(0,0,0,.02);
    border: 1px solid var(--spwsv-border-soft);
    border-radius: var(--spwsv-radius-sm);
    padding: var(--spwsv-space-md);
    margin: 0;
}

body.spwsv-simple .woocommerce-order-overview li strong{
    display: block;
    margin-top: 6px;
    font-weight: 800;
}

body.spwsv-simple .woocommerce-order-details,
body.spwsv-simple .woocommerce-customer-details{
    margin-top: var(--spwsv-space-xl);
}

body.spwsv-simple .woocommerce-table--order-details{
    width: 100%;
    border-collapse: collapse;
}

body.spwsv-simple .woocommerce-table--order-details th{
    text-align: left;
    font-weight: 800;
    color: var(--spwsv-text);
    padding: var(--spwsv-space-sm) 0;
    border-bottom: 1px solid var(--spwsv-border-soft);
}

body.spwsv-simple .woocommerce-table--order-details td{
    text-align: right;
    padding: var(--spwsv-space-sm) 0;
    border-bottom: 1px solid var(--spwsv-border-soft);
    color: var(--spwsv-text);
}

body.spwsv-simple .woocommerce-table--order-details tfoot tr:last-child th,
body.spwsv-simple .woocommerce-table--order-details tfoot tr:last-child td{
    border-bottom: 0;
}

body.spwsv-simple .woocommerce-customer-details address{
    background: rgba(0,0,0,.02);
    border: 1px solid var(--spwsv-border-soft);
    border-radius: var(--spwsv-radius);
    padding: var(--spwsv-space-md);
    font-style: normal;
}

body.spwsv-simple.woocommerce-order-received .spwsv-simple-main {
    max-width: var(--spwsv-container-width);
    margin: 20px auto;
}

.sp-wsv-thankyou-back{
    display: flex;
    justify-content: flex-end;
}

.sp-wsv-thankyou-back a{
    display: flex;
    align-items: center;
    justify-content: center;
    max-width: 200px;
}
/* ==========================================================================
   ASTERISCOS OBLIGATORIOS (Universales para cualquier diseño de Checkout)
   ========================================================================== */

/* 1. Ocultar el asterisco nativo de WooCommerce para evitar duplicados en cualquier vista */
body.sp-wsv-simple .woocommerce-checkout label.required_field .required,
body.sp-wsv-simple .woocommerce-checkout label.required_field abbr {
    display: none;
}

/* 2. Crear nuestro propio asterisco rojo al final del label universalmente */
.woocommerce-checkout label.required_field::after {
    content: '*';
    color: #d22d3d; /* Rojo clásico. Puedes usar var(--spwsv-danger) si existe */
    margin-left: 4px;
    font-weight: bold;
    font-size: 1.1em;
}
