/* ChilePromo - custom.css v1.7.54 - 11-09-2026
   Paginas sin Creative Elements: carrito, checkout, confirmacion, mi cuenta.
   Version documentada: cp_webredesign/css/v1.7.54/custom.commented.css
   Tras subir: PURGAR cache de LiteSpeed. */


/* ===== TOKENS DEL DESIGN SYSTEM ===== */
:root{--cp-primary:#00A650;--cp-primary-hover:#39B54A;--cp-primary-pressed:#008741;--cp-on-primary:#FFFFFF;--cp-secondary:#007ACC;--cp-secondary-hover:#006BB3;--cp-danger:#D32F2F;--cp-danger-hover:#B32424;--cp-text:#666666;--cp-text-heading:#404040;--cp-text-strong:#262626;--cp-text-muted:#7A7A7A;--cp-text-help:#666666;--cp-text-inverse:#FFFFFF;--cp-link:#007ACC;--cp-link-hover:#006BB3;--cp-success-text:#008741;--cp-warning-text:#C42700;--cp-surface:#FFFFFF;--cp-surface-section:#F2F2F2;--cp-surface-sunken:#F8F9FA;--cp-surface-hover:#ECEEF1;--cp-border:#E6E6E6;--cp-border-strong:#CFD4DA;--cp-focus-ring:0 0 0 3px rgba(0,122,204,.15);--cp-success-bg:#DEF7EA;--cp-success-on-bg:#007036;--cp-success-border:#BAF3D5;--cp-warning-bg:#F9E4DE;--cp-warning-on-bg:#C42700;--cp-danger-bg:#FBEAEA;--cp-danger-on-bg:#B32424;--cp-info-bg:#DEEDF7;--cp-info-text:#006BB3;--cp-r-card:12px;--cp-r-btn:8px;--cp-r-pill:20px;--cp-r-input:6px;--cp-shadow-card:0 2px 8px rgba(0,0,0,.05);--cp-t-fast:150ms ease}

/* ===== v1.7.54 - BASE DEL TEMA CLASSIC PARA EL SEGUIMIENTO DE INVITADO ===== */
/* El tema ancla 27 reglas a .page-order-detail y ninguna a .page-guest-tracking: el core deja esa pagina sin la base del detalle. Se replican aqui, con las MISMAS unidades del tema (rem, para que las dos paginas escalen igual si la raiz no mide 16px) y ANTES de toda regla nuestra -como el tema va antes del custom.css en el bundle-, para que la cascada sea identica en las dos paginas. Fuera lo que no tiene elemento en el invitado: mensajes y devoluciones (la parcial que incluye es siempre la no-return). */
.page-guest-tracking #order-infos ul{margin:0}
.page-guest-tracking .addresses h4, .page-guest-tracking h3{font-size:1rem;font-weight:700}
.page-guest-tracking #content{font-size:.875rem}
.page-guest-tracking .box{padding:1rem;background:#fff;margin-bottom:1rem}
.page-guest-tracking h3{margin-bottom:1rem;color:#232323;text-transform:uppercase}
.page-guest-tracking #order-history .history-lines .history-line{padding:.5rem 0;border-bottom:1px solid #f6f6f6}
.page-guest-tracking #order-history .history-lines .history-line:last-child{border-bottom:0}
.page-guest-tracking #order-history .history-lines .history-line .label{display:inline-block;padding:.25rem .375rem;margin:.25rem 0;color:#fff;border-radius:3px}
.page-guest-tracking .addresses{margin:0 -.9375rem}
/* el tema declara .page-order-detail .order-items{padding:0!important}: mismo efecto por especificidad (1,3,1), sin !important */
body.page-guest-tracking #content .order-items.box{padding:0}
.page-guest-tracking .order-items .order-item{padding:1rem 1rem 0;border-bottom:1px solid #f6f6f6}
.page-guest-tracking .order-items .order-item .desc, .page-guest-tracking .order-items .order-item .qty{margin-bottom:1rem}
.page-guest-tracking .order-items .order-item .desc .name{font-weight:600}
.page-guest-tracking .customization{margin-top:.75rem}

/* ===== BASE - PAGINAS SIN CREATIVE ELEMENTS ===== */
body:not([class*="ce-theme"]) .btn-primary{background-color:var(--cp-primary);border-color:var(--cp-primary);color:var(--cp-on-primary);border-radius:var(--cp-r-btn);padding:10px 26px;font-size:16px;font-weight:600;transition:background-color var(--cp-t-fast), border-color var(--cp-t-fast)}
body:not([class*="ce-theme"]) .btn-primary:hover{background-color:var(--cp-primary-hover);border-color:var(--cp-primary-hover)}
body:not([class*="ce-theme"]) .btn-primary:active, body:not([class*="ce-theme"]) .btn-primary:active:hover, body:not([class*="ce-theme"]) .btn-primary:active:focus, body:not([class*="ce-theme"]) .btn-primary.active:hover, body:not([class*="ce-theme"]) .btn-primary.active:focus, body:not([class*="ce-theme"]) .btn-primary.active.focus{background-color:var(--cp-primary-pressed);border-color:var(--cp-primary-pressed);color:var(--cp-on-primary)}
body:not([class*="ce-theme"]) .btn-primary:disabled, body:not([class*="ce-theme"]) .btn-primary.disabled{opacity:.55}
body:not([class*="ce-theme"]) .btn-primary:focus-visible{outline:none;box-shadow:var(--cp-focus-ring)}
body:not([class*="ce-theme"]) .alert-success{background-color:var(--cp-success-bg);border-color:#BAF3D5;color:var(--cp-success-on-bg);border-radius:var(--cp-r-card)}
body:not([class*="ce-theme"]) .alert-info{background-color:var(--cp-info-bg);border-color:#BADCF3;color:var(--cp-info-text);border-radius:var(--cp-r-card)}
body:not([class*="ce-theme"]) .alert-warning{background-color:var(--cp-warning-bg);border-color:#FFC2B2;color:var(--cp-warning-on-bg);border-radius:var(--cp-r-card)}
body:not([class*="ce-theme"]) input:not([type="checkbox"]):not([type="radio"]), body:not([class*="ce-theme"]) select, body:not([class*="ce-theme"]) textarea{border-color:var(--cp-border)}
body:not([class*="ce-theme"]) hr{border-top-color:var(--cp-border)}
body:not([class*="ce-theme"]) #accept-button.consent-btn, body:not([class*="ce-theme"]) .consent-btn{background-color:var(--cp-primary);border-color:var(--cp-primary);color:var(--cp-on-primary);border-radius:var(--cp-r-btn)}
body:not([class*="ce-theme"]) #accept-button.consent-btn:hover, body:not([class*="ce-theme"]) .consent-btn:hover{background-color:var(--cp-primary-hover);border-color:var(--cp-primary-hover)}
body:not([class*="ce-theme"]) .consent-link{color:var(--cp-link)}
body:not([class*="ce-theme"]) .custom-radio{border:1px solid var(--cp-border-strong);background-color:var(--cp-surface)}
body:not([class*="ce-theme"]) .custom-radio input[type="radio"]:checked + span{background-color:var(--cp-primary);border-radius:50%}
body:not([class*="ce-theme"]) .custom-checkbox input[type="checkbox"] + span{border-color:var(--cp-border-strong)}
body:not([class*="ce-theme"]) .custom-checkbox input[type="checkbox"] + span .checkbox-checked{color:var(--cp-primary)}
body:not([class*="ce-theme"]) .address-item, body:not([class*="ce-theme"]) .delivery-option, body:not([class*="ce-theme"]) table.table-striped th{background-color:var(--cp-surface-sunken)}
body:not([class*="ce-theme"]) table.table-striped, body:not([class*="ce-theme"]) table.table-striped th, body:not([class*="ce-theme"]) table.table-striped td, body:not([class*="ce-theme"]) .address-item, body:not([class*="ce-theme"]) .delivery-option, body:not([class*="ce-theme"]) .payment-option{border-color:var(--cp-border)}
body:not([class*="ce-theme"]) #content, body:not([class*="ce-theme"]) #main .page-content, body:not([class*="ce-theme"]) .cart-grid-body, body:not([class*="ce-theme"]) .cart-grid-right{color:var(--cp-text)}
body:not([class*="ce-theme"]) .material-icons{color:inherit}
body:not([class*="ce-theme"]) .progress{background-color:var(--cp-surface-hover);border-radius:var(--cp-r-pill);overflow:hidden}
body:not([class*="ce-theme"]) .progress-bar{background-color:var(--cp-primary)}
body:not([class*="ce-theme"]) .psgdprinfo17{border:1px solid var(--cp-border);border-radius:var(--cp-r-card);color:var(--cp-text)}
body:not([class*="ce-theme"]):not(.page-my-account) #content.page-content, body:not([class*="ce-theme"]):not(.page-my-account) .page-customer-account #content, body:not([class*="ce-theme"]):not(.page-my-account) #content.card{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card);padding:20px;font-size:16px;color:var(--cp-text)}
body:not([class*="ce-theme"]) #content table.table, body:not([class*="ce-theme"]) #content table.table-striped, body:not([class*="ce-theme"]) #content table.table-bordered{border:1px solid var(--cp-border);border-radius:var(--cp-r-input);border-collapse:separate;border-spacing:0;overflow:hidden;width:100%}
body:not([class*="ce-theme"]) #content table.table th, body:not([class*="ce-theme"]) #content table.table td{border-left:none;border-right:none;border-top:none;border-bottom:1px solid var(--cp-border);padding:10px 12px}
/* v1.7.45 - MEDIDO: la cabecera iba en --cp-text-muted #7A7A7A a 10px sobre el hundido #F8F9FA = 4,07 de contraste, por debajo del 4,5 de AA, y a 10px no hay excepcion de texto grande. El DS prohibe expresamente ese gris como color de TEXTO (regla 6 del 2). Pasa a --cp-text #666666 y a 11px, que es el minimo de microcopy del DS. */
body:not([class*="ce-theme"]) #content table.table thead th{background-color:var(--cp-surface-sunken);border-bottom:2px solid var(--cp-border);font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--cp-text)}
body:not([class*="ce-theme"]) #content table.table tbody tr:last-child td{border-bottom:none}
body:not([class*="ce-theme"]) #content table.table tbody tr:hover td{background-color:var(--cp-surface-hover)}
body:not([class*="ce-theme"]) #content ul > li.p-1.m-1{border:1px solid var(--cp-border);border-radius:var(--cp-r-card);background-color:var(--cp-surface);box-shadow:var(--cp-shadow-card);margin-bottom:10px;transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast)}
body:not([class*="ce-theme"]) #content ul > li.p-1.m-1:hover{border-color:var(--cp-border-strong)}
body:not([class*="ce-theme"]) a.btn.js-remove-email-alert, body:not([class*="ce-theme"]) a.btn.js-remove-email-alert i, body:not([class*="ce-theme"]) a.js-remove-email-alert.btn-link{color:var(--cp-danger)}
body:not([class*="ce-theme"]) a.btn.js-remove-email-alert:hover, body:not([class*="ce-theme"]) a.btn.js-remove-email-alert:hover i{color:var(--cp-danger-hover)}
body:not([class*="ce-theme"]) .psgdprinfo17, body:not([class*="ce-theme"]) #content .card, body:not([class*="ce-theme"]) #content .box{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card)}
body:not([class*="ce-theme"]) .page-header h1, body:not([class*="ce-theme"]) #content .page-header h1{color:var(--cp-text-heading);font-weight:600}
body:not([class*="ce-theme"]) .page-footer a, body:not([class*="ce-theme"]) .account-link{color:var(--cp-link)}
body:not([class*="ce-theme"]) .page-footer a:hover, body:not([class*="ce-theme"]) .account-link:hover{color:var(--cp-link-hover)}
@media (max-width: 767.98px){
body:not([class*="ce-theme"]) .btn + .btn{margin-top:8px}
body:not([class*="ce-theme"]):not(.page-my-account) #content.page-content, body:not([class*="ce-theme"]):not(.page-my-account) .page-customer-account #content{padding:15px;border-radius:var(--cp-r-btn)}
}

/* ===== CHECKOUT ===== */
body#checkout .col-md-3.form-control-comment{font-weight:700;color:var(--cp-text-help)}
body#checkout .custom-radio{border:1px solid var(--cp-border-strong)}
body#checkout .custom-radio input[type="radio"]:checked + span{width:14px;height:14px;background-color:var(--cp-primary);border-radius:50%}
body#checkout .custom-checkbox input[type="checkbox"] + span .checkbox-checked{color:var(--cp-primary)}
/* v1.7.16 - las TRES tarjetas de seleccion del checkout -direccion, transportista y medio de pago- comparten patron. El de pago ya lo tenia; las otras dos se alinean. La de direccion usaba border:2px al seleccionar y eso DESPLAZABA el layout 2px (medido 273 -> 275px): con box-shadow inset se ve igual y no mueve nada. Ver seccion 32. */
body#checkout section.checkout-step .address-item{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);cursor:pointer;transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast), background-color var(--cp-t-fast)}
body#checkout section.checkout-step .address-item:hover{border-color:var(--cp-border-strong);background-color:var(--cp-surface-sunken)}
/* v1.7.17 - borde FINO + halo difuso, como en la preview aprobada. El `border` va completo a proposito: el tema declara `.address-item.selected{border:3px solid #24b9d7}` a la misma especificidad, y una regla que solo fije border-color NO le gana el grosor. Medido antes: 2,76px de borde y la caja creciendo 3,9px al seleccionar. Ver seccion 33. */
body#checkout section.checkout-step .address-item.selected{border:1px solid var(--cp-primary);background-color:var(--cp-surface-sunken);box-shadow:0 0 0 3px rgba(0,166,80,.10)}
body#checkout a{color:var(--cp-link)}
body#checkout a:hover{color:var(--cp-link-hover)}
body#checkout a:focus-visible, .page-my-account a:focus-visible, .page-history a:focus-visible, .page-order-detail a:focus-visible, .page-addresses a:focus-visible, .page-guest-tracking a:focus-visible{outline:none;color:var(--cp-link-hover);box-shadow:var(--cp-focus-ring);border-radius:2px}
/* v1.7.16 - el selector anterior era `.delivery-options > .row` y casaba con CERO elementos: era codigo muerto, y por eso la tarjeta del transportista seguia con borde 0 y radio 0. El elemento real es `.delivery-option`, hijo directo de `.delivery-options`, SIN clase `.row`. Verificado en el paso 3 con sesion iniciada. */
body#checkout section.checkout-step .delivery-options > .delivery-option{padding:14px 16px;margin:0}
body#checkout section.checkout-step .delivery-options > .delivery-option{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);cursor:pointer;transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast), background-color var(--cp-t-fast)}
body#checkout section.checkout-step .delivery-options > .delivery-option:hover{border-color:var(--cp-border-strong);background-color:var(--cp-surface-sunken)}
body#checkout section.checkout-step .delivery-options > .delivery-option:has(input:checked){border:1px solid var(--cp-primary);background-color:var(--cp-surface-sunken);box-shadow:0 0 0 3px rgba(0,166,80,.10)}
/* el interior NO se reestructura: son columnas Bootstrap y ya se ordenan bien. Solo jerarquia y el cursor, que estaba en `auto`. */
body#checkout section.checkout-step .delivery-options > .delivery-option label{cursor:pointer}
body#checkout section.checkout-step .delivery-option .carrier-delay{display:block;font-size:13px;color:var(--cp-text)}
@media (max-width:767.98px){body#checkout section.checkout-step .delivery-option .carrier-delay{font-size:14px}}
body#checkout section.checkout-step .delivery-option .carrier-price{font-size:16px;font-weight:700;color:var(--cp-success-on-bg)}
/* v1.7.19 - el logo se ajusta a su columna en vez de forzar un ancho fijo. El 6.125rem (98px) desbordaba los 67px de caja util de .carrier-logo e invadia la columna del nombre: medido, el hueco entre logo y nombre era de -1px. Se limita por ALTO, que es lo que mantiene la fila pareja con logos de proporciones distintas. */
body#checkout section.checkout-step .delivery-options .delivery-option img{width:auto;max-width:100%;max-height:30px;display:block}
body#checkout section.checkout-step .carrier-name{width:auto;color:var(--cp-text-heading);font-weight:600}
body#checkout .carrier-delay{color:var(--cp-text-help)}
/* v1.7.16 - se retira el aviso propio del paso de envio (decision del director). Lo que queda bajo el nombre del transportista es su campo "Tiempo de entrega", que se edita en BO > Envio > Transportistas, no aqui. */
body#checkout .additional-information{margin:0 0 0 28px;color:var(--cp-text)}
body#checkout #footer{padding-bottom:0}
body#checkout .mp-title-standard-checkout{display:none}
body#checkout .mp-payment-methods-message-container{border-radius:var(--cp-r-card);background-color:var(--cp-surface-sunken);margin-bottom:0}
body#checkout .mp-payment-methods-container{margin-bottom:5px;padding-top:0}
body#checkout .mp-payment-method-logo-container{border:none;padding:1px 2px;border-radius:var(--cp-r-input)}
@media (max-width: 767.98px){
body#checkout section.checkout-step .address-selector{display:block}
body#checkout .additional-information p{font-size:14px}
}
@media (min-width: 768px){
body#checkout .carrier-delay{margin-top:20px}
}
@media (max-width: 1024.98px){
body#checkout .form-group.row{margin-bottom:0;padding-top:0;padding-bottom:0}
body#checkout .form-group.row .custom-checkbox{display:flex;align-items:flex-start;gap:8px;margin:0;line-height:1.25}
body#checkout .form-group.row label{margin-bottom:0;line-height:1.3}
body#checkout .custom-checkbox > label, body#checkout .custom-checkbox span + label{padding-top:0;padding-bottom:0}
body#checkout .form-group.row > div, body#checkout .form-group.row > .col-md-6, body#checkout .form-group.row > .col-xs-12{padding-top:0;padding-bottom:0}
body#checkout .form-group.row .custom-checkbox span{flex:0 0 auto;margin:0}
body#checkout .form-group.row .custom-checkbox label{margin:0;line-height:1.25}
}

/* ===== PAGO - PASO 4 DEL CHECKOUT ===== */
body#checkout section.checkout-step .payment-options{display:flex;flex-direction:column;gap:10px;margin:0 0 18px}
body#checkout section.checkout-step .payment-options > div{margin:0}
body#checkout section.checkout-step .payment-option{display:flex;align-items:center;gap:14px;width:100%;min-height:64px;margin:0;padding:14px 16px;background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);cursor:pointer;transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast), background-color var(--cp-t-fast)}
body#checkout section.checkout-step .payment-option:hover{border-color:var(--cp-border-strong);background-color:var(--cp-surface-sunken)}
body#checkout section.checkout-step .payment-option:has(input:checked){border:1px solid var(--cp-primary);background-color:var(--cp-surface-sunken);box-shadow:0 0 0 3px rgba(0,166,80,.10)}
body#checkout section.checkout-step .payment-options .custom-radio{flex:0 0 auto;float:none;margin:0}
body#checkout section.checkout-step .payment-options label{display:flex;flex-wrap:wrap;align-items:center;gap:14px;flex:1 1 0;min-width:0;margin:0;padding:0;background:none;border:0;border-radius:0;cursor:pointer;font-size:15px;font-weight:600;line-height:1.3;color:var(--cp-text-heading)}
body#checkout section.checkout-step .payment-options label > span{flex:1 1 auto;min-width:0}
body#checkout section.checkout-step .payment-options label img{flex:0 0 auto;min-width:30px;min-height:30px;max-width:110px;object-fit:contain}
body#checkout section.checkout-step .payment-option form.ps-hidden-by-js, body#checkout section.checkout-step .payment-option button.ps-hidden-by-js{display:none}
body#checkout .js-additional-information{margin:-2px 0 12px;padding:16px 18px;background-color:var(--cp-surface-sunken);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);color:var(--cp-text);font-size:14px;line-height:1.55}
body#checkout .js-additional-information p:first-child{margin-top:0}
body#checkout .js-additional-information p:last-child{margin-bottom:0}
body#checkout .js-additional-information strong, body#checkout .js-additional-information b{color:var(--cp-text-heading)}
body#checkout .js-additional-information a{color:var(--cp-link);font-weight:600}
body#checkout #conditions-to-approve{margin:0 0 16px;padding:14px 16px;background-color:var(--cp-surface-sunken);border:1px solid var(--cp-border);border-left:3px solid var(--cp-primary);border-radius:var(--cp-r-btn)}
body#checkout #conditions-to-approve label{margin:0;font-size:14px;line-height:1.45;color:var(--cp-text)}
body#checkout #conditions-to-approve a{color:var(--cp-link);font-weight:600}
@media (max-width: 767.98px){
body#checkout section.checkout-step .payment-option{gap:10px;padding:12px 13px;min-height:60px}
body#checkout section.checkout-step .payment-options label{gap:10px;font-size:14px}
body#checkout .js-additional-information{padding:13px}
}

/* ===== CARRITO ===== */
.page-cart .btn-primary, body#checkout .btn-primary, .page-my-account .btn-primary, .page-addresses .btn-primary, .page-identity .btn-primary, .page-history .btn-primary, .page-order-detail .btn-primary, .page-order-confirmation .btn-primary, .page-guest-tracking .btn-primary{background-color:var(--cp-primary);border-color:var(--cp-primary);color:var(--cp-on-primary);border-radius:var(--cp-r-btn);font-size:16px;font-weight:600;transition:background-color var(--cp-t-fast), border-color var(--cp-t-fast)}
.page-cart .btn-primary:hover, body#checkout .btn-primary:hover, .page-my-account .btn-primary:hover, .page-addresses .btn-primary:hover, .page-identity .btn-primary:hover, .page-history .btn-primary:hover, .page-order-detail .btn-primary:hover, .page-order-confirmation .btn-primary:hover, .page-guest-tracking .btn-primary:hover{background-color:var(--cp-primary-hover);border-color:var(--cp-primary-hover)}
.page-cart .btn-primary:active, .page-cart .btn-primary:active:focus, .page-cart .btn-primary:active:hover, .page-cart .btn-primary.active:focus, .page-cart .btn-primary.active:hover, body#checkout .btn-primary:active, body#checkout .btn-primary:active:focus, body#checkout .btn-primary:active:hover, .page-my-account .btn-primary:active, .page-my-account .btn-primary:active:focus, .page-my-account .btn-primary:active:hover, .page-addresses .btn-primary:active, .page-addresses .btn-primary:active:focus, .page-addresses .btn-primary:active:hover, .page-identity .btn-primary:active, .page-identity .btn-primary:active:hover, .page-history .btn-primary:active, .page-history .btn-primary:active:hover, .page-order-detail .btn-primary:active, .page-order-detail .btn-primary:active:hover, .page-order-confirmation .btn-primary:active, .page-order-confirmation .btn-primary:active:hover, .page-guest-tracking .btn-primary:active, .page-guest-tracking .btn-primary:active:hover{background-color:var(--cp-primary-pressed);border-color:var(--cp-primary-pressed);color:var(--cp-on-primary)}
.page-cart .btn-secondary, body#checkout .btn-secondary, .page-my-account .btn-secondary, .page-addresses .btn-secondary{background-color:var(--cp-secondary);border-color:var(--cp-secondary);color:var(--cp-on-primary);border-radius:var(--cp-r-btn)}
.page-cart .btn-secondary:hover, body#checkout .btn-secondary:hover, .page-my-account .btn-secondary:hover, .page-addresses .btn-secondary:hover{background-color:var(--cp-secondary-hover);border-color:var(--cp-secondary-hover)}
.page-cart .alert-danger, body#checkout .alert-danger, .page-my-account .alert-danger, .page-order-confirmation .alert-danger{background-color:var(--cp-danger-bg);border-color:rgba(211,47,47,.30);color:var(--cp-danger-on-bg);border-radius:var(--cp-r-card)}
.page-cart .alert-info, body#checkout .alert-info, .page-my-account .alert-info, .page-history .alert-info, .page-order-confirmation .alert-info{background-color:var(--cp-info-bg);border-color:#BADCF3;color:var(--cp-info-text);border-radius:var(--cp-r-card)}
.page-cart .alert-warning, body#checkout .alert-warning, .page-my-account .alert-warning, .page-order-confirmation .alert-warning{background-color:var(--cp-warning-bg);border-color:#FFC2B2;color:var(--cp-warning-on-bg);border-radius:var(--cp-r-card)}
.page-cart .alert-success, body#checkout .alert-success, .page-my-account .alert-success, .page-order-confirmation .alert-success{background-color:var(--cp-success-bg);border-color:#BAF3D5;color:var(--cp-success-on-bg);border-radius:var(--cp-r-card)}
.page-cart hr, body#checkout hr, .page-my-account hr, .page-order-detail hr, .page-guest-tracking hr{border-top-color:var(--cp-border)}
.page-cart .form-control, body#checkout .form-control, .page-my-account .form-control, .page-addresses .form-control, .page-identity .form-control{border:1px solid var(--cp-border);border-radius:var(--cp-r-input);padding:8px 12px;color:var(--cp-text);transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast)}
.page-cart .form-control:focus, body#checkout .form-control:focus, .page-my-account .form-control:focus, .page-addresses .form-control:focus, .page-identity .form-control:focus, .page-cart .input-group.focus, body#checkout .input-group.focus{outline:none;border-color:var(--cp-secondary);box-shadow:var(--cp-focus-ring);background-color:var(--cp-surface)}
.page-cart .form-control-label, body#checkout .form-control-label, .page-my-account .form-control-label, .page-addresses .form-control-label, .page-identity .form-control-label{color:#444444;font-size:12px;font-weight:600}
.page-cart .radio-inline, body#checkout .radio-inline{margin-right:1rem}
.page-cart .input-group .form-control:not(:first-child):not(:last-child){border-radius:0}
.page-cart .card, body#checkout .card, body#checkout .cart-grid-right .card{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card)}
.page-cart .card.cart-container img{border:1px solid var(--cp-border);border-radius:var(--cp-r-card)}
.page-cart .cart-item .product-line-info .label, body#checkout .cart-item .product-line-info .label{color:var(--cp-text)}
.page-cart .material-icons.float-xs-left{color:var(--cp-text);transition:color var(--cp-t-fast)}
.page-cart .remove-from-cart:hover .material-icons{color:var(--cp-danger)}
.page-cart .cart-total > span:nth-child(1), body#checkout .cart-total > span:nth-child(1){margin-left:4px}
.page-cart .cart-total > span:nth-child(1)::after, body#checkout .cart-total > span:nth-child(1)::after{content:" (iva inc.)";font-size:13px;font-weight:400;color:var(--cp-text-help)}
.page-cart .label.sub, .page-cart .value.sub, body#checkout .label.sub, body#checkout .value.sub{font-size:13px}
.page-cart #cart-subtotal-shipping .label, body#checkout #cart-subtotal-shipping .label{font-weight:600;font-size:1rem}
/* v1.7.11 - el aviso de envio pasa de advertencia naranja a informacion azul y se parte en dos: pildora en ::before y linea de ayuda en ::after. Misma geometria que tenia la naranja, solo cambian los tokens. Ver seccion 27. */
.page-cart #cart-subtotal-shipping::before, body#checkout #cart-subtotal-shipping::before{content:"Env\0000EDos a regiones por courier: se paga al recibir";font-size:11px;color:var(--cp-info-text);display:inline-block;margin-top:5px;padding:4px 12px;background-color:var(--cp-info-bg);border:1px solid #BADCF3;border-radius:var(--cp-r-pill);font-weight:600;line-height:1.3;white-space:normal}
/* v1.7.34 - el texto anterior prometia un costo que el paso 3 ya no dara: la decepcion llegaba justo antes de pagar. Y ocultaba lo que mas tranquiliza, que el propio sitio ya declara en el popup de comunas: a regiones el envio va POR PAGAR EN DESTINO, o sea que el total del carrito ES el total y no hay sorpresa al final. */
.page-cart #cart-subtotal-shipping::after{content:"Ver\0000E1s los d\0000EDas estimados de tr\0000E1nsito a tu comuna, al finalizar compra";}
body#checkout #cart-subtotal-shipping::after{content:"Ver\0000E1s los d\0000EDas estimados de tr\0000E1nsito a tu comuna en el paso 3";}
.page-cart #cart-subtotal-shipping::after, body#checkout #cart-subtotal-shipping::after{font-size:11px;color:var(--cp-text-help);display:block;margin-top:3px;padding:0;background-color:transparent;border:0;border-radius:0;font-weight:400;line-height:1.35;white-space:normal}
.page-cart #cart-subtotal-discount > span, body#checkout #cart-subtotal-discount > span{color:var(--cp-success-text);font-weight:600}
.page-cart .discount.discount-percentage, body#checkout .discount.discount-percentage{border-radius:var(--cp-r-pill);font-size:11px;font-weight:700;padding:3px 10px;background-color:var(--cp-success-bg);border:1px solid var(--cp-success-border);color:var(--cp-success-on-bg)}
.page-cart .dp_input_div, .page-cart .product-line-info, body#checkout .dp_input_div{font-size:14px}
.page-cart .product-line-grid-right .product-price, .page-cart .product-line-grid-right .cart-line-product-total, body#checkout .product-line-grid-right .product-price{display:inline-flex;align-items:center;background-color:var(--cp-surface-sunken);border:1px solid var(--cp-border);border-radius:var(--cp-r-pill);padding:8px 16px;font-size:16px;font-weight:700;color:var(--cp-text-strong);white-space:nowrap;line-height:1}
.page-cart .product-line-grid-right .product-price, .page-cart .product-line-grid-right .cart-line-product-total{flex:0 0 auto;width:auto;max-width:none;box-sizing:content-box}
.page-cart .discount-percentage::after, body#checkout .discount-percentage::after, .page-cart .discount.discount-percentage::after{content:" OFF";font-weight:700}
@media (max-width: 1024.98px){
.page-cart #content-wrapper, body#checkout #content-wrapper, .page-my-account #content-wrapper, .page-addresses #content-wrapper, .page-identity #content-wrapper, .page-history #content-wrapper, .page-order-detail #content-wrapper, .page-order-confirmation #content-wrapper, .page-guest-tracking #content-wrapper{width:100%}
}
@media (max-width: 767.98px){
.page-cart .card{padding:15px}
.page-cart .card.cart-container{padding:0}
.page-cart .cart-item .text-xs-right, .page-cart .cart-item .price, .page-cart .cart-item .qty{width:auto;padding:0}
.page-cart .cart-item .product-line-grid-right{padding:0;margin-top:12px}
.page-cart .cart-item .remove-from-cart{margin-left:5px}
.page-cart .cart-item .product-line-info .label, .page-cart .cart-item .value, .page-cart .cart-item .current-price, .page-cart .cart-item .product-price, .page-cart .dp_input_div{font-size:14px}
.page-cart .product-line-grid-right > .row{display:flex;align-items:center;flex-wrap:nowrap;gap:12px;margin:0;width:100%;padding:0 6px}
.page-cart .product-line-grid-right > .row > div{width:auto;max-width:none;flex:0 0 auto;padding:0}
.page-cart .product-line-grid-right > .row > .qty{order:1}
.page-cart .product-line-grid-right > .row > .price{order:2;flex:1 1 auto;display:flex;align-items:center;justify-content:flex-end;gap:14px;text-align:right}
.page-cart .product-line-grid-right .product-price, .page-cart .product-line-grid-right .cart-line-product-total{font-size:15px;padding:7px 14px}
.page-cart .cart-line-product-actions{order:3;flex:0 0 auto;margin:0 0 0 auto;padding:0}
.page-cart .cart-line-product-actions .remove-from-cart{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;margin:0}
.page-cart .product-line-grid-right > .row > .hidden-md-up{display:none}
.page-cart .product-line-grid-right > .row > .col-xs-6{flex:1 1 auto;width:auto;max-width:none;padding:0;margin:0}
.page-cart .product-line-grid-right > .row > .col-xs-6 > .row{display:flex;align-items:center;justify-content:center;flex-wrap:nowrap;gap:12px;width:100%;margin:0}
.page-cart .product-line-grid-right .qty, .page-cart .product-line-grid-right .price{flex:0 0 auto;width:auto;max-width:none;padding:0;margin:0}
.page-cart .product-line-grid-right > .row > .text-xs-right{flex:0 0 auto;width:auto;max-width:none;padding:0;margin:0 0 0 auto}
}
@media (min-width: 768px) and (max-width: 1024.98px){
.page-cart .product-line-grid-right > .row{display:flex;align-items:center;flex-wrap:nowrap;width:100%;margin:0}
.page-cart .product-line-grid-right > .row > .col-xs-6{flex:1 1 auto;width:auto;max-width:none}
.page-cart .product-line-grid-right > .row > .col-xs-6 > .row{display:flex;align-items:center;justify-content:center;flex-wrap:nowrap;gap:12px;width:100%;margin:0}
.page-cart .product-line-grid-right .qty, .page-cart .product-line-grid-right .price{flex:0 0 auto;width:auto;max-width:none;padding:0}
.page-cart .product-line-grid-right > .row > .text-xs-right{flex:0 0 auto;width:auto;max-width:none;margin-left:auto}
}

/* ===== SELECTOR DE CANTIDAD ===== */
.page-cart .cart-item .bootstrap-touchspin input.form-control, .page-cart .input-group.bootstrap-touchspin input.form-control{border:1px solid var(--cp-border);padding:4px 8px;color:var(--cp-text);height:auto;min-height:40px}
body:not([class*="ce-theme"]) .bootstrap-touchspin{position:relative;display:inline-flex;align-items:stretch;width:108px;height:40px;border:1px solid var(--cp-border);border-radius:var(--cp-r-input);background-color:var(--cp-surface);overflow:hidden;transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast)}
body:not([class*="ce-theme"]) .bootstrap-touchspin:focus-within{border-color:var(--cp-secondary);box-shadow:var(--cp-focus-ring)}
body:not([class*="ce-theme"]) .bootstrap-touchspin input.form-control, body:not([class*="ce-theme"]) .bootstrap-touchspin input.input-group, body:not([class*="ce-theme"]) .bootstrap-touchspin .js-cart-line-product-quantity{flex:1 1 auto;width:auto;min-width:0;height:38px;min-height:0;margin:0;padding:0 10px;border:none;border-radius:0;background-color:transparent;box-shadow:none;font-size:16px;color:var(--cp-text-strong);text-align:left;float:none}
body:not([class*="ce-theme"]) .bootstrap-touchspin input.form-control:focus{outline:none;border:none;box-shadow:none}
body:not([class*="ce-theme"]) .bootstrap-touchspin .input-group-btn-vertical{position:static;display:flex;flex-direction:column;flex:0 0 28px;width:28px;align-self:stretch;border-left:1px solid var(--cp-border)}
body:not([class*="ce-theme"]) .bootstrap-touchspin .input-group-btn-vertical .btn, body:not([class*="ce-theme"]) .btn-touchspin{flex:1 1 50%;width:28px;height:auto;min-height:0;margin:0;padding:0;border:none;border-radius:0;background-color:var(--cp-surface-sunken);color:var(--cp-text);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color var(--cp-t-fast), color var(--cp-t-fast)}
body:not([class*="ce-theme"]) .bootstrap-touchspin-down{border-top:1px solid var(--cp-border)}
body:not([class*="ce-theme"]) .btn-touchspin i, body:not([class*="ce-theme"]) .btn-touchspin .material-icons{font-size:15px;line-height:1}
body:not([class*="ce-theme"]) .bootstrap-touchspin .input-group-btn-vertical .btn:active{background-color:#BAF3D5;color:var(--cp-success-text);transform:scale(.92)}
body:not([class*="ce-theme"]) .bootstrap-touchspin:focus-within .input-group-btn-vertical .btn{background-color:var(--cp-surface-hover);color:var(--cp-success-text)}
body:not([class*="ce-theme"]) .bootstrap-touchspin .input-group-btn-vertical .btn:focus-visible{outline:none;box-shadow:inset var(--cp-focus-ring)}
@media (max-width: 767.98px){
body:not([class*="ce-theme"]) .btn:not(.btn-touchspin):not(.bootstrap-touchspin-up):not(.bootstrap-touchspin-down), body:not([class*="ce-theme"]) .btn-primary, body:not([class*="ce-theme"]) .btn-secondary, body:not([class*="ce-theme"]) button[type="submit"]{min-height:40px}
}
@media (hover: hover){
body:not([class*="ce-theme"]) .bootstrap-touchspin .input-group-btn-vertical .btn:hover{background-color:var(--cp-success-bg);color:var(--cp-success-text)}
}

/* ===== RESUMEN DE TOTALES ===== */
.page-cart .cart-summary-line .label, body#checkout .cart-summary-line .label, .page-cart li, body#checkout li{color:var(--cp-text)}
.page-cart .cart-item .price, .page-cart .cart-item .product-price, body#checkout .cart-summary-line .value{color:var(--cp-text-strong);font-size:14px}
.page-cart .card-block.cart-summary-totals .cart-summary-line:last-child, body#checkout .card-block.cart-summary-totals .cart-summary-line:last-child{padding:0;margin:0 0 10px 6px}
body:not([class*="ce-theme"]) .cart-summary-line.cart-total{border-top-color:var(--cp-border);border-bottom-color:var(--cp-border)}
body#checkout #js-checkout-summary, .page-cart .card.cart-summary{padding:14px 0;overflow:hidden;background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card)}
body#checkout #js-checkout-summary > .card-block, body#checkout #js-checkout-summary .cart-summary-totals, .page-cart .card.cart-summary .card-block, .page-cart .card.cart-summary .cart-detailed-subtotals, .page-cart .card.cart-summary .cart-detailed-totals{padding-left:16px;padding-right:16px}
body#checkout #js-checkout-summary > .card-block > .card-block, body#checkout #js-checkout-summary .cart-summary-subtotals-container, body#checkout #js-checkout-summary #cart-summary-product-list, .page-cart .card.cart-summary .cart-detailed-totals > .card-block{padding-left:0;padding-right:0}
/* v1.7.14 - el clearfix .cart-summary-line::after del tema es un ITEM FLEX mas, con su propio gap de 12px: dejaba el valor 12px corto del borde. Se apaga, salvo en la fila de envio, donde ::after es nuestra linea de ayuda. Ver seccion 30. */
body#checkout #js-checkout-summary .cart-summary-line:not(#cart-subtotal-shipping)::after, .page-cart .card.cart-summary .cart-summary-line:not(#cart-subtotal-shipping)::after{display:none}
body#checkout #js-checkout-summary .cart-summary-line, .page-cart .card.cart-summary .cart-summary-line{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:12px;margin:0;padding:2px 0;font-size:14.5px;line-height:1.2}
/* v1.7.13 - congruencia: el rotulo del envio salia en 600 en el carrito y en 400 en el checkout porque la regla generica de abajo (2 ids + 2 clases) le ganaba a la del envio (2 ids + 1 clase). Se repite a la misma profundidad. */
body#checkout #js-checkout-summary #cart-subtotal-shipping > .label, .page-cart .card.cart-summary #cart-subtotal-shipping > .label{font-weight:600}
body#checkout #js-checkout-summary .cart-summary-line > .label, .page-cart .card.cart-summary .cart-summary-line > .label{flex:1 1 auto;text-align:left;margin:0;padding:0;color:var(--cp-text);font-weight:400;line-height:1.2}
/* v1.7.13 - congruencia: el valor media 14px en el checkout y 16px en el carrito, por una regla vieja que agrupa los precios de la ficha con los valores del resumen. Se iguala aqui. */
body#checkout #js-checkout-summary .cart-summary-line > .value, .page-cart .card.cart-summary .cart-summary-line > .value{font-size:1rem;flex:0 0 auto;text-align:right;margin:0;padding:0;float:none;white-space:nowrap;font-weight:600;color:var(--cp-text-strong);font-variant-numeric:tabular-nums;line-height:1.2}
/* v1.7.32 - border-top:0 apaga el filete #DDD que el theme.css del core pone en .cart-summary-subtotals-container y que solo existe en el checkout: la misma fila quedaba con dos grises distintos alli y con uno en el carrito. En el carrito esta declaracion es inocua, porque el tema no le da borde superior a ese contenedor. */
body#checkout #js-checkout-summary .cart-summary-subtotals-container, .page-cart .card.cart-summary .cart-detailed-subtotals{padding-top:8px;padding-bottom:8px;border-top:0;border-bottom:1px solid var(--cp-surface-hover)}
body#checkout #js-checkout-summary .cart-summary-totals{padding-top:8px;padding-bottom:0}
body#checkout #js-checkout-summary #cart-subtotal-shipping > .value, body#checkout #js-checkout-summary #cart-subtotal-discount > .value, .page-cart .card.cart-summary #cart-subtotal-shipping > .value, .page-cart .card.cart-summary #cart-subtotal-discount > .value{color:var(--cp-success-text);font-weight:700}
/* v1.7.11 - los hijos reales de la fila llevan order:0, asi que la pildora entra con order:2 y la ayuda conserva el 3: ambas caen DEBAJO del rotulo y del valor, no delante. */
/* v1.7.12 - la fila arrastra gap:12px y al ser flex con wrap ese gap separa TAMBIEN las lineas: la ayuda quedaba a 15,9px de la pildora. Con row-gap:0 la separacion la fijan solo los margenes (12px del rotulo, 3px entre pildora y ayuda). */
/* v1.7.13 - la fila pasa a GRID. Con flex, dar linea propia a la pildora exigia flex-basis:100%, que la obligaba a ocupar todo el ancho; max-width:fit-content la ajustaba pero entre 600 y 900px se subia a la linea del rotulo. En grid, grid-column:1/-1 da fila propia y justify-self:start ajusta al contenido. Ver seccion 29. */
body#checkout #js-checkout-summary #cart-subtotal-shipping, .page-cart .card.cart-summary #cart-subtotal-shipping{display:grid;grid-template-columns:1fr auto;align-items:baseline;column-gap:12px;row-gap:0}
body#checkout #js-checkout-summary #cart-subtotal-shipping::before, .page-cart .card.cart-summary #cart-subtotal-shipping::before{grid-column:1 / -1;justify-self:start;max-width:100%}
body#checkout #js-checkout-summary #cart-subtotal-shipping::after, .page-cart .card.cart-summary #cart-subtotal-shipping::after{grid-column:1 / -1;justify-self:start;max-width:100%;padding-left:13px}
body#checkout #js-checkout-summary #cart-subtotal-shipping::before, .page-cart .card.cart-summary #cart-subtotal-shipping::before{flex:0 0 100%;order:2}
body#checkout #js-checkout-summary #cart-subtotal-shipping::after, .page-cart .card.cart-summary #cart-subtotal-shipping::after{flex:0 0 100%;order:3;margin-top:3px}
body#checkout #js-checkout-summary .cart-summary-line.cart-total, .page-cart .card.cart-summary .cart-summary-line.cart-total{margin:8px -16px 0;padding:12px 16px;background-color:var(--cp-surface-sunken);border-top:1px solid var(--cp-border);padding-bottom:6px}
body#checkout #js-checkout-summary .cart-summary-line.cart-total > .label, .page-cart .card.cart-summary .cart-summary-line.cart-total > .label{color:var(--cp-text-heading);font-weight:700;font-size:15px}
/* v1.7.32 - si la tienda no muestra la fila de IVA (cart-summary-totals.tpl la mete dentro de un {if}), .cart-total queda de :last-child y sin esta regla se quedaria sin el relleno inferior que aportaba aquella fila. */
body#checkout #js-checkout-summary .cart-summary-totals > .cart-summary-line.cart-total:last-child, .page-cart .card.cart-summary .cart-summary-totals > .cart-summary-line.cart-total:last-child{padding-bottom:12px}
body#checkout #js-checkout-summary .cart-summary-line.cart-total > .value, .page-cart .card.cart-summary .cart-summary-line.cart-total > .value{font-size:21px;font-weight:700;color:var(--cp-success-on-bg);letter-spacing:-.3px}
body#checkout #js-checkout-summary .cart-summary-totals > .cart-summary-line:last-child:not(.cart-total), .page-cart .card.cart-summary .cart-summary-totals > .cart-summary-line:last-child:not(.cart-total){margin:0 -16px;padding:4px 16px 12px;background-color:var(--cp-surface-sunken);font-size:12px}
body#checkout #js-checkout-summary .cart-summary-totals > .cart-summary-line:last-child:not(.cart-total) > .label, .page-cart .card.cart-summary .cart-summary-totals > .cart-summary-line:last-child:not(.cart-total) > .label{margin-left:0;padding-left:0;font-size:12px}
/* v1.7.22 - el valor del IVA pasa de --cp-text-muted (#7A7A7A, 4,07:1, prohibido) a --cp-text. La regla es NUESTRA (v1.7.13) y con 2 ids + 4 clases le ganaba a cualquier arreglo posterior: por eso se corrige aqui, en origen, y no con una regla nueva. */
body#checkout #js-checkout-summary .cart-summary-totals > .cart-summary-line:last-child:not(.cart-total) > .value, .page-cart .card.cart-summary .cart-summary-totals > .cart-summary-line:last-child:not(.cart-total) > .value{font-size:12px;font-weight:600;color:var(--cp-text)}
body#checkout #js-checkout-summary .cart-summary-line.cart-total > .label, body#checkout #js-checkout-summary .cart-summary-line.cart-total > .value, body#checkout #js-checkout-summary .cart-summary-totals > .cart-summary-line:last-child > .label, body#checkout #js-checkout-summary .cart-summary-totals > .cart-summary-line:last-child > .value, .page-cart .card.cart-summary .cart-summary-line.cart-total > .label, .page-cart .card.cart-summary .cart-summary-line.cart-total > .value, .page-cart .card.cart-summary .cart-summary-totals > .cart-summary-line:last-child > .label, .page-cart .card.cart-summary .cart-summary-totals > .cart-summary-line:last-child > .value{line-height:1.1}
body#checkout #js-checkout-summary #cart-summary-product-list{padding-top:10px;padding-bottom:4px}
body#checkout #js-checkout-summary #cart-summary-product-list .media-list{margin:0;padding:0;list-style:none}
body#checkout #js-checkout-summary #cart-summary-product-list .media-list li.media{display:block;margin:0 0 10px;padding:10px;background-color:var(--cp-surface-section);border:none;border-radius:var(--cp-r-card)}
body#checkout #js-checkout-summary #cart-summary-product-list .media-list li.media:last-child{margin-bottom:0}
body#checkout #js-checkout-summary #cart-summary-product-list .media-left{display:table-cell;vertical-align:middle;padding-right:10px}
body#checkout #js-checkout-summary #cart-summary-product-list .media-left img{width:52px;height:52px;padding:4px;object-fit:contain;background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:10px}
body#checkout #js-checkout-summary #cart-summary-product-list .media-body{display:table-cell;vertical-align:middle;width:100%;padding:8px 10px;background-color:var(--cp-surface);border-radius:10px;line-height:1.45}
body#checkout #js-checkout-summary #cart-summary-product-list .product-name{display:block;margin-bottom:3px;color:var(--cp-link);font-weight:600;font-size:13.5px}
body#checkout #js-checkout-summary #cart-summary-product-list .product-quantity{display:inline-block;margin-right:5px;padding:2px 9px;background-color:var(--cp-surface-section);border-radius:var(--cp-r-pill);color:var(--cp-text);font-size:11px;font-weight:600}
body#checkout #js-checkout-summary #cart-summary-product-list .product-price{display:inline-block;float:none;color:var(--cp-success-text);font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
body#checkout #js-checkout-summary #cart-summary-product-list .product-line-info{display:inline-block;margin:0;font-size:11px;color:var(--cp-text-muted)}
body#checkout #js-checkout-summary #cart-summary-product-list .media-body br{display:none}
@media (max-width: 1024.98px){
body#checkout .card-block.cart-summary-subtotals-container, body#checkout .card-block.cart-summary-totals, body#checkout .cart-summary-products, body#checkout #js-checkout-summary .card-block, .page-cart .card-block.cart-summary-subtotals-container, .page-cart .card-block.cart-summary-totals{padding-left:16px;padding-right:16px}
body#checkout .cart-summary-line, .page-cart .cart-summary-line{padding-left:0;padding-right:0}
body#checkout .cart-summary-line .value, body#checkout .cart-summary-line .price, .page-cart .cart-summary-line .value{padding-right:0;text-align:right}
body#checkout #js-checkout-summary, body#checkout .cart-summary{padding-top:14px;padding-bottom:14px}
body#checkout #js-checkout-summary .card-block:first-child{padding-top:0}
body#checkout .cart-summary-line{padding-top:6px;padding-bottom:6px}
}

/* ===== CUPON DE DESCUENTO ===== */
.page-cart .promo-code-button, body#checkout .promo-code-button, .page-cart a.collapse-button, body#checkout a.collapse-button{color:var(--cp-link)}
.page-cart .promo-code-button:hover, body#checkout .promo-code-button:hover, .page-cart a.collapse-button:hover, body#checkout a.collapse-button:hover{color:var(--cp-link-hover)}
.page-cart .block-promo .promo-name .cart-summary-line span, body#checkout .block-promo .promo-name .cart-summary-line span, .page-cart .block-promo .promo-name .cart-summary-line .label, body#checkout .block-promo .promo-name .cart-summary-line .label{color:var(--cp-success-text);font-weight:600;font-size:14px;text-transform:uppercase}
.page-cart .promo-discounts .cart-summary-line .label .code, body#checkout .promo-discounts .cart-summary-line .label .code{color:var(--cp-warning-text);cursor:pointer}
.page-cart .block-promo .promo-input, body#checkout .block-promo .promo-input{width:65%;border:1px solid var(--cp-border);border-radius:var(--cp-r-input)}
.page-cart .block-promo .promo-input:focus-visible, body#checkout .block-promo .promo-input:focus-visible{outline:none;border-color:var(--cp-secondary);box-shadow:var(--cp-focus-ring)}
.page-cart .block-promo .promo-input + button, body#checkout .block-promo .promo-input + button{margin-left:5px;border:none;padding:9px 18px;width:auto;border-radius:var(--cp-r-btn);background-color:var(--cp-secondary);color:var(--cp-on-primary);font-weight:600}
.page-cart .block-promo .promo-input + button:hover, body#checkout .block-promo .promo-input + button:hover{background-color:var(--cp-secondary-hover)}
.page-cart .block-promo .promo-code .alert-danger, body#checkout .block-promo .promo-code .alert-danger{border-radius:var(--cp-r-card)}
body:not([class*="ce-theme"]) a.btn:not(.btn-primary):not(.btn-secondary):not(.elementor-button), body:not([class*="ce-theme"]) .block-promo a.promo-code-button, body:not([class*="ce-theme"]) .block-promo .promo-code-button, body:not([class*="ce-theme"]) a.collapse-button, body:not([class*="ce-theme"]) .js-remove-email-alert{color:var(--cp-link)}
body:not([class*="ce-theme"]) a.btn:not(.btn-primary):not(.btn-secondary):not(.elementor-button):hover, body:not([class*="ce-theme"]) .block-promo .promo-code-button:hover, body:not([class*="ce-theme"]) a.collapse-button:hover, body:not([class*="ce-theme"]) .js-remove-email-alert:hover{color:var(--cp-link-hover)}
body:not([class*="ce-theme"]) .alert-danger, body:not([class*="ce-theme"]) .block-promo .promo-code .alert-danger{background-color:var(--cp-danger-bg);border-color:rgba(211,47,47,.30);color:var(--cp-danger-on-bg);border-radius:var(--cp-r-card)}
body:not([class*="ce-theme"]) .promo-name, body:not([class*="ce-theme"]) .promo-name .cart-summary-line span{color:var(--cp-success-text)}
body#checkout .cart-voucher, .page-cart .cart-voucher{padding:12px 16px 4px}
body#checkout .cart-voucher .promo-code-button.display-promo, .page-cart .cart-voucher .promo-code-button.display-promo{display:block;width:100%;box-sizing:border-box;margin:0;padding:0;background-color:var(--cp-surface);border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-btn);color:var(--cp-text);font-size:14px;font-weight:600;text-align:center;text-decoration:none;cursor:pointer;transition:border-color var(--cp-t-fast), color var(--cp-t-fast)}
/* v1.7.31 - el relleno vive en el ANCLA, no en el <p>: el <a class=collapse-button> es display:inline y solo 186x20 de los 323x44 del boton respondian al toque. En un telefono se falla el toque fuera del texto. Medido en el checkout a 390px. */
body#checkout .cart-voucher .promo-code-button.display-promo > a, .page-cart .cart-voucher .promo-code-button.display-promo > a{display:block;box-sizing:border-box;min-height:44px;padding:12px 16px;line-height:20px;text-align:center;color:inherit;text-decoration:none}
body#checkout .cart-voucher .promo-code-button.display-promo:hover, .page-cart .cart-voucher .promo-code-button.display-promo:hover{border-color:var(--cp-secondary);color:var(--cp-link)}
.page-cart .cart-voucher .promo-code, body#checkout .cart-voucher .promo-code{width:100%;margin:0;padding:0}
.page-cart .cart-voucher .promo-code form, body#checkout .cart-voucher .promo-code form{display:block;width:100%;margin:0}
.page-cart .cart-voucher .promo-input, body#checkout .cart-voucher .promo-input{display:block;width:100%;box-sizing:border-box;height:44px;margin:10px 0 8px;padding:0 12px;float:none;border:1px solid var(--cp-border);border-radius:var(--cp-r-btn)}
.page-cart .cart-voucher .promo-input:focus, body#checkout .cart-voucher .promo-input:focus{outline:none;border-color:var(--cp-secondary);box-shadow:var(--cp-focus-ring)}
.page-cart .cart-voucher .promo-input + button, body#checkout .cart-voucher .promo-input + button{display:block;width:100%;box-sizing:border-box;min-height:44px;margin:0;padding:12px 16px;background-color:var(--cp-secondary);border:none;border-radius:var(--cp-r-btn);color:var(--cp-on-primary);font-size:14px;font-weight:600;cursor:pointer;transition:background-color var(--cp-t-fast);height:44px}
.page-cart .cart-voucher .promo-input + button:hover, body#checkout .cart-voucher .promo-input + button:hover{background-color:var(--cp-secondary-hover)}
.page-cart .cart-summary .promo-name, body#checkout #js-checkout-summary .promo-name{margin:10px 0 14px;padding:0;list-style:none;background-color:#F1FBF6;border:1px solid var(--cp-success-bg);border-left:3px solid var(--cp-primary);border-radius:var(--cp-r-btn)}
.page-cart .cart-summary .promo-name .cart-summary-line, body#checkout #js-checkout-summary .promo-name .cart-summary-line{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0;padding:9px 12px;background-color:transparent}
.page-cart .cart-summary .promo-name .cart-summary-line > .label, body#checkout #js-checkout-summary .promo-name .cart-summary-line > .label{flex:1 1 auto;display:flex;align-items:center;gap:7px;padding:0;background-color:transparent;border:none;border-radius:0;color:#007036;font-size:12px;font-weight:700;letter-spacing:.3px;line-height:1.25;text-transform:uppercase}
.page-cart .cart-summary .promo-name .cart-summary-line > .label::before, body#checkout #js-checkout-summary .promo-name .cart-summary-line > .label::before{content:"";flex:0 0 auto;width:14px;height:14px;background-color:var(--cp-primary);-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M21.41 11.58l-9-9A2 2 0 0 0 11 2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 .59 1.42l9 9a2 2 0 0 0 2.82 0l7-7a2 2 0 0 0 0-2.84zM6.5 8A1.5 1.5 0 1 1 8 6.5 1.5 1.5 0 0 1 6.5 8z'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M21.41 11.58l-9-9A2 2 0 0 0 11 2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 .59 1.42l9 9a2 2 0 0 0 2.82 0l7-7a2 2 0 0 0 0-2.84zM6.5 8A1.5 1.5 0 1 1 8 6.5 1.5 1.5 0 0 1 6.5 8z'/></svg>") center/contain no-repeat}
.page-cart .cart-summary .promo-name .float-xs-right, body#checkout #js-checkout-summary .promo-name .float-xs-right{flex:0 0 auto;display:flex;align-items:center;gap:9px;float:none}
.page-cart .cart-summary .promo-name .float-xs-right > span, body#checkout #js-checkout-summary .promo-name .float-xs-right > span{color:var(--cp-success-text);font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
.page-cart .cart-summary .promo-name a, .page-cart .cart-summary .promo-name i, .page-cart .cart-summary .promo-discounts a, body#checkout #js-checkout-summary .promo-name a, body#checkout #js-checkout-summary .promo-name i, body#checkout #js-checkout-summary .promo-discounts a{display:inline-flex;align-items:center;color:var(--cp-link);font-size:17px;cursor:pointer}
.page-cart .cart-summary .promo-name a:hover, .page-cart .cart-summary .promo-discounts a:hover, body#checkout #js-checkout-summary .promo-name a:hover, body#checkout #js-checkout-summary .promo-discounts a:hover{color:var(--cp-link-hover)}
.page-cart .cart-summary .promo-discounts .cart-summary-line .label .code, body#checkout #js-checkout-summary .promo-discounts .cart-summary-line .label .code{color:var(--cp-link);cursor:pointer;text-decoration:none}
.page-cart .cart-voucher .promo-code-button.cancel-promo, body#checkout .cart-voucher .promo-code-button.cancel-promo{display:flex;align-items:center;justify-content:center;width:100%;min-height:44px;margin-top:8px;padding:10px;color:var(--cp-link);font-size:14px;font-weight:600;text-decoration:none;cursor:pointer}
.page-cart .cart-voucher .promo-code-button.cancel-promo:hover, body#checkout .cart-voucher .promo-code-button.cancel-promo:hover{color:var(--cp-link-hover)}
.page-cart .cart-summary .promo-name a, body#checkout #js-checkout-summary .promo-name a{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-10px -8px -10px 0;border-radius:var(--cp-r-btn);font-size:18px}
.page-cart .cart-summary .promo-name a:hover, body#checkout #js-checkout-summary .promo-name a:hover{background-color:var(--cp-success-bg)}
@media (max-width: 767.98px){
.page-cart .block-promo.promo-highlighted, body#checkout .block-promo.promo-highlighted{font-size:14px;margin:0;padding:0 5px}
.page-cart .block-promo .promo-input, body#checkout .block-promo .promo-input{display:block;width:100%;height:44px;margin:0 0 10px}
.page-cart .block-promo .promo-input + button, body#checkout .block-promo .promo-input + button{display:block;width:100%;margin:0;padding:12px 18px;min-height:44px}
.page-cart .block-promo form, body#checkout .block-promo form{display:block;width:100%}
.page-cart .cart-voucher, body#checkout .cart-voucher{padding-left:10px;padding-right:10px}
.page-cart .cart-summary .promo-name, body#checkout #js-checkout-summary .promo-name{width:auto;margin-left:0;margin-right:0;border:1px solid var(--cp-success-bg);border-left:3px solid var(--cp-primary);border-radius:var(--cp-r-btn)}
.page-cart .cart-summary .promo-name .cart-summary-line, body#checkout #js-checkout-summary .promo-name .cart-summary-line{flex-wrap:nowrap;gap:8px;padding:9px 10px}
.page-cart .cart-summary .promo-name .cart-summary-line > .label, body#checkout #js-checkout-summary .promo-name .cart-summary-line > .label{min-width:0;gap:6px;font-size:11px;letter-spacing:0}
.page-cart .cart-summary .promo-name .cart-summary-line > .label > span, body#checkout #js-checkout-summary .promo-name .cart-summary-line > .label > span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.page-cart .cart-summary .promo-name .float-xs-right, body#checkout #js-checkout-summary .promo-name .float-xs-right{gap:4px;white-space:nowrap}
.page-cart .cart-summary .promo-name .float-xs-right > span, body#checkout #js-checkout-summary .promo-name .float-xs-right > span{font-size:13px}
}

/* ===== CONFIRMACION Y DETALLE DE PEDIDO ===== */
.page-my-account .page-content, .page-addresses .page-content, .page-identity .page-content, .page-history .page-content{border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card)}
.page-my-account .link-item, .page-order-detail .box, .page-guest-tracking .box{border:1px solid var(--cp-border);box-shadow:var(--cp-shadow-card);border-radius:var(--cp-r-card);transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast)}
/* v1.7.46 - Reducida por la revision adversarial: su primera mitad (.page-history #history ...) estaba MUERTA -id y clase van en el MISMO body, el descendiente exigido no existe- y el font-size:12px quedo superado por el chip. Sobrevive solo el text-align de la mitad viva. */
.page-order-detail #order-history .history-lines .history-line .label, .page-guest-tracking #order-history .history-lines .history-line .label{text-align:left}
.page-history .total{font-weight:700;color:var(--cp-text-strong)}
/* v1.7.44 - EL SUFIJO SOLO SE VEIA EN MOVIL. El core pinta el historial DOS veces: la tabla de escritorio, cuya celda de importe es <td class="text-xs-right"> SIN clase .total (history.tpl:52), y las tarjetas de .orders.hidden-md-up, donde el importe SI es <div class="total"> (history.tpl:89). Como la regla se colgaba de .total, en escritorio no salia nada y el cliente veia una cifra MENOR que la que pago, sin ninguna marca. */
/* v1.7.44 - Que la cifra es NETA esta medido en produccion, no supuesto: el pedido 260900140 da Total Productos $ 329.799, IVA $ 62.662 y Subtotal $ 329.799, y la celda del historial muestra 329.799. Las dos variantes son excluyentes (a 1512 la tabla se ve y las tarjetas van a display:none; a 393 al reves), asi que el sufijo nunca sale dos veces. */
/* v1.7.44 - TRATAMIENTO: no es texto suelto, es el CHIP DE DATO del DS (5.7): pastilla de radio --cp-r-pill, relleno 2px 9px, ~11px, fondo blanco y borde fino neutro, que es el patron que el DS reserva para METADATOS junto a una cifra. El borde va en --cp-border-strong y no en --cp-border porque las filas alternas del historial usan rgba(0,0,0,.05): con el borde claro el canto del chip no se leia sobre la fila tintada. */
/* v1.7.44 - Texto en --cp-text #666666 sobre blanco = 5,74:1, AA. El DS prohibe expresamente --cp-text-muted #7A7A7A como color de TEXTO (4,29:1). El peso 600 a 11px lo separa del importe, que va a 16px/400. */
.page-history .total::after, .page-history table td.text-xs-right::after{content:"+ IVA";display:inline-block;margin-left:6px;padding:2px 9px;border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-pill);background-color:var(--cp-surface);color:var(--cp-text);font-size:11px;font-weight:600;line-height:1.45;vertical-align:middle;white-space:nowrap}
/* v1.7.45 - LA CABECERA DE UNA COLUMNA DE IMPORTES SIGUE A SUS VALORES. Medido en vivo: en el historial la cabecera "Total" iba a la izquierda y sus cifras a la derecha, con 115px entre los centros de uno y otro; en el detalle, "Precio unitario" 94px y "Precio total" 89px. Son las tres unicas columnas incoherentes de toda el area de cuenta (auditadas todas las tablas con cabecera). */
/* v1.7.45 - Se acota por POSICION porque no hay otro asidero: el <th> del importe no lleva clase en el historial (history.tpl). En el detalle si hay un id estable, #order-products, asi que ahi la posicion va anclada a el. La bateria incorpora el control 13, que comprueba en marcado real que cada cabecera comparte alineacion con su columna: si el core reordena, sale en rojo. */
.page-history table thead th:nth-child(3){text-align:right}
/* v1.7.45 - La revision adversarial encontro que order-detail-return.tpl emite el MISMO #order-products con clase "return" y una columna de checkbox delante: alli los importes son las columnas 5 y 6, y la 4 (Devuelto) tambien va a la derecha en sus celdas (td.text-xs-right, verificado en la plantilla del core; misma rama en PS 9.1.4). Sin el :not(), la regla habria alineado a la derecha la cabecera de Cantidad sobre celdas a la izquierda: la misma incoherencia que esta version corrige, recreada en la variante de devoluciones. */
/* v1.7.51 - PUNTO 1 del director: la CANTIDAD iba a la izquierda mientras el precio unitario y el total iban a la derecha, y son los tres numeros de la misma familia. MEDIDO en devel sobre el pedido 849: las cuatro celdas computaban [start, start, right, right] y las cuatro cabeceras [left, left, right, right], en 900, 1024, 1280 y 1512 -o sea en las DOS formas que toma la tabla: apilada en tarjetas por debajo de 992 y tabla real por encima-. La cabecera y la celda se declaran en la MISMA regla a proposito: el control 13 exige que cada cabecera comparta text-align con su columna, y separarlas es justo como se rompe eso. */
.page-order-detail #order-products:not(.return) thead th:nth-child(2), .page-order-detail #order-products:not(.return) thead th:nth-child(3), .page-order-detail #order-products:not(.return) thead th:nth-child(4), .page-order-detail #order-products:not(.return) tbody td:nth-child(2), .page-guest-tracking #order-products:not(.return) thead th:nth-child(2), .page-guest-tracking #order-products:not(.return) thead th:nth-child(3), .page-guest-tracking #order-products:not(.return) thead th:nth-child(4), .page-guest-tracking #order-products:not(.return) tbody td:nth-child(2){text-align:right}
.page-order-detail #order-products.return thead th:nth-child(4), .page-order-detail #order-products.return thead th:nth-child(5), .page-order-detail #order-products.return thead th:nth-child(6){text-align:right}
/* v1.7.48 - LAS DOS ACCIONES DEL HISTORIAL PASAN A BOTONES (variante M1-A, aprobada por el director). Motivo medido en el marcado real: en la tarjeta movil (history.tpl:99-112) las acciones son anclas con SOLO un <i class="material-icons"> dentro -el tema las pinta a 24px sin margen -.material-icons pelada declara font-size:24px, y el margin-right:.625rem y el font-size:1rem del tema estan ACOTADOS a .btn-primary/.btn-secondary/.btn-tertiary, no al icono suelto-, es decir muy por debajo del minimo tactil de 40x40 del DS; y en la tabla (history.tpl:69-76) son texto suelto al que el tema da .page-customer-account #content .order-actions a{padding:0 .125rem}, unos 21px de alto. */
/* v1.7.48 - EL ROTULO DEL BOTON MOVIL SALE DE attr(title) Y NO SE HARDCODEA: esas dos anclas no tienen nodo de texto, pero SI llevan title con la cadena de Traducciones ({l s='Details'} y {l s='Reorder'}), asi que content:attr(title) reutiliza EL MISMO literal que muestra la tabla de escritorio. Con eso las dos vistas no pueden divergir, cambiar el texto en BO > Traducciones cambia las dos a la vez, y si el title llegara vacio queda el icono solo: degradacion benigna. */
/* v1.7.48 - SE RETIRAN PRIMERO LAS DOS REGLAS SUPERADAS de estas acciones (el border-right separador de .view-order-details-link y el padding/font-size del td): en CSS escribir encima NO es aditivo y ese filete se habria pintado DENTRO del boton, que es exactamente la familia de defectos de la v1.7.26. */
/* v1.7.48 - CONTRASTE: los rotulos van en --cp-link-hover #006BB3 y no en --cp-link #007ACC, que sobre el fondo hundido #F8F9FA da 4,28:1 y no cumple AA a 13px/600 (no es texto grande). Calculado: #006BB3 da 5,31:1 sobre el hundido y 4,81:1 sobre el fondo pulsado #ECEEF1. Es el mismo 4,28 que ya se corrigio en las v1.7.4 y v1.7.13. */
/* v1.7.48 - El foco NO necesita regla propia: .page-history a:focus-visible (0,2,1) ya da anillo del DS y color, y como las reglas del boton son (1,3,1) en la tabla y (1,4,1)/(1,5,1) en la tarjeta, el radio del boton gana tambien en foco, asi que el anillo sigue el canto de 8px en vez del 2px generico. */
/* v1.7.48 - LA CELDA DEJA QUE LOS BOTONES ENVUELVAN, y esto NO es preferencia: con los dos botones en linea y sin poder envolver, el ancho minimo de la ultima columna sube y ARRASTRA A TODA LA TABLA. Medido con el control 14 contra la v1.7.45 de produccion, que no desborda a ningun ancho: la tabla pedia 787px donde el contenedor da 720 (768-991) y 977 donde da 960 (1024-1025). Dejandolos envolver, el minimo de la celda pasa a ser el del boton mas ancho y el reparto de la tabla decide solo: por debajo de 1200px se apilan y desde ahi vuelven a la linea (ver la regla siguiente). */
/* v1.7.48 - Se descarto display:flex en el <td>: Chrome calcula mal el ancho MAXIMO intrinseco de una celda flex y la tabla le daba siempre el minimo, con lo que los botones se apilaban tambien a 1440px (medido). Con el flujo en linea de siempre, font-size:0 en la celda mata el espacio en blanco entre las dos anclas y el margen de 4px por lado da los 8px que el DS exige entre objetivos tactiles, tanto en horizontal como al envolver. */
.page-history #content .text-sm-center.order-actions{padding:8px 10px;font-size:0;white-space:normal}
/* v1.7.48 - Se apunta a "a" dentro del td y no a .view-order-details-link porque las clases de esas dos anclas estan NO VERIFICADAS en el DOM de esta tienda (la auditoria estatica las dejo en NO_VERIFICADO_EN_PRODUCCION y un arnes propio las transcribio con class="label"). Con "a" el boton sale en los dos casos, y se redeclaran ademas las SIETE propiedades que .table-labeled .label del tema impone a un enlace con esa clase -color:#fff, padding, margin, font-size:inherit, font-weight, white-space y border-radius- para que el resultado no dependa de cual sea. Experimento que lo cierra: en el historial con sesion, document.querySelector(".order-actions a").className. */
.page-history #content .text-sm-center.order-actions a{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-height:34px;margin:4px;padding:0 12px;border:1px solid #BADCF3;border-radius:var(--cp-r-btn);background-color:#F1F7FB;color:var(--cp-link-hover);font-size:12px;font-weight:600;line-height:1.2;text-decoration:none;white-space:nowrap;transition:background-color var(--cp-t-fast), border-color var(--cp-t-fast)}
.page-history #content .text-sm-center.order-actions a:hover{background-color:var(--cp-info-bg);border-color:var(--cp-link)}
.page-history #content .text-sm-center.order-actions a:focus-visible{border-color:var(--cp-link)}
/* v1.7.48 - En tablet la misma tabla se toca con el dedo (el core la muestra desde 768px con hidden-sm-down), asi que ahi los botones suben al minimo tactil de 40px del DS y el hueco entre ambos pasa de 8 a 10px. En escritorio se quedan en 34px: el puntero fino no necesita 40 y la fila de la tabla no debe engordar. */
@media (min-width:768px) and (max-width:1024.98px){.page-history #content .text-sm-center.order-actions{padding:6px 10px}.page-history #content .text-sm-center.order-actions a{min-height:40px;margin:5px}}
/* v1.7.48 - El h3 de la referencia se reescribe aqui de todos modos, asi que se le corrige el color: el tema lo deja en #7A7A7A (4,29:1 sobre blanco), que a 16px/700 NO es texto grande para la norma -pide 18,66px en negrita- y por tanto incumple AA. Pasa a --cp-text-heading #404040, 9,74:1. */
/* v1.7.48 - DESDE 1200px LOS DOS BOTONES VUELVEN A LA LINEA, que es como el director aprobo la M1-A. Sin esta regla se apilan en TODOS los anchos -medido de 768 a 1920- y la fila de la tabla engorda de 63 a 100px. El corte no es 1025 sino 1200 porque el limite real no es el viewport sino el .container de Bootstrap: hasta 1199 mide 960px y la celda solo recibe 160 de los 239 que los dos botones necesitan (forzar la linea ahi desborda la tabla +11px, medido); desde 1200 el contenedor pasa a 1140 y caben con holgura. Por debajo se apilan, que es justo lo que evita el desborde. */
@media (min-width:1200px){.page-history #content .text-sm-center.order-actions{white-space:nowrap}}
/* v1.7.48 - LA TARJETA MOVIL, con el orden aprobado: referencia y total arriba, fecha y chip de estado abajo. Se monta con grid sobre .col-xs-10 porque el posicionamiento por grid-area no depende del orden del DOM, que es a>h3, .date, .total, .status. Hay que neutralizar de Bootstrap el float, el ancho porcentual y el canalon de 15px de las dos columnas: sin eso .col-xs-2 seguiria siendo una columna del 16,66% y los botones no cabrian. */
@media (max-width:767.98px){.page-history #content .orders .order .row{display:block;margin:0}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10{display:grid;grid-template-columns:1fr auto;column-gap:12px;row-gap:6px;align-items:center;float:none;width:100%;padding:0}}
/* v1.7.50 - PUNTO 1 del director: la rejilla tiene que ACOGER a los hijos que no son suyos. cporderinvoice inyecta por JS (history-column.js, injectCards) un div.cpinvoice-fo-doc como hermano siguiente de .status, o sea DENTRO de este .col-xs-10; sin area asignada quedaba en auto-colocacion y caia donde hubiera hueco: MEDIDO EN VIVO sobre el pedido 260900150 de devel, en 431-767 caia en la fila 3 columna 1 y le faltaban 127,0px exactos (los 114,98 de la columna 2 mas los 12 del canalon) en cinco anchos, y bajo 431 caia en la fila 2 columna 2 -el hueco que deja el chip al irse a su fila-, o sea A LA DERECHA DE LA FECHA, ademas de inflar la columna 2 a 194,1px y estrujar el numero de pedido a 84,5px a 360. Esta regla general da ancho completo a CUALQUIER hijo, presente o futuro, y pesa (1,4,0): pierde contra las cuatro piezas del core, que pesan (1,4,1) y (1,5,0). No nombra al modulo a proposito: si manana otro modulo inyecta algo ahi, tambien cae bien. OJO AL MANTENERLA: este selector va SIN el body pegado, contra el habito del proyecto, y tiene que seguir asi. Con `body.page-history` sube a (1,4,1), EMPATA con la regla `> a` y le roba el grid-column-end por orden: medido a 360 y 393, la referencia sale a ancho completo y el importe se pinta encima. Aqui hace falta PERDER, no ganar. */
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10 > *{grid-column:1/-1}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10 > a{grid-area:1/1;min-width:0}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10 > a > h3{margin:0;font-size:16px;line-height:1.3;color:var(--cp-text-heading)}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10 > .total{grid-area:1/2;justify-self:end}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10 > .date{grid-area:2/1}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-10 > .status{grid-area:2/2;justify-self:end}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2{display:flex;gap:8px;float:none;width:100%;padding:0;margin-top:10px}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 > div{flex:1 1 50%;display:flex}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 a{flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;gap:6px;box-sizing:border-box;min-width:0;min-height:40px;padding:0 10px;border:1px solid #BADCF3;border-radius:var(--cp-r-btn);background-color:#F1F7FB;color:var(--cp-link-hover);font-size:12px;font-weight:600;line-height:1.2;text-decoration:none}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 a:hover{background-color:var(--cp-info-bg);border-color:var(--cp-link)}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 a:focus-visible{border-color:var(--cp-link)}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 a::after{content:attr(title);min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 a .material-icons{flex:0 0 auto;margin:0;font-size:15px;line-height:1}}
/* v1.7.48 - Por debajo de 360px los dos botones lado a lado dejan menos de 80px utiles para el rotulo y "Volver a comprar" se recortaria con puntos suspensivos, asi que ahi se apilan a ancho completo. Este bloque va DESPUES del de 767.98 a proposito: los dos casan a 320px y a igual especificidad decide el orden de fuente (leccion v1.7.8). */
@media (max-width:359.98px){.page-history #content .orders .order .col-xs-2{flex-wrap:wrap}.page-history #content .orders .order .col-xs-2 > div{flex:1 1 100%}}
.page-order-detail .box table.table-striped thead tr th:nth-child(3), .page-order-detail .box table.table-striped tbody tr td:nth-child(3), .page-guest-tracking .box table.table-striped thead tr th:nth-child(3), .page-guest-tracking .box table.table-striped tbody tr td:nth-child(3){display:none}
.page-order-detail .shipping-line > ul > li:nth-child(3), .page-guest-tracking .shipping-line > ul > li:nth-child(3){display:none}
/* v1.7.47 - CHIP DE ESTADO B2-AUTOMATICO (contrato del director, 05-09-2026): el color del BO manda para texto y borde, y el FONDO se deriva de el solo. El unico dato que llega es background-color EN LINEA (4 emisiones: history.tpl:56,92 y order-detail.tpl:99,112) y de el salen DOS piezas sin mapa: el ANILLO del borde -border transparente + el background-color clipeado a border-box asoma PURO en ese 1px- y el PASTEL del interior -capa de velo blanco al 90% clipeada a padding-box-. La capa transparente extra existe para que el clip del background-color sea el de la ULTIMA capa (border-box): sin ella el color se recorta al padding-box y el anillo desaparece (verificado con sondeo de pixeles, variante de control incluida). */
/* v1.7.47 - EL TEXTO es lo unico que CSS no puede leer del style en linea: va por MAPA-IDENTIDAD (43 anclas [style*="#XXXXXX" i] que solo declaran --cp-chip-texto): para los hex RECOMENDADOS y los oscuros vigentes el texto ES el mismo hex del BO (identidad, contrato estricto); para las 19 anclas heredadas que no alcanzan 4,6 sobre su propio pastel, su par oscurecido (las claras de verdad -#CDDC39, #FBC02D, #32CD32- serian ilegibles; el resto solo roza el umbral). Respaldo para un hex futuro sin mapa: --cp-text-strong #262626 sobre el pastel del tono nuevo (>=10:1) con su anillo y pastel CORRECTOS automaticos - legible siempre, solo el texto pierde el tono hasta anadir una linea al mapa con tests/generar_chip.py. */
/* v1.7.47 - Contrastes validados por el generador: los 43 textos cumplen AA (4,5) sobre su pastel 90/10 con objetivo interno 4,6 a dos decimales (peor caso exacto 4,56 segun cuantizacion) y dan >=5,2 sobre blanco (lo que queda en @media print, donde fondos y anillo no se imprimen). En forced-colors el sistema repinta el texto y el estado lo comunica el TEXTO del propio estado. Especificidades de los 4 contextos, las de la v1.7.45/46: historial movil por victoria (1,4,0)>(1,3,0); las DOS tablas (0,2,0)=(0,2,0 del tema) y el history-lines del detalle (1,4,0)=(1,4,0) por empate+orden -custom.css carga ultimo en el bundle. */
.page-history .label-pill, .page-order-detail .label-pill, .page-history #content .orders .order .label-pill, .page-order-detail #order-history .history-lines .history-line .label-pill, .page-guest-tracking .label-pill, .page-guest-tracking #order-history .history-lines .history-line .label-pill{display:inline-block;border:1px solid transparent;border-radius:var(--cp-r-pill);padding:3px 11px;font-size:13px;font-weight:700;line-height:1.35;letter-spacing:.01em;color:var(--cp-chip-texto,var(--cp-text-strong));background-image:linear-gradient(rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(rgba(255,255,255,0),rgba(255,255,255,0));background-clip:padding-box,border-box;background-origin:padding-box,border-box}
@media (max-width:767.98px){.page-history #content .orders .order .label-pill, .page-order-detail .label-pill, .page-order-detail #order-history .history-lines .history-line .label-pill, .page-guest-tracking .label-pill, .page-guest-tracking #order-history .history-lines .history-line .label-pill{font-size:12px;padding:2px 9px}}
/* v1.7.47 - EL MAPA DE TEXTO: 24 identidades (recomendados + heredados aptos) + 19 pares oscurecidos para las anclas heredadas bajo 4,6. El flag i cubre mayusculas/minusculas (validado con #b35900 real). Regenerable con tests/generar_chip.py. */
.page-history .label-pill[style*="#5364C7" i], .page-order-detail .label-pill[style*="#5364C7" i], .page-guest-tracking .label-pill[style*="#5364C7" i]{--cp-chip-texto:#5364C7}
.page-history .label-pill[style*="#0A6CC4" i], .page-order-detail .label-pill[style*="#0A6CC4" i], .page-guest-tracking .label-pill[style*="#0A6CC4" i]{--cp-chip-texto:#0A6CC4}
.page-history .label-pill[style*="#8A24A8" i], .page-order-detail .label-pill[style*="#8A24A8" i], .page-guest-tracking .label-pill[style*="#8A24A8" i]{--cp-chip-texto:#8A24A8}
.page-history .label-pill[style*="#8E6500" i], .page-order-detail .label-pill[style*="#8E6500" i], .page-guest-tracking .label-pill[style*="#8E6500" i]{--cp-chip-texto:#8E6500}
.page-history .label-pill[style*="#A95400" i], .page-order-detail .label-pill[style*="#A95400" i], .page-guest-tracking .label-pill[style*="#A95400" i]{--cp-chip-texto:#A95400}
.page-history .label-pill[style*="#007585" i], .page-order-detail .label-pill[style*="#007585" i], .page-guest-tracking .label-pill[style*="#007585" i]{--cp-chip-texto:#007585}
.page-history .label-pill[style*="#00795B" i], .page-order-detail .label-pill[style*="#00795B" i], .page-guest-tracking .label-pill[style*="#00795B" i]{--cp-chip-texto:#00795B}
.page-history .label-pill[style*="#68720C" i], .page-order-detail .label-pill[style*="#68720C" i], .page-guest-tracking .label-pill[style*="#68720C" i]{--cp-chip-texto:#68720C}
.page-history .label-pill[style*="#007C3B" i], .page-order-detail .label-pill[style*="#007C3B" i], .page-guest-tracking .label-pill[style*="#007C3B" i]{--cp-chip-texto:#007C3B}
.page-history .label-pill[style*="#404040" i], .page-order-detail .label-pill[style*="#404040" i], .page-guest-tracking .label-pill[style*="#404040" i]{--cp-chip-texto:#404040}
.page-history .label-pill[style*="#CB2B2B" i], .page-order-detail .label-pill[style*="#CB2B2B" i], .page-guest-tracking .label-pill[style*="#CB2B2B" i]{--cp-chip-texto:#CB2B2B}
.page-history .label-pill[style*="#C73000" i], .page-order-detail .label-pill[style*="#C73000" i], .page-guest-tracking .label-pill[style*="#C73000" i]{--cp-chip-texto:#C73000}
.page-history .label-pill[style*="#2F5EED" i], .page-order-detail .label-pill[style*="#2F5EED" i], .page-guest-tracking .label-pill[style*="#2F5EED" i]{--cp-chip-texto:#2F5EED}
.page-history .label-pill[style*="#7C1EDC" i], .page-order-detail .label-pill[style*="#7C1EDC" i], .page-guest-tracking .label-pill[style*="#7C1EDC" i]{--cp-chip-texto:#7C1EDC}
.page-history .label-pill[style*="#167D16" i], .page-order-detail .label-pill[style*="#167D16" i], .page-guest-tracking .label-pill[style*="#167D16" i]{--cp-chip-texto:#167D16}
.page-history .label-pill[style*="#D3052D" i], .page-order-detail .label-pill[style*="#D3052D" i], .page-guest-tracking .label-pill[style*="#D3052D" i]{--cp-chip-texto:#D3052D}
.page-history .label-pill[style*="#067D06" i], .page-order-detail .label-pill[style*="#067D06" i], .page-guest-tracking .label-pill[style*="#067D06" i]{--cp-chip-texto:#067D06}
.page-history .label-pill[style*="#5C6BC0" i], .page-order-detail .label-pill[style*="#5C6BC0" i], .page-guest-tracking .label-pill[style*="#5C6BC0" i]{--cp-chip-texto:#5665BE}
.page-history .label-pill[style*="#166DBA" i], .page-order-detail .label-pill[style*="#166DBA" i], .page-guest-tracking .label-pill[style*="#166DBA" i]{--cp-chip-texto:#166DBA}
.page-history .label-pill[style*="#8C6503" i], .page-order-detail .label-pill[style*="#8C6503" i], .page-guest-tracking .label-pill[style*="#8C6503" i]{--cp-chip-texto:#8C6503}
.page-history .label-pill[style*="#697214" i], .page-order-detail .label-pill[style*="#697214" i], .page-guest-tracking .label-pill[style*="#697214" i]{--cp-chip-texto:#687114}
.page-history .label-pill[style*="#007D3C" i], .page-order-detail .label-pill[style*="#007D3C" i], .page-guest-tracking .label-pill[style*="#007D3C" i]{--cp-chip-texto:#007C3B}
.page-history .label-pill[style*="#262626" i], .page-order-detail .label-pill[style*="#262626" i], .page-guest-tracking .label-pill[style*="#262626" i]{--cp-chip-texto:#262626}
.page-history .label-pill[style*="#D32F2F" i], .page-order-detail .label-pill[style*="#D32F2F" i], .page-guest-tracking .label-pill[style*="#D32F2F" i]{--cp-chip-texto:#CB2B2B}
.page-history .label-pill[style*="#CA3100" i], .page-order-detail .label-pill[style*="#CA3100" i], .page-guest-tracking .label-pill[style*="#CA3100" i]{--cp-chip-texto:#C73000}
.page-history .label-pill[style*="#8E24AA" i], .page-order-detail .label-pill[style*="#8E24AA" i], .page-guest-tracking .label-pill[style*="#8E24AA" i]{--cp-chip-texto:#8E24AA}
.page-history .label-pill[style*="#007580" i], .page-order-detail .label-pill[style*="#007580" i], .page-guest-tracking .label-pill[style*="#007580" i]{--cp-chip-texto:#007580}
.page-history .label-pill[style*="#B35900" i], .page-order-detail .label-pill[style*="#B35900" i], .page-guest-tracking .label-pill[style*="#B35900" i]{--cp-chip-texto:#A95400}
.page-history .label-pill[style*="#4169E1" i], .page-order-detail .label-pill[style*="#4169E1" i], .page-guest-tracking .label-pill[style*="#4169E1" i]{--cp-chip-texto:#3761DF}
.page-history .label-pill[style*="#8A2BE2" i], .page-order-detail .label-pill[style*="#8A2BE2" i], .page-guest-tracking .label-pill[style*="#8A2BE2" i]{--cp-chip-texto:#8A2BE2}
.page-history .label-pill[style*="#1E7B1E" i], .page-order-detail .label-pill[style*="#1E7B1E" i], .page-guest-tracking .label-pill[style*="#1E7B1E" i]{--cp-chip-texto:#1E7B1E}
.page-history .label-pill[style*="#DC143C" i], .page-order-detail .label-pill[style*="#DC143C" i], .page-guest-tracking .label-pill[style*="#DC143C" i]{--cp-chip-texto:#D01339}
.page-history .label-pill[style*="#108510" i], .page-order-detail .label-pill[style*="#108510" i], .page-guest-tracking .label-pill[style*="#108510" i]{--cp-chip-texto:#0F7D0F}
.page-history .label-pill[style*="#1E88E5" i], .page-order-detail .label-pill[style*="#1E88E5" i], .page-guest-tracking .label-pill[style*="#1E88E5" i]{--cp-chip-texto:#166DBA}
.page-history .label-pill[style*="#FBC02D" i], .page-order-detail .label-pill[style*="#FBC02D" i], .page-guest-tracking .label-pill[style*="#FBC02D" i]{--cp-chip-texto:#8C6503}
.page-history .label-pill[style*="#CDDC39" i], .page-order-detail .label-pill[style*="#CDDC39" i], .page-guest-tracking .label-pill[style*="#CDDC39" i]{--cp-chip-texto:#687114}
.page-history .label-pill[style*="#00A650" i], .page-order-detail .label-pill[style*="#00A650" i], .page-guest-tracking .label-pill[style*="#00A650" i]{--cp-chip-texto:#007C3C}
.page-history .label-pill[style*="#E53935" i], .page-order-detail .label-pill[style*="#E53935" i], .page-guest-tracking .label-pill[style*="#E53935" i]{--cp-chip-texto:#CF1F1B}
.page-history .label-pill[style*="#FF5722" i], .page-order-detail .label-pill[style*="#FF5722" i], .page-guest-tracking .label-pill[style*="#FF5722" i]{--cp-chip-texto:#C93000}
.page-history .label-pill[style*="#1D9EAF" i], .page-order-detail .label-pill[style*="#1D9EAF" i], .page-guest-tracking .label-pill[style*="#1D9EAF" i]{--cp-chip-texto:#167683}
.page-history .label-pill[style*="#1E9EAE" i], .page-order-detail .label-pill[style*="#1E9EAE" i], .page-guest-tracking .label-pill[style*="#1E9EAE" i]{--cp-chip-texto:#177683}
.page-history .label-pill[style*="#009EB3" i], .page-order-detail .label-pill[style*="#009EB3" i], .page-guest-tracking .label-pill[style*="#009EB3" i]{--cp-chip-texto:#007585}
.page-history .label-pill[style*="#32CD32" i], .page-order-detail .label-pill[style*="#32CD32" i], .page-guest-tracking .label-pill[style*="#32CD32" i]{--cp-chip-texto:#1E7C1E}
.page-order-detail .definition-list dl dt, .page-order-confirmation .definition-list dl dt, .page-guest-tracking .definition-list dl dt{flex:0 0 30%;padding:5px;background-color:var(--cp-surface-section);border-radius:var(--cp-r-input)}
.page-order-detail .definition-list dl dd, .page-order-confirmation .definition-list dl dd, .page-guest-tracking .definition-list dl dd{flex:0 0 70%;padding:5px;background-color:var(--cp-surface-section);border-radius:var(--cp-r-input)}
.page-order-confirmation #order-details .card-title, .page-order-confirmation #order-items .card-title{border-bottom:1px solid var(--cp-border);font-weight:700}
.page-order-confirmation #order-items hr{border-top-color:var(--cp-border)}
.page-order-confirmation #order-items table tr.taxes td{text-align:right;font-weight:600}
.page-order-confirmation #content-hook_payment_return.definition-list dl{font-size:14px}
.page-order-confirmation #content-hook_order_confirmation, .page-order-confirmation #content-hook_payment_return{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card);padding:20px;margin-bottom:16px;color:var(--cp-text)}
.page-order-confirmation #content-hook_order_confirmation h3, .page-order-confirmation #content-hook_order_confirmation .h3{color:var(--cp-text-heading);font-weight:700;margin:0 0 8px}
.page-order-confirmation #content-hook_order_confirmation .material-icons, .page-order-confirmation #order-confirmation .material-icons{color:var(--cp-success-text)}
.page-order-confirmation #content-hook_payment_return dl, .page-order-confirmation #content-hook_payment_return .definition-list dl{display:grid;grid-template-columns:minmax(150px, 240px) 1fr;gap:0;margin:12px 0 16px;border:1px solid var(--cp-border);border-radius:var(--cp-r-input);overflow:hidden}
.page-order-confirmation #content-hook_payment_return dl dt, .page-order-confirmation #content-hook_payment_return dl dd{display:block;flex:none;margin:0;padding:11px 14px;border-bottom:1px solid var(--cp-border);border-radius:0;font-size:14px;line-height:1.5}
.page-order-confirmation #content-hook_payment_return dl dt{background-color:var(--cp-surface-sunken);color:var(--cp-text-heading);font-weight:600;border-right:1px solid var(--cp-border)}
.page-order-confirmation #content-hook_payment_return dl dd{background-color:var(--cp-surface);color:var(--cp-text-strong)}
.page-order-confirmation #content-hook_payment_return dl dt:nth-last-of-type(1), .page-order-confirmation #content-hook_payment_return dl dd:nth-last-of-type(1){border-bottom:none}
.page-order-confirmation #content-hook-order-confirmation-footer{background-color:transparent;border:none;border-radius:0;box-shadow:none;padding:0;margin:0}
.page-order-confirmation #content-hook-order-confirmation-footer:has(*){background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card);padding:20px;margin-bottom:16px}
/* v1.7.35 - RETIRADA, gemela de la del modal. Mismo defecto y en peor sitio: la confirmacion es donde el cliente copia los datos para transferir DESPUES de comprar. `:first-child` no cuenta los nodos de texto, asi que con el campo del BO ya limpio capturaba el salto entre RUT y BANCO en vez del <br> inicial que ya no existe. */
@media (max-width: 767.98px){
.page-order-confirmation .h1.card-title, .page-order-confirmation .h3.card-title, .page-order-detail .h1.card-title, .page-order-detail .h3.card-title, .page-guest-tracking .h1.card-title, .page-guest-tracking .h3.card-title{font-size:15px;font-weight:700}
.page-order-confirmation #content, .page-order-confirmation #content.page-content, .page-order-confirmation #content-hook_order_confirmation, .page-order-confirmation #content-hook_payment_return{background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-btn);box-shadow:var(--cp-shadow-card);padding:15px;margin-bottom:12px}
.page-order-confirmation #content-hook_payment_return dl{grid-template-columns:1fr}
.page-order-confirmation #content-hook_payment_return dl dt{border-right:none;border-bottom:none;padding-bottom:4px}
}

/* ===== CONFIRMACION - REDISENO DE LA TABLA Y LOS TOTALES ===== */
.page-order-confirmation #order-items .card-title, .page-order-confirmation #order-details .card-title{border-bottom:1px solid var(--cp-border);color:var(--cp-text);font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;padding-bottom:10px;margin:0 0 4px}
.page-order-confirmation .order-confirmation-table .order-line{display:flex;flex-wrap:wrap;align-items:center;margin:0;padding:14px 0;border-bottom:1px solid var(--cp-border)}
.page-order-confirmation .order-confirmation-table .order-line:last-child{border-bottom:0}
.page-order-confirmation #order-items .order-line .image img{display:block;width:120px;height:120px;max-width:100%;object-fit:contain;padding:4px;background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-btn)}
.page-order-confirmation .order-confirmation-table .details{font-weight:600;color:var(--cp-text-strong);font-size:15px;line-height:1.35}
.page-order-confirmation .order-line .details .customizations a{display:inline-block;margin-top:6px;font-size:13px;font-weight:600;color:var(--cp-link)}
.page-order-confirmation .order-line .qty > .row{display:flex;align-items:center;margin:0}
.page-order-confirmation .order-line .qty > .row > *{flex:1 1 33.333%;text-align:center;font-variant-numeric:tabular-nums;color:var(--cp-text);font-size:14px}
.page-order-confirmation .order-line .qty > .row > .bold{color:var(--cp-text-strong);font-weight:700}
.page-order-confirmation #order-items hr{border-top-color:var(--cp-border);margin:4px 0 0}
.page-order-confirmation #order-items table{width:100%;margin:6px 0 0}
.page-order-confirmation #order-items table tr td{padding:9px 12px;border:0;font-size:14px;color:var(--cp-text);line-height:1.4}
.page-order-confirmation #order-items table tr td:last-child{text-align:right;font-variant-numeric:tabular-nums;color:var(--cp-text-heading);font-weight:600}
.page-order-confirmation #order-items table tr.total-value td{background-color:var(--cp-surface-sunken);padding-top:13px;padding-bottom:13px;color:var(--cp-text-heading);font-size:15px;font-weight:700}
.page-order-confirmation #order-items table tr.total-value td:first-child{border-radius:var(--cp-r-btn) 0 0 var(--cp-r-btn)}
.page-order-confirmation #order-items table tr.total-value td:last-child{border-radius:0 var(--cp-r-btn) var(--cp-r-btn) 0;color:var(--cp-primary);font-weight:700;font-size:21px;letter-spacing:-.3px}
.page-order-confirmation #order-items table tr.sub.taxes td{padding-top:7px;text-align:right;font-size:13px;color:var(--cp-text);font-weight:400}
.page-order-confirmation #order-details ul{list-style:none;margin:0;padding:0}
.page-order-confirmation #order-details ul li{padding:9px 0;border-bottom:1px solid var(--cp-border);font-size:14px;color:var(--cp-text);line-height:1.45}
.page-order-confirmation #order-details ul li:last-child{border-bottom:0}
@media (max-width: 1024.98px){
.page-order-confirmation #order-items .order-line .image img{width:96px;height:96px}
.page-order-confirmation .order-confirmation-table .order-line{padding:12px 0}
}
@media (max-width: 767.98px){
.page-order-confirmation .order-confirmation-table .order-line > div:first-child{flex:0 0 auto;width:auto;max-width:none;padding-right:12px}
.page-order-confirmation .order-confirmation-table .order-line > div:nth-child(2){flex:1 1 0;width:auto;min-width:0;padding-left:0}
.page-order-confirmation #order-items .order-line .image img{width:72px;height:72px;max-width:none}
.page-order-confirmation .order-confirmation-table .details{font-size:14px}
.page-order-confirmation .order-line .qty > .row{margin-top:10px;padding-top:10px;border-top:1px dashed var(--cp-border)}
.page-order-confirmation #order-items table tr td{padding-left:10px;padding-right:10px}
.page-order-confirmation #order-items table tr.total-value td:last-child{font-size:18px}
.page-order-confirmation #order-items .card-title, .page-order-confirmation #order-details .card-title{font-size:11px}
}
@media (max-width: 767.98px){
.page-order-confirmation #content-hook-order-confirmation-footer:has(*){border-radius:var(--cp-r-btn);padding:15px;margin-bottom:12px}
}

/* ===== MI CUENTA ===== */
.page-my-account #content{border:none;box-shadow:none;background-color:transparent}
.page-my-account .link-item:hover{border-color:var(--cp-primary)}
.page-my-account #content .links a:hover i{color:var(--cp-link-hover)}
.page-addresses #content{background-color:var(--cp-surface);padding:15px 0}
.page-addresses .address{background-color:var(--cp-surface-sunken);border:1px solid var(--cp-border);border-radius:var(--cp-r-card)}
.page-identity .psgdprinfo17, .page-identity .p-1.m-1{border-radius:var(--cp-r-card)}


/* ===== CARRITO - FICHA DE PRODUCTO ===== */
.page-cart .cart-item .product-line-grid-left{width:16%;max-width:16%}
.page-cart .cart-item .product-line-grid-body{width:52%;max-width:52%;min-width:0}
.page-cart .cart-item .product-line-grid-right{width:32%;max-width:32%;min-width:0}
.page-cart .cart-item .product-line-grid-body > br{display:none}
.page-cart .cart-item .product-line-info > a.label{font-size:15px;font-weight:700;line-height:1.3;text-transform:none;text-decoration:none;color:var(--cp-link)}
.page-cart .cart-item .product-line-info > a.label:hover{color:var(--cp-link-hover);text-decoration:underline}
.page-cart .cart-item .product-line-info > a.label::after{content:"";display:inline-block;width:.72em;height:.72em;margin-left:.35em;vertical-align:-1px;background-color:currentColor;opacity:.7;transition:opacity var(--cp-t-fast);-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M15 3h6v6'/><path d='M10 14L21 3'/><path d='M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M15 3h6v6'/><path d='M10 14L21 3'/><path d='M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5'/></svg>") center/contain no-repeat}
.page-cart .cart-item .product-line-info > a.label:hover::after{opacity:1}
.page-cart .cart-item .product-line-info.product-price{display:flex;flex-wrap:wrap;align-items:center;gap:5px 10px;margin:0 0 6px}
.page-cart .cart-item .product-discount{display:inline-flex;align-items:center;gap:8px;margin:0}
.page-cart .cart-item .current-price{display:inline-flex;align-items:center;margin:0}
.page-cart .cart-item .regular-price{font-size:14px;font-weight:500;color:var(--cp-text);text-decoration:line-through}
.page-cart .cart-item .current-price .price{font-size:17px;font-weight:800;color:var(--cp-success-on-bg)}
.page-cart .cart-item .current-price .price::before{content:"";display:inline-block;width:1em;height:1em;margin-right:.35em;vertical-align:-.15em;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='11' fill='%23007036'/><path d='M7 12.6l3.3 3.3L17.2 8.9' fill='none' stroke='white' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/contain no-repeat}
.page-cart .cart-item .product-line-info.color{font-size:13px}
.page-cart .cart-item .product-line-info.color .value{color:var(--cp-text-strong);font-weight:700}
.page-cart .cart-item .dp_cart{margin-top:8px;padding:9px 12px 9px 13px;background-color:var(--cp-surface-sunken);border:1px solid var(--cp-border);border-left:3px solid var(--cp-primary);border-radius:var(--cp-r-card);width:-moz-fit-content;width:fit-content;max-width:100%;overflow-x:auto}
.page-cart .cart-item .dp_cart::before{content:"Personalizaci\0000F3n";display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--cp-text);margin-bottom:5px}
.page-cart .cart-item .dp_cart br{display:none}
.page-cart .cart-item .dp_cart .dp_input_div{display:flex;flex-wrap:wrap;gap:0 14px;font-size:13px}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;max-width:100%;padding:1px 0;line-height:1.3;white-space:normal;overflow-wrap:break-word;overflow-wrap:anywhere;color:var(--cp-text)}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"] strong{color:var(--cp-text-strong);font-weight:700;white-space:nowrap;margin-right:6px}
/* v1.7.6 - K1: el enlace de edicion de DynamicProduct, en fila propia. Ver seccion 22. */
.page-cart .cart-item .dp_cart .dp_input_div > div{display:block;flex:1 1 100%;margin-top:7px;padding-top:7px;border-top:1px solid var(--cp-border)}
.page-cart .cart-item .dp_cart a.dp_url{display:inline-flex;align-items:center;gap:6px;text-decoration:none;font-size:11px;font-weight:600;color:var(--cp-link-hover);transition:color var(--cp-t-fast)}
.page-cart .cart-item .dp_cart a.dp_url::before{content:"";display:block;width:1em;height:1em;flex:0 0 auto;background-color:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 20h9'/><path d='M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 20h9'/><path d='M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z'/></svg>") center/contain no-repeat}
.page-cart .cart-item .dp_cart a.dp_url:hover{text-decoration:underline}
.page-cart .cart-item .dp_cart a.dp_url:focus-visible{outline:0;box-shadow:var(--cp-focus-ring);border-radius:4px}
/* v1.7.6 - el enlace del modal del CORE no destella al cargar; si el JS de DynamicProduct no corriera, reaparece a los 2s como respaldo. */
.page-cart .cart-item .product-line-grid-body > a[data-toggle="modal"]{visibility:hidden;animation:cpVerEnlaceModal 0s linear 2s forwards}
@keyframes cpVerEnlaceModal{to{visibility:visible}}
.page-cart .cart-item .dp_cart span.dp-input-field-preview{display:none}
.page-cart input.js-cart-line-product-quantity{width:108px;height:40px;padding:0 8px;text-align:center;font-size:16px;font-weight:700;color:var(--cp-text-strong);border:1px solid var(--cp-border);border-radius:var(--cp-r-btn);background-color:var(--cp-surface);-moz-appearance:textfield;appearance:textfield}
.page-cart input.js-cart-line-product-quantity::-webkit-outer-spin-button,.page-cart input.js-cart-line-product-quantity::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.page-cart .bootstrap-touchspin input.js-cart-line-product-quantity{flex:0 0 78px;width:78px;height:auto;border:0;border-radius:0;outline:0;background-color:transparent}

/* --- lista hundida, tarjeta por producto y 16px de aire --- */
.page-cart .cart-overview{background-color:var(--cp-surface-sunken);border-top:1px solid var(--cp-border);border-radius:0 0 11px 11px}
.page-cart .cart-items{display:flex;flex-direction:column;gap:16px;margin:0;padding:0}
.page-cart .cart-items > .cart-item{padding:16px;background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card);transition:border-color var(--cp-t-fast), box-shadow var(--cp-t-fast)}
.page-cart .cart-items > .cart-item:hover{border-color:var(--cp-border-strong);box-shadow:0 4px 14px rgba(0,0,0,.07)}
/* --- archivo adjunto: fila propia y tope de 2 lineas --- */
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"]{flex:0 1 auto;min-width:0}
/* v1.7.14 - UNICO !important del archivo, y es una excepcion documentada: Creative Elements declara .dp-files{margin-bottom:-30px !important}, un margen negativo que cancela la altura de la lista de archivos. El campo colapsa y la lista se desborda sobre el enlace de edicion. !important solo se gana con !important. Lo limpio es retirarlo del editor de CE. Ver seccion 30. */
/* v1.7.22 - SIN !important desde que el director retiro del editor de CE el bloque que declaraba margin-bottom:-30px !important (verificado en el bundle vivo: cero rastros). La regla se conserva en llano como red: si aquel bloque reapareciera, el defecto se veria y se re-escalaria. */
.page-cart .cart-item .dp_cart .dp-files{margin-bottom:0}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-importar_logo"]{display:flex;flex-wrap:wrap;-webkit-line-clamp:none;overflow:visible;flex:1 1 100%;align-items:flex-start;white-space:normal}
/* v1.7.14 - en el BO hay DOS maestros de personalizacion y no nombran igual sus campos: uno usa importar_logo y el otro adjuntar_logo. La regla de arriba, atada al nombre, nunca alcanzaba al segundo, que se quedaba con el recorte a 2 lineas y overflow:hidden del bloque generico. Se generaliza por CONTENIDO -el campo que lleva la lista de archivos- en una regla APARTE: si :has() no estuviera soportado, se descarta solo esta y el primer maestro sigue igual. */
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"]:has(.dp-files){display:flex;flex-wrap:wrap;-webkit-line-clamp:none;overflow:visible;flex:1 1 100%;align-items:flex-start;white-space:normal}
.page-cart .cart-item .dp_cart .dp-files{margin:0;padding:0;list-style:none;min-width:0;max-width:100%}
.page-cart .cart-item .dp_cart .dp-files li{min-width:0;max-width:100%}
.page-cart .cart-item .dp_cart .dp-files a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:100%;color:var(--cp-link-hover);text-decoration:none;line-height:1.35;white-space:normal;overflow-wrap:break-word;overflow-wrap:anywhere}
.page-cart .cart-item .dp_cart .dp-files a:hover{text-decoration:underline}
/* --- icono de eliminar: trazo sobre la ligadura, area de 40x40 --- */
.page-cart .cart-item .remove-from-cart{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;text-decoration:none;transition:background-color var(--cp-t-fast), color var(--cp-t-fast)}
.page-cart .cart-item .remove-from-cart:hover{background-color:var(--cp-danger-bg)}
.page-cart .cart-item .remove-from-cart:focus-visible{outline:0;box-shadow:var(--cp-focus-ring)}
.page-cart .cart-item .remove-from-cart i.material-icons{float:none;font-size:0;line-height:0;width:18px;height:18px;background-color:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M3 6h18'/><path d='M8 6V4h8v2'/><path d='M19 6l-1 14H6L5 6'/><path d='M10 11v5M14 11v5'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M3 6h18'/><path d='M8 6V4h8v2'/><path d='M19 6l-1 14H6L5 6'/><path d='M10 11v5M14 11v5'/></svg>") center/contain no-repeat}
/* --- v1.7.2 - el icono de eliminar ancla en la esquina inferior derecha --- */
.page-cart .cart-item .product-line-grid-right, .page-cart .cart-item .product-line-grid-right > .row > .text-xs-right{position:static}
.page-cart .cart-items > .cart-item{position:relative}
.page-cart .cart-item .cart-line-product-actions{position:absolute;right:16px;bottom:16px;display:flex;align-items:center;justify-content:flex-end;line-height:0;margin:0;padding:0}
.page-cart .cart-item .cart-line-product-actions .remove-from-cart{margin:0}
.page-cart .cart-item .product-line-grid-right > .row > .text-xs-right{flex:0 0 40px;width:40px;max-width:40px;margin:0 0 0 auto}
/* --- v1.7.5 - la fila de cantidad y total nunca se solapa ni se come los clics --- */
.page-cart .cart-item .product-line-grid-right > .row > .col-xs-6{padding:0;min-width:0}
.page-cart .cart-item .product-line-grid-right > .row > .col-xs-6 > .row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px 12px;width:100%;margin:0}
.page-cart .cart-item .product-line-grid-right .qty{flex:0 0 auto;width:auto;max-width:none;min-width:108px;padding:0;margin:0}
.page-cart .cart-item .product-line-grid-right .price{flex:0 0 auto;width:auto;max-width:none;padding:0;margin:0}
.page-cart .cart-item .product-line-grid-right .product-price{margin-left:0}
/* --- v1.7.5 - `comentarios` no se recorta: se limita por caracteres desde DynamicProduct --- */
.page-cart .cart-item .dp_cart span[class*="dp-input-field-comentarios"]{display:block;-webkit-line-clamp:none;overflow:visible;flex:1 1 100%;white-space:normal;overflow-wrap:break-word;overflow-wrap:anywhere}
/* --- v1.7.7 - cantidad y total: apilados con el TOTAL ARRIBA hasta 1332px --- */
@media (min-width: 1025px) and (max-width: 1332px){
.page-cart .cart-item .product-line-grid-right .price{order:1}
.page-cart .cart-item .product-line-grid-right .qty{order:2}
}
/* --- v1.7.7 - y en linea desde 1333px: hay que liberar 17px para que quepa --- */
@media (min-width: 1332.02px){
.page-cart .cart-item .product-line-grid-right{width:34%;max-width:34%}
.page-cart .cart-item .product-line-grid-body{width:50%;max-width:50%}
.page-cart .cart-item .product-line-grid-right > .row > .col-xs-6 > .row{column-gap:8px}
.page-cart .cart-item .product-line-grid-right .product-price{padding:8px 12px}
}
@media (max-width: 1024.98px){
.page-cart .cart-item .product-line-grid-left{width:20%;max-width:20%}
.page-cart .cart-item .product-line-grid-body{width:80%;max-width:80%}
.page-cart .cart-item .product-line-grid-right{width:100%;max-width:100%;margin-top:10px}
}
@media (max-width: 767.98px){
.page-cart .cart-item .product-line-grid-left{width:26%;max-width:26%;margin-right:15px}
.page-cart .cart-item .product-line-grid-body{width:auto;max-width:none;float:none}
.page-cart .cart-item .product-line-grid-right{width:100%;max-width:100%}
.page-cart .cart-item .product-line-info > a.label{font-size:14px}
.page-cart .cart-item .dp_cart{padding:8px 10px 8px 11px;clear:left;margin:8px -15px 0 0;width:auto;max-width:none}
.page-cart .cart-item .dp_cart .dp_input_div{gap:0 12px}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"]{font-size:11px;padding:0;line-height:1.3;white-space:normal;overflow-wrap:break-word;overflow-wrap:anywhere}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"] strong{white-space:nowrap;overflow-wrap:normal}
.page-cart .cart-item .cart-line-product-actions{position:static;margin:0 0 0 auto}
.page-cart .cart-overview{padding:12px}
.page-cart .cart-items > .cart-item{padding:13px}
/* --- v1.7.8 - movil: aire bajo la imagen --- */
/* v1.7.9 - los precios y el atributo vuelven justo debajo del NOMBRE: se retira el clear de la v1.7.8 y se recupera el hueco de 28px entre el tachado y la pildora. Ver seccion 25. */
/* v1.7.10 - el cuerpo arrastraba el padding-right:15px de .col-xs-8 y nadie lo reseteaba: caia sobre el borde derecho de la fila de precios. Recuperarlo devuelve 15px medidos. */
/* v1.7.35 - dos de las tres columnas del producto conservaban el padding-left:15px de Bootstrap mientras la tercera ya estaba a 0: incongruencia entre hermanas y sangria pura, porque .product-line-grid no es un .row y nadie devuelve ese relleno. Solo padding-left, y solo aqui: de 576 a 767.98px el padding-right es el unico canalon imagen/texto. */
.page-cart .cart-item .product-line-grid-left, .page-cart .cart-item .product-line-grid-body{padding-left:0}
.page-cart .cart-item .product-line-grid-body{padding-right:0}
.page-cart .cart-item .dp_cart{margin-right:0}
.page-cart .cart-item .product-line-grid-body .product-line-info.product-price{column-gap:4px;font-size:13px}
.page-cart .cart-item .product-line-grid-body .product-discount{gap:4px}
.page-cart .cart-item .product-line-grid-body .regular-price{margin-right:0}
.page-cart .cart-item .product-line-grid-body .discount.discount-percentage{margin-left:0;padding:3px 8px;font-size:10px}
.page-cart .cart-item .product-line-grid-left{margin-bottom:12px}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-importar_logo"]{white-space:normal;align-items:flex-start}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"]:has(.dp-files){white-space:normal;align-items:flex-start}
.page-cart .cart-item .dp_cart .dp-files a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow:hidden;text-overflow:clip}
.page-cart .cart-item .product-line-grid-right > .row{padding:0;gap:8px;flex-wrap:nowrap}
.page-cart .cart-item .product-line-grid-right > .row > .col-xs-6{min-width:0}
.page-cart .cart-item .product-line-grid-right .product-price{padding:7px 10px;margin-left:0}
.page-cart input.js-cart-line-product-quantity{width:96px}
.page-cart .cart-item .bootstrap-touchspin{width:96px;max-width:96px}
.page-cart .cart-item .product-line-grid-right .qty{min-width:96px}
.page-cart .cart-item .dp_cart a.dp_url{min-height:40px}
.page-cart .cart-item .product-line-grid-right > .row > .col-xs-6 > .row{gap:8px}
}
@media (max-width: 387.98px){
.page-cart .cart-item .product-line-grid-body .discount-percentage::after{content:""}
.page-cart .cart-item .product-line-grid-body .product-line-info.product-price{column-gap:2px}
.page-cart .cart-item .product-line-grid-body .discount.discount-percentage{padding:3px 6px}
}
@media (max-width: 353.98px){
.page-cart .cart-item .product-line-grid-body .current-price .price::before{display:none}
}
/* v1.7.13 - congruencia: "Total N unidades" es rotulo de linea en el carrito (16px/400 #666) y un <p> suelto en el checkout (15px/400 #7A7A7A). Se iguala al del carrito. */
/* v1.7.35 - el desplegable duplicaba el relleno: .cart-summary-products anadia 16px sobre los 16 del .card-block y las tarjetas quedaban en x=43 frente a los x=27 de las lineas de totales, que son sus vecinas. Alineado. */
@media (max-width:767.98px){body#checkout #js-checkout-summary .cart-summary-products{padding-left:0;padding-right:0}}
body#checkout #js-checkout-summary .cart-summary-products > p{font-size:1rem;font-weight:400;color:var(--cp-text);margin-bottom:10px}
/* --- v1.7.13 - punto 5: el desplegable del resumen deja de ser un enlace suelto de 183x21px y pasa a boton. El texto va en --cp-link-hover, no en --cp-link: sobre el fondo hundido #F8F9FA el azul 007ACC da 4,28 y no cumple AA a 14px (la misma trampa de la v1.7.4). El anillo negro de moviles lo pinta a:focus{outline:-webkit-focus-ring-color auto 5px} del tema: se apaga en :focus y se devuelve en :focus-visible, que en tactil no casa. --- */
body#checkout #js-checkout-summary a.js-show-details{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px 14px;border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-btn);background-color:var(--cp-surface-sunken);color:var(--cp-link-hover);font-size:14px;font-weight:600;line-height:1.2;text-decoration:none;transition:background-color var(--cp-t-fast),border-color var(--cp-t-fast),color var(--cp-t-fast)}
body#checkout #js-checkout-summary a.js-show-details:hover{background-color:var(--cp-surface-hover);border-color:var(--cp-text-muted);text-decoration:none}
@supports selector(:focus-visible){
body#checkout #js-checkout-summary a.js-show-details:focus{outline:none}
body#checkout #js-checkout-summary a.js-show-details:focus-visible{outline:none;box-shadow:var(--cp-focus-ring);border-color:var(--cp-secondary)}
}
body#checkout #js-checkout-summary a.js-show-details .material-icons{font-size:18px;line-height:1;transition:transform var(--cp-t-fast)}
/* Estados del numero: hoy los cuatro son verdes, tambien los que no se pueden abrir. */
body#checkout section.checkout-step .step-number{transition:background-color 200ms ease,color 200ms ease,box-shadow 200ms ease,border-color 200ms ease}
/* El .step-edit del core va en #7a7a7a, que el DS prohibe como color de texto (4,29:1). SEGUNDO !important del archivo, y otra excepcion documentada: el elemento lleva ademas la clase .text-muted de Bootstrap, que declara color:#7a7a7a !important. Solo se gana con !important. */
/* v1.7.27 - P7: solo la PRIMERA letra en mayuscula, venga como venga de Traducciones. El tema ya declara text-transform:lowercase sobre .step-edit, asi que basta ::first-letter. Pero ese pseudo-elemento exige contenedor de BLOQUE -de ahi inline-block y no inline-flex- y, sobre todo, apuntaria a la "m" de la ligadura "mode_edit" del icono del core, que va ANTES del texto: al ponerla en mayuscula la ligadura se rompe y el icono sale escrito. Por eso el icono material se oculta y el lapiz pasa a ser imagen de fondo del propio enlace, con lo que el texto queda como unico contenido. */
body#checkout section.checkout-step.-reachable.-complete h1 .step-edit{color:var(--cp-link-hover) !important;font-size:14px;font-weight:600;display:inline-block;min-height:40px;line-height:40px;margin-left:auto;padding-left:22px;text-transform:lowercase;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23006BB3'><path d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25ZM20.71 7.04a1 1 0 0 0 0-1.41l-2.34-2.34a1 1 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83Z'/></svg>");background-position:left center;background-size:15px 15px;background-repeat:no-repeat}
body#checkout section.checkout-step.-reachable.-complete h1 .step-edit::first-letter{text-transform:uppercase}
body#checkout section.checkout-step.-reachable.-complete h1 .step-edit .edit{display:none}
body#checkout section.checkout-step.-reachable.-complete h1 .step-edit:hover{text-decoration:underline}
@media (prefers-reduced-motion: reduce){
body#checkout .cart-grid-body::before{animation:none;transition:none}
body#checkout section.checkout-step .step-number{transition:none}
}
/* ============ v1.7.16 - MODAL DE DATOS BANCARIOS (variante M2) ============ */
/* Defectos medidos en el modal de hoy: radio 4,8px y sin sombra, titulo en #666666, parrafo en #7A7A7A (4,29:1, no cumple AA), rotulo y valor con el MISMO peso, boton de cerrar de 13x24px con opacidad 0,2 -muy por debajo del minimo tactil de 40x40- y 5 <br> muertos al final del cuerpo. */
/* v1.7.31 - EL MODAL CABE SIEMPRE. Reproducido a 390x700: el contenido media 824px, quedaba desplazado a y=-196 y el boton de cerrar caia FUERA de la pantalla, con solo el backdrop visible y sin forma de cerrar salvo recargar. El dialogo se limita al alto de la ventana, la cabecera queda fija y el cuerpo hace scroll por dentro. */
/* v1.7.33 - EL BACKDROP NO PUEDE ENCERRAR A NADIE. En el Bootstrap 4 alpha.5 que sirve PS 8.2.7 el clic fuera cierra el modal porque cae sobre .modal -el handler esta ahi, no en el backdrop-, asi que si el backdrop se pinta por encima los toques mueren y no queda forma de cerrar salvo recargar. El backdrop es decorativo: sin eventos de puntero, cualquier toque llega siempre al modal o a su fondo, y el cierre por clic fuera funciona. */
body#checkout .modal-backdrop{pointer-events:none}
/* v1.7.33 - mientras hay un modal abierto la barra deja de flotar: con .modal-open el body no scrollea, el sticky no aporta nada y es un candidato a pintarse sobre el dialogo. Ataca el punto 6: la cabecera del modal escondida tras la barra. */
body#checkout.modal-open .cart-grid-body::before{position:static;box-shadow:none}
/* v1.7.33 - el modal declara su capa por encima del backdrop de forma explicita */
body#checkout #bankwire-modal{z-index:1060}
/* v1.7.34 - EL DIALOGO RECUPERA MARGEN EN LOS CUATRO LADOS. Bootstrap da margin:10px a los cuatro lados por debajo de 576px -ahi no hay max-width- y la v1.7.32 lo cambio por `margin:10px auto`, que en un bloque de ancho automatico deja el margen lateral en CERO. El modal quedaba a sangre y ocupando el 96% del alto: solo dos franjas de 14 y 21px cerraban al tocar, el 3% de la pantalla, inacertable con el dedo. Eso es lo que el cliente vive como pantalla bloqueada. Medido en emulacion movil real. */
body#checkout #bankwire-modal .modal-dialog{display:flex;align-items:flex-start;max-height:calc(100vh - 132px);max-height:calc(100dvh - 132px);margin:16px}
/* v1.7.35 - la base de .modal-content sube DELANTE del @media de abajo. Estaba detras con la misma especificidad, asi que su max-height de movil (100dvh - 132px) le ganaba por orden al de escritorio (100dvh - 64px) y el modal quedaba 68px mas bajo de lo disenado en pantallas grandes. */
body#checkout #bankwire-modal .modal-content{display:flex;flex-direction:column;width:100%;max-height:calc(100vh - 132px);max-height:calc(100dvh - 132px);padding:0;overflow:hidden;background-color:var(--cp-surface);border:1px solid var(--cp-border);border-radius:var(--cp-r-card);box-shadow:0 8px 28px rgba(0,0,0,.12)}
/* v1.7.34 - de 576px en adelante Bootstrap si acota el ancho del dialogo, asi que el modal ya se comporta como un modal: ahi no hace falta recortar tanto la altura, y el margen lateral vuelve a `auto` para que quede centrado. Va DESPUES de las reglas base a proposito: una media query no aporta especificidad y a igualdad gana el orden. */
@media (min-width:576px){body#checkout #bankwire-modal .modal-dialog{max-height:calc(100vh - 64px);max-height:calc(100dvh - 64px);margin:32px auto}
body#checkout #bankwire-modal .modal-content{max-height:calc(100vh - 64px);max-height:calc(100dvh - 64px)}}
body#checkout #bankwire-modal .modal-header{flex:0 0 auto}
body#checkout #bankwire-modal .modal-body{flex:1 1 auto;overflow-y:auto;overscroll-behavior:contain}
body#checkout #bankwire-modal .modal-header{padding:16px 20px;border-bottom:1px solid var(--cp-border)}
body#checkout #bankwire-modal .modal-header h2{margin:0;font-size:18px;font-weight:700;color:var(--cp-text-heading)}
/* el cerrar pasa de 13x24 a 40x40, el minimo tactil del DS */
body#checkout #bankwire-modal .modal-header .close{display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-8px -8px 0 0;border-radius:8px;opacity:1;color:var(--cp-text);font-size:26px;font-weight:400;text-shadow:none;transition:background-color var(--cp-t-fast), color var(--cp-t-fast)}
body#checkout #bankwire-modal .modal-header .close:hover{background-color:var(--cp-surface-hover);color:var(--cp-text-heading)}
@supports selector(:focus-visible){
body#checkout #bankwire-modal .modal-header .close:focus{outline:none}
body#checkout #bankwire-modal .modal-header .close:focus-visible{outline:none;box-shadow:var(--cp-focus-ring)}
}
/* v1.7.17 - la nota del modulo es un NODO DE TEXTO suelto: no se puede envolver ni pintar aparte, pero si HEREDA de .modal-body. Ahi se le da tratamiento de nota al pie. El <p> y el <dl> se protegen con su propio tamano. */
/* v1.7.33 - la nota final son NODOS DE TEXTO sueltos entre <br>: no hay elemento que envolver y solo se puede tratar por herencia desde aqui (patron de la v1.7.17). Sube de 13 a 14px, el minimo de cuerpo en movil que fija el DS, y gana interlineado. El <p> y el <dl> declaran su propio tamano, asi que quedan protegidos. */
body#checkout #bankwire-modal .modal-body{padding:18px 20px 22px;font-size:14px;line-height:1.75;color:var(--cp-text)}
body#checkout #bankwire-modal .modal-body > p{margin:0 0 18px;font-size:15px;line-height:1.55;color:var(--cp-text-heading)}
/* v1.7.34 - los <br> HIJOS DIRECTOS del cuerpo separan los parrafos sueltos. Es el unico gancho que existe: los textos no tienen elemento propio. No se tocan los <br> del <dd>, que son los de la tabla de datos bancarios. */
body#checkout #bankwire-modal .modal-body > br{display:block;height:9px;content:""}
/* v1.7.34 - el titulo del modal, con la tipografia de titular del DS */
body#checkout #bankwire-modal .modal-header h2, body#checkout #bankwire-modal .modal-title{margin:0;font-size:18px;font-weight:700;line-height:1.3;color:var(--cp-text-heading);letter-spacing:-.01em}
/* los 5 <br> sueltos del final del cuerpo */
/* v1.7.17 - REGRESION DE LA v1.7.16, corregida. Estos <br> NO eran basura: entre ellos hay nodos de TEXTO SUELTOS -la "Informacion al cliente" del modulo- y los <br> son sus saltos de linea. Apagarlos convirtio esa nota en un muro de texto. Verificado en vivo: 16 lineas con ellos apagados contra 19 al restaurarlos. */
/* v1.7.35 - RETIRADA. Iba DESPUES de la regla de la v1.7.34 con la MISMA especificidad, asi que ganaba por orden y dejaba el <br> en su display:inline por defecto: por eso el aire entre los parrafos sueltos nunca llego a verse. Nacio como reversion de una regresion de la v1.7.16 -que los habia apagado con display:none- y hoy solo estorba: el valor que restauraba es el del navegador. */
/* los datos, en rejilla: el rotulo es microcopy en mayusculas y el valor manda. Mismo patron que este archivo ya usa en la confirmacion de pedido. */
body#checkout #bankwire-modal .modal-body dl{display:grid;grid-template-columns:minmax(130px, 190px) 1fr;gap:1px;margin:0 0 20px;font-size:15px;background-color:var(--cp-border);border:1px solid var(--cp-border);border-radius:8px;overflow:hidden}
body#checkout #bankwire-modal .modal-body dl dt{margin:0;padding:11px 14px;background-color:var(--cp-surface);font-size:12px;font-weight:700;line-height:1.4;letter-spacing:.04em;text-transform:uppercase;color:var(--cp-text)}
body#checkout #bankwire-modal .modal-body dl dd{margin:0;padding:11px 14px;background-color:var(--cp-surface);font-size:15px;font-weight:600;line-height:1.55;color:var(--cp-text-strong)}
/* v1.7.29 - punto 5: la base del modal. La nota final son doce NODOS DE TEXTO sueltos separados por <br>, todos despues del <dl> -comprobado nodo a nodo en el DOM vivo-, asi que no hay nada que envolver. Se invierte la figura: el cuerpo pasa a fondo hundido y el <dl> a tarjeta blanca, con lo que la nota queda sobre el hundido y se lee como nota al pie, y los datos que el cliente copia destacan. La cabecera pasa a blanca para no fundirse con el cuerpo. */
body#checkout #bankwire-modal .modal-header{background-color:var(--cp-surface)}
body#checkout #bankwire-modal .modal-body{background-color:var(--cp-surface-sunken)}
body#checkout #bankwire-modal .modal-body > dl{border-radius:var(--cp-r-btn);overflow:hidden;box-shadow:var(--cp-shadow-card)}
@media (min-width:768px){body#checkout #bankwire-modal .modal-body dl dt{font-size:13px}}
/* el TOTAL es la cifra que hay que transferir: equivocarla es el error mas caro de esta pantalla, asi que sube de jerarquia */
body#checkout #bankwire-modal .modal-body dl dt:first-of-type{background-color:var(--cp-success-bg);color:var(--cp-success-on-bg)}
body#checkout #bankwire-modal .modal-body dl dt:first-of-type + dd{background-color:var(--cp-success-bg);color:var(--cp-success-on-bg);font-size:21px;font-weight:700;letter-spacing:-.3px}
/* v1.7.16 - se oculta la fila de direccion de la sucursal bancaria (decision del director). OJO: va por posicion. Si algun dia se vacia ese campo en la configuracion de ps_wirepayment, este par deja de existir y ESTA REGLA HAY QUE RETIRARLA o escondera el dato equivocado. Lo limpio es vaciar el campo en el modulo y borrar estas dos lineas. */
body#checkout #bankwire-modal .modal-body dl dt:nth-of-type(4){display:none}
body#checkout #bankwire-modal .modal-body dl dd:nth-of-type(4){display:none}
@media (max-width: 767.98px){
body#checkout #bankwire-modal .modal-body dl{grid-template-columns:1fr}
body#checkout #bankwire-modal .modal-body dl dt{padding-bottom:2px}
body#checkout #bankwire-modal .modal-body dl dd{padding-top:4px}
}
/* ============ v1.7.18 - EL HOOK displayAfterCarrier SUBE A SU SITIO ============ */
/* El contenedor #hook-display-after-carrier es hermano del FORMULARIO del paso, asi que el core lo pinta DESPUES del boton Continuar. Medido: transportistas y505, comentario y585, boton y674, hook y736. El director lo quiere entre los transportistas y el comentario. */
/* No se puede mover un nodo con CSS, pero si APLANAR los contenedores con display:contents: la lista, el formulario y .form-fields dejan de generar caja y sus hijos pasan a ser items directos de .content, que se vuelve flex. Entonces `order` ya puede colocarlos. Verificado: el formulario conserva sus 3 campos, el boton sigue asociado a el y el radio del transportista tambien; y el <form> no tenia caja visible (sin fondo, sin borde, sin relleno), asi que aplanarlo no pierde nada. */
/* el .-current NO es decorativo: sin el, esta regla (2 ids) le gana a la propia `body#checkout section.checkout-step .content{display:none}` (1 id) y el paso 3 queda desplegado aun estando cerrado. Verificado en vivo. */
body#checkout #checkout-delivery-step.-current .content{display:flex;flex-direction:column}
body#checkout #checkout-delivery-step .delivery-options-list{display:contents}
body#checkout #checkout-delivery-step #js-delivery{display:contents}
/* el clearfix del formulario generaria un item flex vacio al aplanarlo */
body#checkout #checkout-delivery-step #js-delivery::before{display:none}
body#checkout #checkout-delivery-step #js-delivery::after{display:none}
body#checkout #checkout-delivery-step .form-fields{display:contents}
body#checkout #checkout-delivery-step #hook-display-before-carrier{order:1}
body#checkout #checkout-delivery-step .delivery-options{order:2}
body#checkout #checkout-delivery-step #hook-display-after-carrier{order:3}
body#checkout #checkout-delivery-step .order-options{order:4}
body#checkout #checkout-delivery-step #js-delivery button.continue{order:5}
body#checkout #checkout-delivery-step #extra_carrier{order:6}
/* ============ v1.7.18 - EL ENLACE DE FACTURACION DEJA DE SER LETRA PEQUENA ============ */
/* Es la pieza que decide a nombre de quien sale el DTE, y hoy es un enlace azul suelto de una linea que se pierde entre la tarjeta de direccion y el boton. Se convierte en accion visible, con el mismo lenguaje de borde discontinuo que ya usa "Anadir nueva direccion": lo discontinuo dice "opcional, anade algo". */
body#checkout #checkout-addresses-step a[data-link-action="different-invoice-address"]{display:inline-flex;align-items:center;gap:9px;max-width:100%;padding:12px 16px;border:1px dashed var(--cp-border-strong);border-radius:var(--cp-r-btn);background-color:var(--cp-surface-sunken);color:var(--cp-link-hover);font-size:14px;font-weight:600;line-height:1.35;text-decoration:none;transition:border-color var(--cp-t-fast), background-color var(--cp-t-fast)}
body#checkout #checkout-addresses-step a[data-link-action="different-invoice-address"]:hover{border-color:var(--cp-primary);background-color:var(--cp-surface-hover);text-decoration:none}
@supports selector(:focus-visible){
body#checkout #checkout-addresses-step a[data-link-action="different-invoice-address"]:focus{outline:none}
body#checkout #checkout-addresses-step a[data-link-action="different-invoice-address"]:focus-visible{outline:none;box-shadow:var(--cp-focus-ring);border-color:var(--cp-secondary)}
}
/* el signo + hereda el lenguaje del enlace de anadir direccion */
body#checkout #checkout-addresses-step a[data-link-action="different-invoice-address"]::before{content:"+";flex:0 0 auto;font-size:19px;font-weight:400;line-height:1}
/* La frase que falta: que pasa si NO se marca. Va en el <p> que envuelve al enlace, no dentro de el, para que NO forme parte del area clicable. Ojo: este texto vive en el CSS, como la pildora del carrito; cambiarlo exige una version nueva. */
body#checkout #checkout-addresses-step p:has(> a[data-link-action="different-invoice-address"])::before{content:"Por defecto emitimos tu factura al RUT y la raz\0000F3n social de esta direcci\0000F3n.";display:block;margin:0 0 8px;font-size:13px;font-weight:400;line-height:1.5;color:var(--cp-text)}
/* v1.7.33 - el <p> del chip de facturacion llevaba margen solo arriba y quedaba a cero del boton Continuar, el mismo defecto que la v1.7.20 corrigio en el chip de anadir direccion. */
body#checkout #checkout-addresses-step p:has(> a[data-link-action="different-invoice-address"]){margin:6px 0 18px}
/* ============ v1.7.19 - LA FILA DEL TRANSPORTISTA, SIMETRICA ============ */
/* El tema hace de .carrier un .row flex con justify-content:space-between y sus dos hijos son columnas Bootstrap con 15px de canalon. Se convierte en una fila normal: logo al ancho natural, nombre ocupando el resto, y una separacion REAL entre ambos en vez de los margenes negativos que habia. */
/* v1.7.20 - el selector gana una clase a proposito: el tema declara esto mismo con `.delivery-options .delivery-option .carrier` (cuatro clases) y la version anterior, con tres, perdia. Sin esto el flex-wrap y el justify-content no se aplicaban. */
body#checkout section.checkout-step .delivery-options .delivery-option .carrier{flex-wrap:nowrap;justify-content:flex-start;gap:14px}
body#checkout section.checkout-step .delivery-option .carrier > .carrier-logo{flex:0 0 auto;width:auto;max-width:110px;padding:0}
body#checkout section.checkout-step .delivery-option .carriere-name-container{flex:1 1 auto;width:auto;padding:0;min-width:0}
/* el plazo se centra con el resto de la fila, que ya es align-items:center */
body#checkout section.checkout-step .delivery-option .carrier-delay{margin-top:0}
/* el radio y la etiqueta pierden el canalon: asi el precio llega al relleno de la tarjeta y la fila queda simetrica por los dos lados */
body#checkout section.checkout-step .delivery-options > .delivery-option{gap:12px}
body#checkout section.checkout-step .delivery-options .delivery-option > .col-sm-1{flex:0 0 auto;width:auto;padding:0}
body#checkout section.checkout-step .delivery-options .delivery-option > label{flex:1 1 auto;width:auto;padding:0;min-width:0}
/* Desde 576px Bootstrap pone las tres columnas en linea (col-sm-*), asi que el reparto se corrige DESDE AHI y no desde 768: entre 576 y 767 tambien estaban en linea y con el reparto 5/4/3. Por debajo se apilan solas (col-xs-12) y no hay que hacer nada. */
@media (min-width:576px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row{flex-wrap:nowrap;gap:16px}}
@media (min-width:576px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-5{flex:0 0 auto;width:auto;padding:0}}
@media (min-width:576px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-4{flex:1 1 auto;width:auto;padding:0;min-width:0}}
@media (min-width:576px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-3{flex:0 0 auto;width:auto;padding:0;text-align:right}}
/* apilado en movil: el precio no se va a la derecha, se lee como una linea mas */
/* v1.7.20 - EN MOVIL LA TARJETA SE REHACE COMO REJILLA. Antes las tres columnas eran col-xs-12 apiladas a la izquierda -logo+nombre, luego el plazo, luego el precio-, y ademas la .row de Bootstrap arrastraba su margin:0 -15px y se salia 15px por cada lado de la propia etiqueta. Ahora: primera fila el transportista a ancho completo, segunda fila el plazo a la izquierda y el precio a la derecha. Es la misma lectura que en escritorio, apilada. */
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row{display:grid;grid-template-columns:1fr auto;gap:7px 12px;margin-left:0;margin-right:0}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > [class*="col-"]{padding:0}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-5{grid-column:1/-1}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-4{grid-column:1;align-self:center}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-3{grid-column:2;align-self:center;justify-self:end;text-align:right}}
/* el radio deja de caer en una linea propia: se alinea con el logo, no con el centro de una tarjeta de dos filas */
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options > .delivery-option{align-items:flex-start}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option > .col-sm-1{margin-top:6px}}
/* ============ v1.7.19 - EL BOTON CONTINUAR RECUPERA SU FORMA (regresion de la v1.7.18) ============ */
/* El boton lleva `float-xs-right`, y el tema lo declara con !important. Al aplanar el <form> con display:contents en la v1.7.18 el boton paso a ser ITEM FLEX de .content, y en un item flex el `float` SE IGNORA: quedo estirado a los 834px de la columna. Medido: 834x42. No es un fallo del hook, es su efecto colateral, y se me escapo porque solo comprobe el ORDEN de los bloques y no su GEOMETRIA. */
/* En un contenedor flex en columna el equivalente de float:right es align-self:flex-end. */
body#checkout #checkout-delivery-step #js-delivery button.continue{align-self:flex-end;width:auto;min-width:200px}
/* en movil si conviene el ancho completo: es el objetivo tactil principal del paso */
@media (max-width:767.98px){body#checkout #checkout-delivery-step #js-delivery button.continue{align-self:stretch;width:100%;min-width:0}}
/* ============ v1.7.19 - LOS TEXTOS SUELTOS DEL PASO 2 ============ */
/* Dos familias distintas, y por eso NO reciben el mismo trato. "Anadir nueva direccion" es una ACCION -navega a un formulario- y se le da el mismo chip de borde discontinuo que ya lleva el enlace de facturacion desde la v1.7.18: asi el paso tiene UN solo lenguaje para "anade algo mas". Los <h2> son TITULOS DE SECCION, no acciones: convertirlos en botones mentiria sobre lo que hacen. Reciben tratamiento de rotulo con filete. */
/* --- la accion --- */
body#checkout #checkout-addresses-step .add-address a{display:inline-flex;align-items:center;gap:9px;max-width:100%;padding:12px 16px;border:1px dashed var(--cp-border-strong);border-radius:var(--cp-r-btn);background-color:var(--cp-surface-sunken);color:var(--cp-link-hover);font-size:14px;font-weight:600;line-height:1.35;text-decoration:none;transition:border-color var(--cp-t-fast), background-color var(--cp-t-fast)}
body#checkout #checkout-addresses-step .add-address a:hover{border-color:var(--cp-primary);background-color:var(--cp-surface-hover);text-decoration:none}
@supports selector(:focus-visible){
body#checkout #checkout-addresses-step .add-address a:focus{outline:none}
body#checkout #checkout-addresses-step .add-address a:focus-visible{outline:none;box-shadow:var(--cp-focus-ring);border-color:var(--cp-secondary)}
}
/* el icono del core ya es un "+": se ajusta en vez de anadir otro por CSS */
body#checkout #checkout-addresses-step .add-address a i{margin:0;font-size:19px;line-height:1}
/* v1.7.20 - el chip solo llevaba margen SUPERIOR y quedaba pegado a lo que viniera detras: medido a 375, 442 y 768px, el hueco contra el boton Continuar era de 0,0px. El margen inferior colapsa con el del <p> siguiente, asi que no suma el doble donde hay dos seguidos. */
body#checkout #checkout-addresses-step .add-address{margin:14px 0 18px}
/* --- los titulos de seccion --- */
/* El filete se lleva el ancho sobrante: da al rotulo peso de division sin subir su tamano ni recurrir a mayusculas -que ya vienen puestas desde traducciones-. Tamano, peso y color son los que el DS 3.2 fija para "H2 seccion": 15px / 700 / text.primary. Venia en 18px, que competia con el titulo del propio paso. */
body#checkout #checkout-addresses-step h2.h4 strong{font-weight:700}
/* el primero no necesita separarse de la cabecera del paso */
body#checkout #checkout-addresses-step .js-address-form form > h2.h4:first-child{margin-top:4px}
/* ============ v1.7.19 - MERCADO PAGO: LO QUE SI SE PUEDE ============ */
/* HALLAZGO: el espaciado de Mercado Pago NO se puede pisar. Su hoja trae una capa de utilidades tipo .mp-pt-20 / .mp-pb-15 / .mp-py-20 con 79 declaraciones !important, mas .mp-checkout-form{padding-left:25px !important;padding-top:20px !important}. Verificado leyendo prioridades en el bundle servido: ni un estilo EN LINEA sin !important le gana. Compactar su ritmo vertical exigiria un !important por cada utilidad, contra un modulo de terceros que se actualiza solo: no se hace. */
/* Lo que si es nuestro y si se puede: el desborde horizontal y nuestros propios rellenos. Medido: el bloque baja de 452 a 420px (-32px, 7%) y el desborde derecho de 15px pasa a 0. */
/* La .row de Bootstrap traia margin:0 -15px y se salia 15px por la derecha de su propio formulario. No es una utilidad de MP: es Bootstrap, y no lleva !important. */
body#checkout #checkout-payment-step .mp-checkout-form > .row{margin-left:0;margin-right:0;padding-bottom:6px}
body#checkout #checkout-payment-step .mp-checkout-form > .row > [class*="col-"]{padding-left:0;padding-right:0}
/* estos dos rellenos los puso este archivo en su dia; se ajustan */
body#checkout .mp-redirect-frame{border-radius:var(--cp-r-card);padding:10px 10px 4px}
body#checkout .mp-payment-methods-container > div{margin:0 0 3px 3px}
/* ============ v1.7.20 - LA .row DEJA DE SALIRSE DE SU ETIQUETA ============ */
/* Causa comun de los defectos del paso 3, y consecuencia directa de la v1.7.19: Bootstrap declara margin:0 -15px en TODA .row, contando con que las columnas devuelvan esos 15px como relleno. La v1.7.19 anulo el relleno de las columnas -para que el precio llegara al borde- pero dejo vivo el margen negativo, asi que la fila entera se sale 15px por cada lado de la etiqueta. Medido en el arnes: etiqueta 142->664 contra fila 127->679, en los cuatro anchos. Efecto colateral: la etiqueta necesita 30px mas de los que tiene y el radio se cae a una linea propia en movil y en tablet. */
body#checkout section.checkout-step .delivery-options .delivery-option label > .row{margin-left:0;margin-right:0}
/* .carrier tambien es una .row */
body#checkout section.checkout-step .delivery-options .delivery-option .carrier{margin-left:0;margin-right:0}
/* La etiqueta no puede permitirse envolver: si lo hace, el radio se queda solo en una linea, que es justo lo que pasaba en movil y -por un pixel- tambien a 1024px. Con nowrap la etiqueta comprime en vez de saltar, y con min-width:0 en la columna del transportista el nombre se parte antes que desbordar. */
body#checkout section.checkout-step .delivery-options > .delivery-option{flex-wrap:nowrap}
body#checkout section.checkout-step .delivery-options .delivery-option label > .row > .col-sm-5{min-width:0}
body#checkout section.checkout-step .carrier-name{overflow-wrap:break-word;overflow-wrap:anywhere}
/* EN MOVIL EL NOMBRE TOMA SU PROPIA FILA, y es una decision, no una casualidad. Se intento meterlo al lado del logo ajustando ancho y separacion, pero a 375px el margen es de pocos pixeles y depende de la FUENTE: el arnes mide con tipografia de reserva y produccion carga la del tema, asi que cualquier ajuste al pixel seria falso. Con el nombre en fila propia no se parte nunca, en ningun ancho y con cualquier fuente, y el logo hasta puede crecer. */
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option .carrier{flex-wrap:wrap;gap:6px 10px}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option .carrier > .carrier-logo{max-width:96px}}
@media (max-width:575.98px){body#checkout section.checkout-step .delivery-options .delivery-option .carriere-name-container{flex:1 1 100%}}
/* ============ v1.7.20 - MERCADO PAGO: EL ANCHO QUE FALTABA ============ */
/* La v1.7.19 dejo dicho que el espaciado de MercadoPago no se pisa sin !important, y no se toco. El director pide el ancho igualmente, y en movil el caso es peor de lo que parecia: ademas del padding-left:25px !important de base, MercadoPago declara @media (max-width:767.98px){.mp-checkout-form{padding:0 25px 0 10px !important}}. Es decir, en el movil el bloque pierde 35px de ancho Y queda descentrado, 10px a la izquierda contra 25px a la derecha. */
/* TERCER !important del archivo, y excepcion documentada como las otras dos: contra un !important ajeno no existe otra via. Misma familia que el margen negativo de .dp-files de Creative Elements. Se limita a UNA declaracion, la del contenedor; las 79 utilidades de espaciado de MercadoPago (.mp-pt-20, .mp-pb-15, .mp-py-20...) se dejan en paz a proposito: pelearlas una a una seria fragil ante cualquier actualizacion del modulo. */
body#checkout #checkout-payment-step .mp-checkout-form{padding:12px 0 0 !important}
/* ============ v1.7.21 - PASO 2 SIN DIRECCIONES: EL FORMULARIO DE PRIMERA DIRECCION ============ */
/* Todo el trabajo del paso 2 se hizo con fichas de direccion en pantalla; el cliente NUEVO ve otra rama de addresses.tpl: un <p> de cabecera y el formulario. Ese <p> salia a 15px/400 en #7A7A7A -el gris que el DS prohibe como texto (4,29:1)- y ademas hoy duplica literalmente el titulo del paso. Recibe el MISMO rotulo con filete que los h2.h4 de la v1.7.19: 15px/700/text.primary. El selector es :first-child a proposito: no alcanza al <p> de la alerta ni a los .add-address. */
body#checkout #checkout-addresses-step .js-address-form > form > p:first-child{display:flex;align-items:center;gap:12px;margin:4px 0 18px;font-size:15px;font-weight:700;line-height:1.3;color:var(--cp-text)}
body#checkout #checkout-addresses-step .js-address-form > form > p:first-child::after{content:"";flex:1 1 auto;height:1px;background-color:var(--cp-border)}
/* EL MAPA DE google_address llegaba con height:500px EN LINEA sobre un contenedor de ~400px: un mapa VERTICAL que estiraba el formulario a 1305px. No hace falta !important: max-height se aplica DESPUES de height al calcular el valor usado (la misma leccion del logo de pago de la v1.6.0), asi que clampa la altura en linea sin pelearse con ella. Medido en vivo: 400x225, relacion 1,78 = 16:9 exacto en escritorio, y el formulario baja de 1305 a 1030px. En movil y tablet la caja es mas estrecha y las alturas escalan para conservar una proporcion panoramica. El radio y el borde lo integran a la familia de tarjetas del DS; el .gm-style interior sigue la caja (verificado: 398x223). */
/* v1.7.23 - position:relative + z-index:0 crean un CONTEXTO DE APILAMIENTO en el lienzo: los z-index internos de Google Maps (hasta 1e6) quedan CONTENIDOS bajo un 0 del contexto raiz y ya no pueden pintarse sobre la lista de sugerencias (z 1000). El fallo reportado no se reprodujo con eventos reales -dos corridas limpias end-to-end con la lista recibiendo los 15 puntos de sondeo y rellenando direccion, ciudad y codigo postal- pero este era el unico vector geometrico posible y se cierra. */
body#checkout #checkout-addresses-step #google-address-map-canvas{max-height:180px;border:1px solid var(--cp-border);border-radius:var(--cp-r-card);overflow:hidden;position:relative;z-index:0}
@media (min-width:768px){body#checkout #checkout-addresses-step #google-address-map-canvas{max-height:210px}}
@media (min-width:1025px){body#checkout #checkout-addresses-step #google-address-map-canvas{max-height:225px}}
/* ============ v1.7.22 - S2 APROBADA: BARRA Y RESUMEN PEGAJOSOS ============ */
/* El unico numero que hay que mantener: la cabecera pegada de CE (nav#cabecera_sticky) mide 85px con z-index 99. El offset es UNA custom property: si algun dia cambia el alto de esa cabecera, se edita este token y todo lo pegado se recoloca. */
/* v1.7.25 - --cp-bar-h: alto de la barra de progreso pegada. Hoy la barra vive solo en la columna izquierda y no se cruza con el resumen, asi que vale 0; cuando la barra U1 pase a TODO el ancho, este token toma su alto por vista y el resumen queda automaticamente por debajo de cabecera + barra. */
/* v1.7.26 - --cp-halo: el verde de marca al 15%, la misma alfa que ya usaba el halo del numero de paso desde la v1.7.15, ahora con nombre para que la barra y el numero no puedan divergir. --cp-bar-h pasa a tener valor real -la barra ya es full-bleed- y lo declara body#checkout por vista. */
/* v1.7.27 - --cp-head-h: alto de la cabecera fija de Creative Elements, que es lo que mide la CORTINA de la barra. Por eso su valor exacto deja de ser critico: si la cabecera midiera otra cosa, lo que se ve en la franja sigue siendo el gris de la pagina y no contenido pasando por detras. Medido en vivo: 85px de 768 en adelante, 70px en movil. --cp-bar-inset: lo que se meten hacia dentro los discos, y con ellos los extremos de la pista (24 de relleno + 15 de la fila en la F1). Al ser un token, el tramo movil cambia UN valor en vez de repetir las doce capas. --cp-halo sube a la alfa .20 de la F1. --cp-bar-h pierde la semilla del :root: su unico consumidor vive dentro del @supports, donde body#checkout la declara. */
:root{--cp-sticky-offset:101px;--cp-halo:rgba(0,166,80,.20);--cp-head-h:85px;--cp-bar-inset:39px}
/* v1.7.31 - el alto REAL de la cabecera fija de CE, medido en produccion con el sticky activo: 85 desde 1025, 71 entre 768 y 1024 -CE baja a su cabecera compacta en 1024, no en 768- y 70 por debajo. Faltaba el tramo de tablet y ahi la barra se pegaba 14px por debajo del borde de la cabecera: por esa rendija se veia pasar el contenido. */
@media (max-width:1024.98px){:root{--cp-head-h:71px}}
@media (max-width:767.98px){:root{--cp-head-h:70px;--cp-bar-inset:31px}}
/* EL RESUMEN, PEGADO SIEMPRE QUE HAYA DOS COLUMNAS (decision del director: con una columna, movil/tablet, no aplica). Tres piezas: */
/* (a) El bloqueo estructural, medido en vivo: la fila es display:block con columnas FLOTADAS, y la derecha mide solo lo que su contenido (608px contra 1772 de la izquierda): un sticky ahi solo viajaria 12px. La fila pasa a flex con estiramiento; los floats se ignoran en items flex y LOS ANCHOS SE CONSERVAN (960/480 medidos antes y despues). flex-wrap:wrap es la red de seguridad: si en alguna franja las columnas van al 100%, envuelven una bajo otra en vez de estrujarse lado a lado. */
/* (b) El corte de dos columnas es el lg de Bootstrap (992). Se engancha ahi y no en 1025: entre 992 y 1024.98 ya hay dos columnas en produccion. */
/* (c) En ventanas BAJAS el resumen pegado (596px) no cabria entero y su pie -el cupon- quedaria inalcanzable mientras esta pegado. En vez de apagar el sticky (el director lo quiere en todas las vistas de dos columnas), el resumen se limita a la altura visible y hace scroll INTERNO: max-height + overflow-y:auto. El overflow sobre el propio elemento pegado no rompe su sticky (solo lo rompen los ancestros, y la cadena esta verificada limpia en las dos paginas). */
/* v1.7.25 - DE FLEX A GRID, por FIREFOX. Con flex-wrap y columnas de 66,66%+33,33%, el redondeo sub-pixel de Firefox puede sumar mas de 100% y mandar la columna del resumen a una SEGUNDA linea: alli no estira y el sticky se queda sin recorrido (en Chrome el redondeo salva la suma y por eso alli si funcionaba). Grid reparte tracks exactos 2fr/1fr: no existe la envoltura, los floats se ignoran igual y el estiramiento es el comportamiento por defecto en los dos motores. width:auto neutraliza el ancho porcentual de Bootstrap, que dentro de un track significaria el 66% DEL TRACK; min-width:0 permite a los tracks fr encoger bajo el min-content de sus hijos, o el grid CRECE y desborda (medido en el arnes: 118px). */
@media (min-width:992px){body#checkout section#content > .row{display:grid;grid-template-columns:2fr 1fr;align-items:stretch}}
@media (min-width:992px){body#checkout section#content > .row > .cart-grid-body{float:none;width:auto;min-width:0}}
@media (min-width:992px){body#checkout section#content > .row > .cart-grid-right{float:none;width:auto;min-width:0}}
/* v1.7.27 - el resumen DESENCADENA la barra: al dejar de ser full-bleed, la barra nace y muere dentro de la columna izquierda y ya no puede cruzarse con el. Vuelve a colgar solo de la cabecera. */
@media (min-width:992px){body#checkout #js-checkout-summary{position:sticky;top:var(--cp-sticky-offset);z-index:5;max-height:calc(100vh - var(--cp-sticky-offset) - 12px);overflow-y:auto}}
/* Y LO MISMO EN EL CARRITO (congruencia pedida): misma mecanica, selectores propios de esa pagina (.cart-grid.row y .cart-summary; alli no hay barra de pasos). Verificado en vivo: columna 609 -> 1019 con anchos intactos y el resumen pegado. */
/* v1.7.25 - el carrito recibe el MISMO cambio a grid (congruencia y mismo motivo Firefox). Alli no hay barra: su offset no encadena --cp-bar-h. */
@media (min-width:992px){.page-cart .cart-grid.row{display:grid;grid-template-columns:2fr 1fr;align-items:stretch}}
@media (min-width:992px){.page-cart .cart-grid.row > .cart-grid-body{float:none;width:auto;min-width:0}}
@media (min-width:992px){.page-cart .cart-grid.row > .cart-grid-right{float:none;width:auto;min-width:0}}
@media (min-width:992px){.page-cart .cart-grid-right > .cart-summary{position:sticky;top:var(--cp-sticky-offset);z-index:5;max-height:calc(100vh - var(--cp-sticky-offset) - 12px);overflow-y:auto}}
/* ============ v1.7.22 - DOS CONGRUENCIAS AA DEL DIAGNOSTICO ============ */
/* El numero del paso ACTIVO era blanco sobre #00A650 a 19px/500 = 3,20:1, y a peso 500 no califica como texto grande. A 700 si (>=18.66px bold -> umbral 3:1) y 3,20 cumple: AA sin tocar el verde. */
body#checkout section.checkout-step .step-number{font-weight:700}
/* ============ v1.7.22 - PASO 2 CON FORMULARIO: AIRE Y EL CHECKBOX DE FACTURAS ============ */
/* El director reporto los campos PEGADOS en tablet/landscape. El tema pone 16px de base pero body#checkout .form-group{margin-bottom:.5rem} en movil, y en algunas vistas el aire se pierde del todo. Se fija un espaciado EXPLICITO en nuestro ambito, valido en todas las vistas: gana por especificidad (1,2,1 contra 1,1,1) y por orden. */
body#checkout .js-address-form .form-group{margin-bottom:18px}
/* el mapa respira: separado del campo Direccion que lo alimenta */
body#checkout #checkout-addresses-step #google-address-map-canvas{margin:8px 0 2px}
/* EL CHECKBOX DE FACTURAS, CONGRUENTE con el chip de facturacion de la rama con fichas: mismo lenguaje (borde discontinuo, fondo hundido, texto de accion en azul). Se estila la COLUMNA que lo envuelve via :has() -degradacion benigna: sin :has() queda como hoy-. El checkbox y su label son del formulario y no se tocan; solo cambia su entorno inmediato. */
/* v1.7.23 - EN LINEA: checkbox a la izquierda y el texto a su lado, alineado a la izquierda; en vistas estrechas el texto ENVUELVE a la derecha del checkbox, nunca por debajo (flex lo garantiza). */
body#checkout #checkout-addresses-step .js-address-form div:has(> input#use_same_address){display:flex;align-items:flex-start;gap:10px;max-width:100%;padding:12px 16px;border:1px dashed var(--cp-border-strong);border-radius:var(--cp-r-btn);background-color:var(--cp-surface-sunken)}
body#checkout #checkout-addresses-step .js-address-form div:has(> input#use_same_address) input{flex:0 0 auto;margin-top:3px}
/* el label lleva for="use_same_address": el clic en cualquier punto del texto conmuta la casilla de forma nativa. Formato de enlace pedido por el director. */
body#checkout #checkout-addresses-step .js-address-form div:has(> input#use_same_address) label{flex:1 1 auto;min-width:0;color:var(--cp-link-hover);font-size:14px;font-weight:600;line-height:1.45;cursor:pointer;margin:0;text-align:left}
/* la linea de ayuda que reduce la friccion: dice QUE PASA si se desmarca. Vive en el CSS, como la pildora del carrito: cambiarla exige version nueva. */
/* ============ v1.7.23 - CARRITO A UNA COLUMNA: EL RESUMEN ANTES QUE LA COTIZACION ============ */
/* En vistas de una columna el formulario de cotizacion de pdfquotation (#print-quotation, hijo directo de .cart-grid-body) quedaba ENTRE los productos y el resumen de totales, que es la prioridad de vista (decision del director). Mismo patron que el hook del paso 3 (v1.7.18): .cart-grid-body se aplana con display:contents, sus hijos pasan a ser items de .cart-grid -que se vuelve columna flex- y `order` los coloca: productos, RESUMEN, cotizacion. Verificado en vivo: orden correcto, cero desbordes; los hijos promovidos compensan con margen los 15px de canalon que la columna disuelta ya no aporta. Acotado a <991.98: con dos columnas nada cambia. */
@media (max-width:991.98px){.page-cart .cart-grid{display:flex;flex-direction:column;margin-left:0;margin-right:0}}
@media (max-width:991.98px){.page-cart .cart-grid > .cart-grid-body{display:contents}}
@media (max-width:991.98px){.page-cart .cart-grid-body > .cart-container{order:1;margin-left:15px;margin-right:15px}}
@media (max-width:991.98px){.page-cart .cart-grid-body > a.label{order:2;margin-left:15px}}
@media (max-width:991.98px){.page-cart .cart-grid-body > br{order:2}}
@media (max-width:991.98px){.page-cart .cart-grid > .cart-grid-right{order:3;float:none;width:100%}}
@media (max-width:991.98px){.page-cart .cart-grid-body > #print-quotation{order:4;margin-left:15px;margin-right:15px}}
/* ============ v1.7.24 - BLINDAJE EXTRA DE LA LISTA DE SUGERENCIAS (reporte Firefox) ============ */
/* El director reporta que en FIREFOX la seleccion con RATON falla (con teclado funciona; en Chrome todo bien). Con eventos reales en Chrome el flujo paso 3 veces de punta a punta y el modulo esta limpio (1 init, sin trampas de blur/mousedown). Sin Firefox en esta sesion, se blinda todo lo que un motor pueda resolver distinto: */
/* (a) la lista por encima de CUALQUIER apilamiento nuestro (barra 30, resumen 5, mapa contenido en 0). El z de .pac-container viene de la hoja de Google (1000), no en linea: esta regla la super-eleva sin !important. */
body#checkout .pac-container{z-index:2010}
/* (b) Firefox e interaccion: que ningun estilo herede sobre la lista un pointer-events o user-select raro */
/* v1.7.26 - se RETIRA el user-select:none de la v1.7.24: era una conjetura sobre Firefox que no resolvio el fallo, y en este proyecto lo no verificado no se queda. Solo sobrevive el cursor. */
body#checkout .pac-item{cursor:pointer}
/* ============ v1.7.25 - EL TOTAL NUNCA SE ESCONDE DENTRO DEL RESUMEN ============ */
/* v1.7.30 - SIN SOMBRA HACIA ARRIBA: el bloque ya es opaco y esa sombra era la mancha gris que se veia sobre el Subtotal en el CARRITO, donde este bloque si contiene esa fila; en el checkout no, y por eso las dos superficies no eran congruentes. Medido en vivo a 1512px: bloque desde y473, Subtotal en y481. */
/* El director pidio evitar el scroll interno del resumen. Dos medidas: (1) el bloque de TOTALES se pega al BORDE INFERIOR de la caja del resumen mientras su contenido hace scroll -sticky bottom DENTRO del contenedor con overflow-y:auto-, asi la cifra que importa y el IVA quedan siempre a la vista aunque el resto se desplace; (2) en ventanas bajas el resumen COMPACTA su relleno para que, en la practica, el scroll interno casi nunca llegue a existir. */
@media (min-width:992px){body#checkout #js-checkout-summary .cart-summary-totals, .page-cart .cart-grid-right > .cart-summary .cart-summary-totals{position:sticky;bottom:0;z-index:2;background-color:var(--cp-surface)}}
/* compactado en ventanas bajas: menos relleno vertical en las lineas del resumen */
@media (min-width:992px) and (max-height:760px){body#checkout #js-checkout-summary .card-block, .page-cart .cart-grid-right > .cart-summary .card-block{padding-top:8px;padding-bottom:8px}}
@media (min-width:992px) and (max-height:760px){body#checkout #js-checkout-summary .cart-summary-line, .page-cart .cart-grid-right > .cart-summary .cart-summary-line{padding-top:2px;padding-bottom:2px}}
/* ============ v1.7.26 - LA FICHA DEL MAPA SE OCULTA ============ */
/* Al elegir una direccion, Google abre un InfoWindow sobre el mapa con la misma direccion que ya esta en el campo de arriba: redundante y molesto (reporte del director). Se oculta el ANCLA completa -burbuja, contenido y flecha- y no solo .gm-style-iw-c, porque hacerlo a medias deja el rabito flotando. Acotado al lienzo del checkout: el resto del sitio no se toca. */
body#checkout #google-address-map-canvas .gm-style-iw-a{display:none}
body#checkout #google-address-map-canvas .gm-style-iw-t{display:none}
body#checkout #google-address-map-canvas .gm-style-iw.gm-style-iw-c{display:none}
/* ============ v1.7.28 - LA BARRA DE PROGRESO ============ */
/* POR QUE SE REHIZO. La v1.7.27 salia EN BLANCO en produccion. Reproducido con el minificador REAL del core -MatthiasMullie\Minify\CSS, que es el que usa el CCC de PS 8.2.7; el tubalmartin/cssmin del vendor NO interviene-: BORRA los valores REPETIDOS de una lista de background-position. Con los longhands -x/-y deja comas vacias y con el atajo colapsa el par a un solo valor; en los dos casos la declaracion entera queda invalida y las capas caen a 0% 0%. background-image y background-size SI toleran repeticiones. */
/* LA REGLA QUE QUEDA: ninguna entrada de background-position puede repetirse. Por eso el glifo y el disco se funden en UNA capa SVG -antes eran dos capas en la misma posicion- y la pista y el relleno en UN degradado. Seis capas con seis posiciones distintas, la mitad que antes. */
/* SIN CORTINA (correccion del director): la barra se pega A RAS de la cabecera con top:var(--cp-head-h), esquinas superiores rectas, radio solo abajo, y sombra SOLO hacia abajo -desplazamiento 8, difuminado 14, extension -8- para que al quedar pegada no proyecte nada sobre la cabecera. */
/* Los colores del disco van en HEX dentro del SVG y no como var(): un data-URI no ve las propiedades personalizadas del documento. Son los del DS: #00A650 primario, #FFFFFF superficie, #CFD4DA borde fuerte. El halo y la pista SI conservan sus tokens, porque son degradados CSS. */
/* v1.7.35 - este bloque estaba DENTRO del @supports selector(:has(*)) de abajo, asi que en un motor sin :has() -Firefox anterior al 121, Safari anterior al 15.4- no se aplicaba NADA de la recuperacion de ancho del carrito. Sale fuera: no depende de :has() para nada. Corta-pega, sin tocar una sola declaracion. */
/* v1.7.33 - APROVECHAR EL ANCHO EN MOVIL. Medido en el DOM vivo a 375px: el carrito desperdiciaba 30px por lado y el checkout 15, porque el .row del carrito NO lleva el margen negativo que cancela el relleno de #content-wrapper y el del checkout SI. Cada uno lleva su propia cuenta hasta los 10px; #content-wrapper no se toca porque en el checkout dejaria el .row en x=-10, es decir, desbordamiento horizontal. */
/* v1.7.35 - EL ANCHO DENTRO DE LA FICHA DE PRODUCTOS. Sangraba el contenido cuatro veces -card-block 16 + cart-overview 12 + cart-item 13- y la linea del producto arrancaba en x=67 de 375 cuando las lineas de totales estan en x=27. Los dos envoltorios intermedios dejan de aportar y el relleno se concentra en la tarjeta del producto, que es la unica con fondo y borde propios. */
@media (max-width:767.98px){
.page-cart .cart-grid-body .cart-overview{padding-left:8px;padding-right:8px}
.page-cart .cart-grid-body .cart-item{padding-left:12px;padding-right:12px}
}
@media (max-width:767.98px){
.page-cart .cart-grid.row{margin-left:-5px;margin-right:-5px}
.page-cart .cart-grid-body, .page-cart .cart-grid-right{padding-left:0;padding-right:0}
/* la ficha de productos lleva ademas 15px de margen propio: sin esto quedaria a 25px mientras la del resumen queda a 10, que es justo la incongruencia a evitar. */
/* v1.7.34 - CONGRUENCIA: TODO bloque de primer nivel de las dos columnas, no solo las fichas. La v1.7.33 dejo fuera el bloque de pdfquotation -COTIZACION ONLINE- y un enlace con margen propio, que se quedaron a 25px mientras el resto iba a 10. El id #print-quotation (1,0,0) le gana a `.page-cart .cart-grid-body > .card` (0,3,0): por eso hace falta nombrarlo. La regla con `> *` cubre lo que anadan otros modulos manana. */
.page-cart .cart-grid-body > *, .page-cart .cart-grid-right > *{margin-left:0;margin-right:0}
/* v1.7.35 - REGRESION DE LA v1.7.34: la regla de arriba usa el universal, que NO aporta especificidad (0,2,0), asi que pierde contra lo que da 15px de margen a la ficha y la de productos volvio a 25px mientras las demas iban a 10. Se restaura con la clase (0,3,0). */
.page-cart .cart-grid-body > .card, .page-cart .cart-grid-right > .card{margin-left:0;margin-right:0}
.page-cart .cart-grid-body > #print-quotation, .page-cart .cart-grid-right > #print-quotation{margin-left:0;margin-right:0}
/* el enlace 'Continuar comprando' tambien llevaba 15px propios y quedaba a 25 mientras las fichas iban a 10. Necesita su clase: con `> *` (0,2,0) no basta. */
.page-cart .cart-grid-body > a.label, .page-cart .cart-grid-right > a.label{margin-left:0;margin-right:0}
body#checkout .cart-grid-body, body#checkout .cart-grid-right{padding-left:10px;padding-right:10px}
}
@supports selector(:has(*)){
/* v1.7.28 - las cuatro PARADAS de la barra van en tokens porque el minificador del CCC borra todo calc() literalmente repetido dentro de una misma declaracion, tambien dentro de un gradiente; var() repetido si sobrevive (medido con MatthiasMullie/Minify/CSS, el minificador real del core). */
/* v1.7.28 - la geometria VERTICAL de la barra en tokens: relleno superior del rotulo (--cp-bar-pt) y desplazamiento de discos (--cp-bar-yd), halo (--cp-bar-yh) y pista (--cp-bar-yt). El tramo movil los sube 5px porque alli la barra mide 52px y con el relleno fijo de 41 el rotulo se salia 1px. */
body#checkout{--cp-bar-h:72px;--cp-bar-p1:var(--cp-bar-inset);--cp-bar-p2:calc(33.333% + var(--cp-bar-inset)/3);--cp-bar-p3:calc(66.666% - var(--cp-bar-inset)/3);--cp-bar-p4:calc(100% - var(--cp-bar-inset));--cp-bar-pt:52px;--cp-bar-yd:13px;--cp-bar-yh:8px;--cp-bar-yt:26px;--cp-bar-pad:32px}
@media (max-width:1024.98px){body#checkout{--cp-bar-h:68px}}
@media (max-width:767.98px){body#checkout{--cp-bar-h:66px;--cp-bar-pt:50px;--cp-bar-yd:11px;--cp-bar-yh:6px;--cp-bar-yt:24px}}
/* white-space:nowrap es OBLIGATORIO: el rotulo se coloca con text-indent, que RECORTA el ancho util de la primera linea, y sin el la etiqueta se partia en dos -"Paso" a un lado y "4 de 4" al otro-, que es lo que se vio en produccion. */
body#checkout .cart-grid-body::before{position:sticky;top:var(--cp-head-h);z-index:30;display:block;box-sizing:border-box;min-height:var(--cp-bar-h);margin:0 0 16px;padding:var(--cp-bar-pt) var(--cp-bar-pad) 4px;background-origin:border-box;background-repeat:no-repeat;background-color:var(--cp-surface);border:0;border-radius:var(--cp-r-card);box-shadow:0 -12px 0 0 transparent,0 12px 20px -10px rgba(0,0,0,.30);font-size:12px;font-weight:700;line-height:1;color:var(--cp-success-text);text-align:center;white-space:nowrap;content:""}
@media (max-width:767.98px){body#checkout .cart-grid-body::before{--cp-bar-pad:16px}}
/* v1.7.29 - EL ROTULO Y SU DISCO NO COMPARTEN ORIGEN: text-indent resuelve su % contra el ancho de CONTENIDO y background-position contra la caja de BORDE (background-origin:border-box), asi que centrar con 2*hito-100% desviaba el rotulo justo el relleno lateral. De ahi que el calculo reste --cp-bar-pad. Y en los pasos extremos el rotulo largo NO CABE centrado bajo un disco que esta a --cp-bar-inset del borde -se saldria 27,3px-, asi que ahi se alinea a su borde: desborde cero por construccion y el rotulo sigue naciendo bajo su disco. */
body#checkout .cart-grid-body:has(#checkout-personal-information-step.-current)::before{content:"Paso 1 de 4 \0000B7\000020Tus datos";text-indent:0;text-align:left;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><text x='15' y='15' dy='.35em' text-anchor='middle' font-family='sans-serif' font-size='19' font-weight='700' fill='%23FFFFFF'>1</text></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='14' fill='%23FFFFFF' stroke='%23CFD4DA' stroke-width='2'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='14' fill='%23FFFFFF' stroke='%23CFD4DA' stroke-width='2'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='14' fill='%23FFFFFF' stroke='%23CFD4DA' stroke-width='2'/></svg>"),radial-gradient(circle closest-side at 50% 50%, var(--cp-halo) 0 100%, transparent 0),linear-gradient(to right, transparent 0 var(--cp-bar-p1), var(--cp-primary-pressed) var(--cp-bar-p1) var(--cp-bar-p1), var(--cp-border) var(--cp-bar-p1) var(--cp-bar-p4), transparent 0);background-position:calc(var(--cp-bar-inset) - 15px) var(--cp-bar-yd),calc(33.333% + var(--cp-bar-inset)/3 - 5px) var(--cp-bar-yd),calc(66.666% + 5px - var(--cp-bar-inset)/3) var(--cp-bar-yd),calc(100% + 15px - var(--cp-bar-inset)) var(--cp-bar-yd),calc(var(--cp-bar-inset) - 20px) var(--cp-bar-yh),0 var(--cp-bar-yt);background-size:30px 30px,30px 30px,30px 30px,30px 30px,40px 40px,100% 4px}
body#checkout .cart-grid-body:has(#checkout-addresses-step.-current)::before{content:"Paso 2 de 4 \0000B7\000020Direcciones";text-indent:calc(var(--cp-bar-inset)*0.667 - 33.334% - var(--cp-bar-pad)*0.667);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><path d='M8.5 15.4l4.3 4.3L21.5 11' fill='none' stroke='%23FFFFFF' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><text x='15' y='15' dy='.35em' text-anchor='middle' font-family='sans-serif' font-size='19' font-weight='700' fill='%23FFFFFF'>2</text></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='14' fill='%23FFFFFF' stroke='%23CFD4DA' stroke-width='2'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='14' fill='%23FFFFFF' stroke='%23CFD4DA' stroke-width='2'/></svg>"),radial-gradient(circle closest-side at 50% 50%, var(--cp-halo) 0 100%, transparent 0),linear-gradient(to right, transparent 0 var(--cp-bar-p1), var(--cp-primary-pressed) var(--cp-bar-p1) var(--cp-bar-p2), var(--cp-border) var(--cp-bar-p2) var(--cp-bar-p4), transparent 0);background-position:calc(var(--cp-bar-inset) - 15px) var(--cp-bar-yd),calc(33.333% + var(--cp-bar-inset)/3 - 5px) var(--cp-bar-yd),calc(66.666% + 5px - var(--cp-bar-inset)/3) var(--cp-bar-yd),calc(100% + 15px - var(--cp-bar-inset)) var(--cp-bar-yd),calc(33.333% + var(--cp-bar-inset)/3 - 6.667px) var(--cp-bar-yh),0 var(--cp-bar-yt);background-size:30px 30px,30px 30px,30px 30px,30px 30px,40px 40px,100% 4px}
body#checkout .cart-grid-body:has(#checkout-delivery-step.-current)::before{content:"Paso 3 de 4 \0000B7\000020Env\0000EDo";text-indent:calc(33.332% + var(--cp-bar-pad)*0.667 - var(--cp-bar-inset)*0.667);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><path d='M8.5 15.4l4.3 4.3L21.5 11' fill='none' stroke='%23FFFFFF' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><path d='M8.5 15.4l4.3 4.3L21.5 11' fill='none' stroke='%23FFFFFF' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><text x='15' y='15' dy='.35em' text-anchor='middle' font-family='sans-serif' font-size='19' font-weight='700' fill='%23FFFFFF'>3</text></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='14' fill='%23FFFFFF' stroke='%23CFD4DA' stroke-width='2'/></svg>"),radial-gradient(circle closest-side at 50% 50%, var(--cp-halo) 0 100%, transparent 0),linear-gradient(to right, transparent 0 var(--cp-bar-p1), var(--cp-primary-pressed) var(--cp-bar-p1) var(--cp-bar-p3), var(--cp-border) var(--cp-bar-p3) var(--cp-bar-p4), transparent 0);background-position:calc(var(--cp-bar-inset) - 15px) var(--cp-bar-yd),calc(33.333% + var(--cp-bar-inset)/3 - 5px) var(--cp-bar-yd),calc(66.666% + 5px - var(--cp-bar-inset)/3) var(--cp-bar-yd),calc(100% + 15px - var(--cp-bar-inset)) var(--cp-bar-yd),calc(66.666% + 6.667px - var(--cp-bar-inset)/3) var(--cp-bar-yh),0 var(--cp-bar-yt);background-size:30px 30px,30px 30px,30px 30px,30px 30px,40px 40px,100% 4px}
body#checkout .cart-grid-body:has(#checkout-payment-step.-current)::before{content:"Paso 4 de 4 \0000B7\000020Pago";text-indent:0;text-align:right;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><path d='M8.5 15.4l4.3 4.3L21.5 11' fill='none' stroke='%23FFFFFF' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><path d='M8.5 15.4l4.3 4.3L21.5 11' fill='none' stroke='%23FFFFFF' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><path d='M8.5 15.4l4.3 4.3L21.5 11' fill='none' stroke='%23FFFFFF' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><circle cx='15' cy='15' r='15' fill='%2300A650'/><text x='15' y='15' dy='.35em' text-anchor='middle' font-family='sans-serif' font-size='19' font-weight='700' fill='%23FFFFFF'>4</text></svg>"),radial-gradient(circle closest-side at 50% 50%, var(--cp-halo) 0 100%, transparent 0),linear-gradient(to right, transparent 0 var(--cp-bar-p1), var(--cp-primary-pressed) var(--cp-bar-p1) var(--cp-bar-p4), var(--cp-border) var(--cp-bar-p4) var(--cp-bar-p4), transparent 0);background-position:calc(var(--cp-bar-inset) - 15px) var(--cp-bar-yd),calc(33.333% + var(--cp-bar-inset)/3 - 5px) var(--cp-bar-yd),calc(66.666% + 5px - var(--cp-bar-inset)/3) var(--cp-bar-yd),calc(100% + 15px - var(--cp-bar-inset)) var(--cp-bar-yd),calc(100% + 20px - var(--cp-bar-inset)) var(--cp-bar-yh),0 var(--cp-bar-yt);background-size:30px 30px,30px 30px,30px 30px,30px 30px,40px 40px,100% 4px}
/* la pagina RECARGA entre pasos, asi que una transicion no se veria jamas: la entrada es una animacion de carga sobre el tamano de una capa de fondo, nunca sobre la geometria */
/* v1.7.29 - en movil el rotulo vuelve al contador a secas: medido con la tipografia real a 12px/700, "Paso 1 de 4 \00B7 Tus datos" mide 116,4px y su mitad (58,2) no cabe en los 47px que hay del centro del disco extremo al borde de la barra; se saldria 11,2px. El :has() se repite porque las reglas por paso suman 2 ids + 2 clases. */
@media (max-width:767.98px){body#checkout .cart-grid-body:has(#checkout-personal-information-step.-current)::before{content:"Paso 1 de 4"}body#checkout .cart-grid-body:has(#checkout-addresses-step.-current)::before{content:"Paso 2 de 4"}body#checkout .cart-grid-body:has(#checkout-delivery-step.-current)::before{content:"Paso 3 de 4"}body#checkout .cart-grid-body:has(#checkout-payment-step.-current)::before{content:"Paso 4 de 4"}}
@media (prefers-reduced-motion:no-preference){body#checkout .cart-grid-body::before{animation:cpBarra 600ms cubic-bezier(.22,.61,.36,1) both}}
@media print{body#checkout .cart-grid-body::before{display:none}}
/* v1.7.29 - punto 6: la barra nace con radio en las cuatro esquinas y se vuelve cortina -sin radio arriba- justo al acoplarse a la cabecera. La deteccion es una timeline de vista sobre la columna con el inset igual al alto de la cabecera: asi 'contain 0%' coincide con el instante en que el borde superior de la columna llega a esos 85px, que es cuando la barra se pega. El rango es de 1px, o sea instantaneo. */
/* v1.7.29 - DEGRADACION: todo vive dentro de @supports. Sin soporte el radio superior se queda en 0, que es exactamente lo que se ve hoy, asi que el unico fallo posible es cosmetico y nunca funcional. NO se ha podido verificar en esta sesion: ni el headless con tiempo virtual ni el panel interno producen fotogramas, y sin fotogramas la timeline no se activa. */
@supports (animation-timeline: view()) and (animation-range: contain 0%) and (view-timeline-inset: 0px){
body#checkout .cart-grid-body{view-timeline:--cpAcople block;view-timeline-inset:var(--cp-head-h) 0}
body#checkout .cart-grid-body::before{animation-name:cpAcople;animation-duration:auto;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--cpAcople;animation-range:contain 0% contain 1px}
/* v1.7.29 - con movimiento permitido conviven las dos: la de entrada por reloj y el acople por scroll. Bajo prefers-reduced-motion queda solo el acople, que no es movimiento sino un cambio de estado ligado a la posicion. */
@media (prefers-reduced-motion:no-preference){body#checkout .cart-grid-body::before{animation-name:cpBarra,cpAcople;animation-duration:600ms,auto;animation-timing-function:cubic-bezier(.22,.61,.36,1),linear;animation-fill-mode:both,both;animation-timeline:auto,--cpAcople;animation-range:normal,contain 0% contain 1px}}
}
}
@keyframes cpAcople{from{border-top-left-radius:var(--cp-r-card);border-top-right-radius:var(--cp-r-card);box-shadow:0 -12px 0 0 transparent,0 12px 20px -10px rgba(0,0,0,.30)}to{border-top-left-radius:0;border-top-right-radius:0;box-shadow:0 -12px 0 0 var(--cp-surface),0 12px 20px -10px rgba(0,0,0,.30)}}
/* la definicion vive fuera del @supports: si el navegador no entra en el bloque nadie la referencia */
@keyframes cpBarra{from{background-size:30px 30px,30px 30px,30px 30px,30px 30px,0 0,0 4px}}
/* ============ v1.7.26 - F1 (b): LOS TITULOS DE PASO ============ */
/* El "section" del selector NO es decorativo: el tema declara body#checkout section.checkout-step.-reachable.-current .step-number con 1 id, 4 clases y 2 elementos, y ahi impone width/height/margin-right/font-size. Por eso la regla del paso ACTUAL repite esas cuatro propiedades: empata en (1,4,2) y gana por orden. Sin ellas el numero en curso se veia MAS PEQUENO que los pendientes (33x33 a 16px contra 32x32 a 19px, medido). */
/* v1.7.27 - P6: FUERA el text-transform:none. El tema declara text-transform:uppercase sobre ESTE MISMO selector y con la misma especificidad, asi que el "none" ganaba por orden y convertia en caja normal unos titulos que el core pinta en MAYUSCULAS. Comprobado en el theme.css real del core; se retira y vuelve lo nativo. */
body#checkout section.checkout-step .step-title{display:flex;align-items:center;gap:12px;margin:0;font-size:18px;font-weight:700;color:var(--cp-text)}
body#checkout section.checkout-step .step-title .step-number{flex:0 0 auto;width:32px;height:32px;margin-right:0;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:19px;font-weight:700;line-height:1;background-color:var(--cp-surface);border:2px solid var(--cp-text-muted);color:var(--cp-text)}
body#checkout section.checkout-step .step-title .done{display:none}
body#checkout section.checkout-step.-current .step-title{color:var(--cp-text-strong)}
body#checkout section.checkout-step.-current .step-title .step-number{width:32px;height:32px;margin-right:0;font-size:19px;background-color:var(--cp-primary-pressed);border-color:var(--cp-primary-pressed);color:var(--cp-surface);box-shadow:0 0 0 5px var(--cp-halo)}
/* :not(.-current) NO es adorno: un paso puede llevar -complete Y -current a la vez, y ocurre en cuanto el cliente pulsa "Modificar" sobre un paso ya cerrado. Sin excluirlo, el paso que se esta EDITANDO mostraria un check de "hecho" en vez de su numero con halo, que es justo lo contrario de lo que pasa. El arnes lo detecto porque su marcado -transcrito del core- da esa combinacion a los pasos 2 y 3. */
body#checkout section.checkout-step.-complete:not(.-current) .step-title{color:var(--cp-text-heading)}
body#checkout section.checkout-step.-complete:not(.-current) .step-title .step-number{display:none}
body#checkout section.checkout-step.-complete:not(.-current) .step-title .done{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:32px;height:32px;padding:0;margin-right:0;border-radius:50%;background-color:var(--cp-primary-pressed);color:var(--cp-surface);font-size:20px}
/* el filete gris del tema bajo cada titulo -y el superior del paso siguiente al actual- son del modelo acordeon: dentro de una ficha con borde propio quedan como lineas sueltas */
body#checkout section.checkout-step .step-title{padding-top:0;padding-bottom:12px;border-top:0;border-bottom:0}
/* ============ v1.7.26 - F1 (c): CADA PASO, UNA FICHA ============ */
body#checkout #wrapper{background-color:var(--cp-surface-section)}
/* el borde sube a --cp-border-strong: sobre la pagina gris nueva, el #E6E6E6 anterior daba 1,11:1 y no separaba nada. El paso en curso lo lleva en verde de marca. */
body#checkout section.checkout-step{background-color:var(--cp-surface);border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card);padding:20px 24px;margin-bottom:16px}
/* v1.7.34 - ANCHO DE LAS FICHAS DE CADA PASO. Medido a 375px: columna 10 + ficha 24 + .content 15 = 50px perdidos por lado y contenido util de 276 sobre 375, el 73%. La ficha baja a 14px de relleno y el .content deja de aportar el suyo: el contenido arranca a 25px del borde de la pantalla con la ficha a 10px, el minimo pedido. Va DETRAS de la regla de arriba a proposito: una media query no aporta especificidad, empata, y a igualdad gana el orden. */
/* v1.7.35 - el relleno lateral del paso lo manda SOLO la ficha, en todos los anchos. Antes esto vivia bajo @media (max-width:767.98px) y de 768 en adelante volvia el `padding:0 2.313rem` -37px- que el tema da al .content, apilado sobre los 24 de la ficha: medido a 753px, el contenido arrancaba a 77px de la columna con 599 de ancho util; ahora 40px y 673, +74px. Justo el tramo de tablet que pidio el director. */
body#checkout section.checkout-step > .content{padding-left:0;padding-right:0}
@media (max-width:767.98px){
body#checkout section.checkout-step{padding-left:14px;padding-right:14px}
}
body#checkout section.checkout-step.-current{border-color:var(--cp-primary)}
body#checkout .cart-grid-right .card, body#checkout #js-checkout-summary{background-color:var(--cp-surface);border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-card);box-shadow:var(--cp-shadow-card)}
/* entrada escalonada. animation-delay + fill-mode:both deja la ficha invisible mientras espera su turno, asi que el escalonado se mantiene CORTO: 40/80/120ms sobre 250 de duracion, y la ultima ficha no pasa de 120ms oculta. */
/* v1.7.34 - `both` deja la animacion EN EFECTO para siempre: el transform se queda en la matriz identidad, que no es `none`, y eso CREA CONTEXTO DE APILAMIENTO permanente en la ficha. Con z-index:auto, el 1060 del modal se resolvia DENTRO de ella y el dialogo quedaba por debajo del backdrop, de la cabecera y del chatbox: pantalla oscurecida sobre el modal y ningun toque llegando a `.modal`. Eso es el bloqueo que reporto el director. `backwards` conserva el fotograma inicial durante el retardo -la entrada escalonada se ve igual- pero sale de efecto al terminar. */
@media (prefers-reduced-motion:no-preference){body#checkout section.checkout-step{animation:cpFichaEntra 250ms ease backwards}}
@media (prefers-reduced-motion:no-preference){body#checkout section.checkout-step:nth-of-type(2){animation-delay:40ms}}
@media (prefers-reduced-motion:no-preference){body#checkout section.checkout-step:nth-of-type(3){animation-delay:80ms}}
@media (prefers-reduced-motion:no-preference){body#checkout section.checkout-step:nth-of-type(4){animation-delay:120ms}}
@keyframes cpFichaEntra{from{opacity:0;transform:translateY(8px)}}
/* ============ v1.7.26 - F1 (d): PILDORAS EN LAS FICHAS DE DIRECCION ============ */
/* Los dos contenedores existen y son distintos en el DOM real -div#delivery-addresses y div#invoice-addresses-, asi que una pildora por contenedor basta para etiquetar cada ficha sin tocar el marcado. El ::before del article esta libre (ya tiene header, hr y footer). */
/* LA PILDORA VA EN EL FLUJO, NO SUPERPUESTA. Se probo primero flotandola arriba a la derecha con position:absolute y apartando la cabecera con padding-right, y el arnes lo tumbo: .address-item es un item FLEX con flex:0 0 49% y, en el tramo movil/tablet, flex-grow:1. Su minimo automatico es el ancho min-content, asi que el padding de la cabecera SUBIA ese minimo y las dos fichas terminaban con anchos distintos -medido a 768px: 566 contra 490-. Ademas la reserva habria sido un numero magico -la pildora mide distinto en "Entrega" que en "Facturacion"- y en el tramo estrecho, donde el tema pone las dos fichas lado a lado, se habria comido media ficha. En el flujo no hay reserva que calcular y las dos fichas crecen lo mismo. inline-block para que se ajuste a su texto: un ::before de bloque ocuparia todo el ancho y seria una franja, no una pildora. */
body#checkout .address-selector .address-item::before{display:inline-block;margin:12px 15px 2px;padding:2px 10px;border-radius:var(--cp-r-pill);font-size:11px;font-weight:700;line-height:1.6;letter-spacing:.4px;text-transform:uppercase;background-color:var(--cp-surface)}
body#checkout #delivery-addresses .address-item::before{content:"Entrega";color:var(--cp-success-on-bg);border:1px solid var(--cp-primary)}
body#checkout #invoice-addresses .address-item::before{content:"Facturaci\0000F3n";color:var(--cp-info-text);border:1px solid var(--cp-link)}
/* ============ v1.7.26 - F1 (e): ICONO Y AYUDA EN LOS MEDIOS DE PAGO ============ */
/* La etiqueta del medio de pago es un contenedor FLEX (v1.7.16), asi que sus pseudo-elementos son ITEMS flex: display:block no baja de linea y vertical-align es inerte. Medido en la primera tentativa: la ayuda se colocaba A LA DERECHA del nombre y el icono se encogia de 26px a 0 en movil. La etiqueta admite ahora segunda fila (flex-wrap, parcheado arriba), el icono no encoge y la ayuda ocupa una fila entera. */
body#checkout section.checkout-step .payment-options label::after{flex:0 0 100%;margin:0;font-size:13px;font-weight:400;line-height:1.45;color:var(--cp-text)}
@media (max-width:767.98px){body#checkout section.checkout-step .payment-options label::after{font-size:14px}}
/* La transferencia no trae logo: se le dibuja uno. Anclado por data-module-name, que el core emite para TODAS las opciones (payment.tpl), no por :has(img) ni por #payment-option-N: el indice es posicional y la presencia de imagen etiquetaria a cualquier medio futuro con logo. */
body#checkout section.checkout-step .payment-option:has(input[data-module-name="ps_wirepayment"]) label::before{content:"";display:inline-block;width:26px;height:26px;margin-right:0;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23007ACC'><path d='M12 2 2 7v3h20V7Zm-7 10h3v7H5Zm5.5 0h3v7h-3ZM16 12h3v7h-3ZM3 21h18v2H3Z'/></svg>");background-size:contain;background-position:center;background-repeat:no-repeat}
body#checkout section.checkout-step .payment-option:has(input[data-module-name="ps_wirepayment"]) label::after{content:"Transferencia directa: confirmaci\0000F3n en horario h\0000E1bil y stock reservado 48\0000A0h"}
/* ============ v1.7.26 - F1 (f): EL CONMUTADOR DEL PASO 1 ============ */
/* Solo se ve con la sesion cerrada. El margen inferior se declara con !important? NO: el <ul> lleva my-2 de Bootstrap, que en el theme.css real es margin-top/bottom:1.5rem!important, asi que el margen propio seria letra muerta y NO se declara: se acepta el del tema y se ajusta el resto. */
body#checkout #checkout-personal-information-step .nav-inline{display:flex;gap:8px;padding:0;background:none;border:0;border-radius:0;list-style:none}
body#checkout #checkout-personal-information-step .nav-inline .nav-item{margin:0}
body#checkout #checkout-personal-information-step .nav-inline .nav-separator{display:none}
/* min-height:40px: el DS exige 40px de objetivo tactil (S.1-4) y las pildoras median 32,3. */
body#checkout #checkout-personal-information-step .nav-inline .nav-link{display:inline-flex;align-items:center;min-height:40px;padding:0 18px;border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-pill);font-size:14px;font-weight:600;color:var(--cp-text);background-color:var(--cp-surface);box-shadow:none;text-decoration:none;transition:border-color var(--cp-t-fast), color var(--cp-t-fast), background-color var(--cp-t-fast)}
body#checkout #checkout-personal-information-step .nav-inline .nav-link:hover{border-color:var(--cp-primary);color:var(--cp-text-heading)}
body#checkout #checkout-personal-information-step .nav-inline .nav-link.active{background-color:var(--cp-primary-pressed);border-color:var(--cp-primary-pressed);color:var(--cp-surface)}
/* el apagado del contorno va DENTRO de @supports: en Safari <15.4 y Firefox <85 la regla :focus-visible se descarta entera y el outline:none se quedaria solo, dejando el foco de teclado SIN ningun indicador. */
@supports selector(:focus-visible){
body#checkout #checkout-personal-information-step .nav-inline .nav-link:focus{outline:none}
body#checkout #checkout-personal-information-step .nav-inline .nav-link:focus-visible{outline:none;box-shadow:var(--cp-focus-ring);border-color:var(--cp-secondary)}
}
/* ============ v1.7.27 - P5: LOS ROTULOS DEL PASO 2, CON SU AYUDA ============ */
/* El core emite <h2 class="h4"> con UNA sola cadena de traduccion, asi que "(Cobertura nacional)" NO se puede colorear aparte: no hay nodo que agarrar. El director deja en Traducciones solo el rotulo y la ayuda la pone este CSS. Va en ::before y no en ::after porque ::after ya es el filete; con order se coloca detras del texto. OJO AL MANTENER: estos dos textos viven en el CSS, no en Traducciones. */
body#checkout #checkout-addresses-step h2.h4{display:flex;flex-wrap:wrap;align-items:center;gap:2px 12px;margin:28px 0 14px;font-size:15px;font-weight:700;line-height:1.35;letter-spacing:.4px;text-transform:uppercase;color:var(--cp-text)}
body#checkout #checkout-addresses-step h2.h4::before{order:1;font-size:13px;font-weight:400;line-height:1.35;letter-spacing:0;text-transform:none;color:var(--cp-text);content:"Llegamos a todo Chile"}
body#checkout #checkout-addresses-step h2.h4::after{order:2;content:"";flex:1 1 40px;height:1px;background-color:var(--cp-border)}
/* el SEGUNDO rotulo es el que viene DESPUES del bloque de direcciones de envio: por ahi se distingue sin depender de nth-of-type, que se descoloca cuando el cliente no tiene direcciones y el core pinta el formulario en vez de las fichas */
body#checkout #delivery-addresses ~ h2.h4::before, body#checkout #delivery-address ~ h2.h4::before{content:"A nombre de qui\0000E9n emitimos la factura"}
/* ============ v1.7.27 - P8+P9: EL ICONO A LA DERECHA Y LA AYUDA BAJO EL TITULO ============ */
/* P9: el icono de transferencia se coloca donde va el logo de MercadoPago -al final de la fila- y con la misma caja. margin-left:auto lo empuja al extremo derecho y order:1 lo pone detras del nombre aunque en el codigo sea un ::before. P8: con el icono fuera del arranque de la fila, la ayuda ya cae alineada con el titulo, que es lo que se pedia. */
body#checkout section.checkout-step .payment-options label > span{order:0}
body#checkout section.checkout-step .payment-options label::before{order:1;flex:0 0 auto;align-self:center;margin-left:auto;margin-right:0}
body#checkout section.checkout-step .payment-options label img{order:1;align-self:center;margin-left:auto}
body#checkout section.checkout-step .payment-options label::after{order:2}
/* v1.7.29 - punto 4: el titulo del medio de pago. Levantado en vivo: es label > span, no un nodo de texto suelto, asi que se estila directo. Se ancla por label > span y no por #payment-option-N -que es posicional- ni por data-module-name -que MercadoPago deja vacio-, de modo que sirve para cualquier medio de pago futuro. Se descarta la pastilla: la tarjeta ya es el control seleccionable y una pastilla dentro seria un boton dentro de un boton. */
/* v1.7.29 - el radio del medio de pago no tenia NINGUN indicador de foco: el input va con opacity:0 -su contorno se pinta a alfa 0- y el span del punto no tiene borde. Con dos medios de pago el core no marca ninguno al cargar, asi que con teclado se tabula a ciegas en el paso donde se confirma el pedido. El anillo va sobre la TARJETA, que es el objetivo visible. */
body#checkout section.checkout-step .payment-option:has(input[type="radio"]:focus-visible){outline:none;box-shadow:var(--cp-focus-ring);border-color:var(--cp-link)}
body#checkout section.checkout-step .payment-options label > span{font-size:16px;font-weight:700;line-height:1.3;color:var(--cp-text-strong)}
@media (max-width:767.98px){body#checkout section.checkout-step .payment-options label > span{font-size:15px}}
/* ============ v1.7.27 - P10: LA AYUDA DE MERCADOPAGO, ANCLADA POR SU LOGO ============ */
/* CORRIGE EL COMENTARIO DE LA v1.7.26. El core imprime el atributo data-module-name para todas las opciones, pero el VALOR solo lo pone el modulo llamando a PaymentOption::setModuleName(), y en el core 8.2.7 solo lo hacen free_order, ps_cashondelivery, ps_checkpayment y ps_wirepayment. MercadoPago no lo llama: su atributo llega VACIO, y por eso la transferencia casaba y el no. La causa persiste en PS 9.1.4. Se ancla por el logo -que el modulo sirve desde su propio origen- y se deja el nombre de modulo como tercera via por si algun dia lo declara. */
/* EL GUARDIA ES .payment-option EN SINGULAR: dentro de .payment-options vive tambien el formulario del medio de pago, con etiquetas propias y logos del MISMO origen; con el plural la ayuda se estampaba tambien ahi dentro. */
body#checkout section.checkout-step .payment-option:has(img[src*="mlstatic.com" i]) label::after, body#checkout section.checkout-step .payment-option:has(img[src*="/mercadopago/" i]) label::after, body#checkout section.checkout-step .payment-option:has(input[data-module-name*="mercadopago" i]) label::after{content:"Tarjetas guardadas, cr\0000E9dito, d\0000E9bito o prepago. Sin registrarte y con el stock reservado al instante."}
/* ============ v1.7.27 - P4: EL BOTON CANCELAR DEL FORMULARIO DE DIRECCION ============ */
/* El core lo emite como <a class="js-cancel-address cancel-address float-xs-right"> junto al boton primario, los dos flotados a la derecha. No se pelea el float -Bootstrap lo declara con !important-: se le da cuerpo de accion secundaria y el aire que le faltaba. */
body#checkout a.cancel-address{display:inline-flex;align-items:center;justify-content:center;min-height:44px;margin:0 14px 0 0;padding:0 18px;border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-btn);background-color:var(--cp-surface);color:var(--cp-text-heading);font-size:14px;font-weight:600;line-height:1.2;text-decoration:none;transition:border-color var(--cp-t-fast), background-color var(--cp-t-fast), color var(--cp-t-fast)}
body#checkout a.cancel-address:hover{border-color:var(--cp-text-muted);background-color:var(--cp-surface-sunken);color:var(--cp-text-strong);text-decoration:none}
@supports selector(:focus-visible){
body#checkout a.cancel-address:focus{outline:none}
body#checkout a.cancel-address:focus-visible{outline:none;border-color:var(--cp-secondary);box-shadow:var(--cp-focus-ring)}
}
/* en movil los dos ocupan el ancho completo y el secundario baja: primero "sigo", despues "me arrepiento" */
@media (max-width:767.98px){body#checkout a.cancel-address{display:flex;float:none;width:100%;margin:12px 0 0}}
/* ============ v1.7.27 - P1: "CONTINUAR COMPRANDO" DEJA DE SER TEXTO SUELTO ============ */
/* El core lo emite como <a class="label"> hijo DIRECTO de .cart-grid-body. El ">" es obligatorio: el OTRO a.label del carrito es el nombre del producto, y sin el se estilarian los nombres de todas las fichas. Los margenes van en LONGHAND porque la regla de reordenacion a una columna declara margin-left:15px sobre este mismo selector y con la misma especificidad: un atajo se lo comeria. */
.page-cart .cart-grid-body > a.label{display:inline-flex;align-items:center;align-self:flex-start;gap:8px;max-width:100%;min-height:40px;margin-top:14px;margin-bottom:18px;padding:0 16px;border:1px dashed var(--cp-border-strong);border-radius:var(--cp-r-pill);background-color:var(--cp-surface);color:var(--cp-link-hover);font-size:14px;font-weight:600;line-height:1.35;text-decoration:none;vertical-align:top;transition:border-color var(--cp-t-fast), background-color var(--cp-t-fast)}
.page-cart .cart-grid-body > a.label:hover{border-color:var(--cp-primary);border-style:solid;background-color:var(--cp-surface-sunken);color:var(--cp-link-hover);text-decoration:none}
@supports selector(:focus-visible){
.page-cart .cart-grid-body > a.label:focus{outline:none}
.page-cart .cart-grid-body > a.label:focus-visible{outline:none;border-color:var(--cp-secondary);border-style:solid;box-shadow:var(--cp-focus-ring)}
}
/* el icono es item flex y por defecto encoge; ademas el core lo pinta con su propio interlineado */
.page-cart .cart-grid-body > a.label i.material-icons{flex:0 0 auto;margin:0;font-size:19px;line-height:1}
@media print{
.page-cart .cart-item .dp_cart{overflow:visible}
.page-cart .cart-item .dp_cart span[class*="dp-input-field-"], .page-cart .cart-item .dp_cart .dp-files a{display:block;overflow:visible;-webkit-line-clamp:none}
/* v1.7.32 - la regla de arriba casa tambien dp-input-field-preview y empata con la que lo oculta (0,4,2), asi que ganaba por orden y el campo que DynamicProduct esconde salia impreso. Se vuelve a ocultar aqui, sin :not() sobre la generica: eso le subiria la especificidad y el campo del logo perderia su display:flex. */
.page-cart .cart-item .dp_cart span.dp-input-field-preview{display:none}
}
/* ===== v1.7.43 - CAJA DE LUZ AL CONFIRMAR EL PEDIDO (todas las vistas) ===== */
/* EL GANCHO ES DEL CORE y no hace falta JS: confirm() de themes/core.js hace su AJAX checkCartStillOrderable y, si el carrito sigue pedible, anade la clase "disabled" a #payment-confirmation button y envia el formulario del medio de pago. El estado "faltan condiciones" lleva ADEMAS el atributo (toggleOrderButton), asi que button.disabled:not([disabled]) significa procesando. Identico en 8.2.7 y 9.1.4. Medido: 416 ms hasta la clase en devel, 3,0 s hasta la pagina nueva en produccion y 13,3 s en devel. */
/* LAS DOS GUARDAS SON OBLIGATORIAS: payment.tpl:132 emite la clase disabled SIN el atributo cuando no hay metodo elegido -el caso normal al llegar al paso 4-, asi que el discriminador solo casaria desde el primer pintado. Condiciones aceptadas: su checkbox se emite siempre sin checked y solo lo marca el cliente. Metodo marcado ADEMAS: el checkbox es pulsable antes de que corra core.js. Control 10 (tests/arnes_espera.py) con los seis estados reales del boton en dos anchos. */
/* NADA DE ESTE BLOQUE PUEDE BLOQUEAR LA COMPRA: solo pinta PSEUDO-ELEMENTOS. Desde la v1.7.43 no toca ni un nodo del checkout mientras el core tiene la clase puesta; no toca pointer-events; el velo muere con la navegacion o, si el servidor no responde, se apaga solo a los 30 s (visibility:hidden deja de recibir toques) y el boton recupera su cursor. Sin :has() no aparece nada y el checkout se ve como hoy. */
/* v1.7.43 - FUERA LA PILDORA (decision del director): mostrar el medio de pago y el monto obligaba a ELEVAR esos dos nodos reales al modal -son textos dinamicos y no caben en content:-, y al viajar dejaban su fila del resumen con el rotulo y sin la cifra (reporte del 04-09-2026). Con ellos se van tambien las dos reglas que desmontaban los sticky del resumen, la ocultacion del bloque de totales y los cinco keyframes de vuelta: el bloque queda SOLO de pseudo-elementos y el DOM del checkout no se toca. El monto sigue a la vista donde siempre estuvo, en el resumen. */
/* GEOMETRIA v1.7.43: tarjeta de ALTO FIJO centrada por desplazamiento constante; cada capa es un fixed independiente con su offset desde el centro. Movil H=204 (centro -102..102): puntos -82, titulo desde -58, ayuda +2, linea +70. Escritorio H=180 (centro -90..90): -66 / -44 / -8 / +58. Al retirarse la pildora la tarjeta encoge 52px en movil y 52 en escritorio, y las cuatro capas se recolocan: el control 11 mide que ninguna se solape ni se salga en las ocho vistas. */
body#checkout{--cp-espera:1.6s}
@supports selector(:has(*)){
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))::before{content:"";position:fixed;inset:0;z-index:1200;background:rgba(23,23,23,.58);animation:cpVeloEntra 200ms ease backwards,cpVeloSale 500ms ease 30s forwards}
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))::after{content:"Estamos confirmando tu pedido";position:fixed;top:50%;left:50%;z-index:1201;box-sizing:border-box;width:calc(100vw - 32px);max-width:300px;height:204px;padding:44px 16px 0;border:1px solid var(--cp-border);border-radius:var(--cp-r-card);background:var(--cp-surface);box-shadow:0 18px 44px -14px rgba(0,0,0,.5);color:var(--cp-text-strong);font-size:16px;font-weight:700;line-height:1.35;letter-spacing:-.01em;text-align:center;transform:translate(-50%,-102px);animation:cpVeloEntra 260ms ease backwards,cpVeloSale 500ms ease 30s forwards}
/* La ayuda es GENERICA a proposito: el mismo modal sirve para transferencia, Mercado Pago o cualquier medio que se instale manana. */
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))>.ps-shown-by-js::before{content:"Unos segundos y te llevamos al pago o a la confirmaci\0000F3n.\00000ANo cierres ni recargues la p\0000E1gina.";position:fixed;top:50%;left:50%;z-index:1202;box-sizing:border-box;width:calc(100vw - 64px);max-width:268px;color:var(--cp-text);font-size:14px;font-weight:400;line-height:1.4;text-align:center;white-space:pre-line;transform:translate(-50%,2px);animation:cpVeloEntra 260ms ease backwards,cpVeloSale 500ms ease 30s forwards}
/* Los puntos son box-shadow de una caja transparente 70px a la IZQUIERDA de la fila: un box-shadow nunca se pinta bajo la caja de su propio elemento y con la caja centrada los puntos 2 y 3 salian mordidos (medido en captura). Sombras a +40/+60/+80/+100 = puntos en -30/-10/+10/+30. box-shadow interpola en todos los motores; un gradiente animado NO. Van en el envoltorio y no en el boton por el contexto de apilamiento de la opacidad. */
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))>.ps-shown-by-js::after{content:"";position:fixed;top:50%;left:50%;z-index:1203;width:12px;height:12px;margin-left:-76px;border-radius:50%;background:transparent;transform:translate(0,-82px);box-shadow:40px 0 0 3px rgba(251,209,22,1),60px 0 0 0 rgba(182,71,113,.55),80px 0 0 0 rgba(68,139,201,.55),100px 0 0 0 rgba(71,173,76,.55);animation:cpPuntos var(--cp-espera) ease-in-out infinite,cpVeloSale 500ms ease 30s forwards}
/* La linea de actividad anima background-position (interpola), nunca el gradiente. El pseudo del boton es usable porque en este estado el boton recupera opacity:1: la opacidad de .btn-primary.disabled (linea 14) crea contexto de apilamiento y hundiria cualquier pseudo suyo bajo el velo. */
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled])) button::before{content:"";position:fixed;top:50%;left:50%;z-index:1204;width:calc(100vw - 96px);max-width:252px;height:4px;border-radius:2px;transform:translate(-50%,70px);background-color:var(--cp-border);background-image:linear-gradient(var(--cp-primary),var(--cp-primary));background-repeat:no-repeat;background-size:40% 100%;background-position:-67% 0;animation:cpVeloEntra 260ms ease backwards,cpLinea 1.4s ease-in-out infinite,cpVeloSale 500ms ease 30s forwards}
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled])) button{opacity:1;cursor:progress;animation:cpBotonFin 1ms linear 30s forwards}
}
/* VISTAS GRANDES (>=768): tarjeta de 500px y 180 de alto, titulo 18px, ayuda 14px en dos lineas de 444px, y los offsets de la geometria de escritorio. Sin pildora la tarjeta encoge, asi que aqui solo viven el alto, el relleno superior y los cuatro desplazamientos: todo lo demas lo hereda de la regla base. */
@media (min-width:768px){
@supports selector(:has(*)){
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))::after{max-width:500px;height:180px;padding:46px 28px 0;font-size:18px;line-height:1.3;transform:translate(-50%,-90px)}
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))>.ps-shown-by-js::before{max-width:444px;line-height:1.5;transform:translate(-50%,-8px)}
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))>.ps-shown-by-js::after{transform:translate(0,-66px)}
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled])) button::before{max-width:420px;transform:translate(-50%,58px)}
}
}
@keyframes cpVeloEntra{from{opacity:0}}
/* SALVAGUARDA: a los 30 s todo se desvanece (visibility:hidden deja de recibir toques) y el boton vuelve a su cursor. Son 30 y no 20 porque en devel un pedido tardo 13,3 s. */
@keyframes cpVeloSale{to{opacity:0;visibility:hidden}}
@keyframes cpBotonFin{to{cursor:pointer}}
@keyframes cpLinea{from{background-position:-67% 0}to{background-position:167% 0}}
/* la cascada: cada punto crece 3px (12 -> 18) y sube a alfa 1 por turno; los otros tres esperan a alfa .55 sin perder su color. Sin calc(): el minificador del CCC borra los calc identicos repetidos en una declaracion. */
@keyframes cpPuntos{
0%,100%{box-shadow:40px 0 0 3px rgba(251,209,22,1),60px 0 0 0 rgba(182,71,113,.55),80px 0 0 0 rgba(68,139,201,.55),100px 0 0 0 rgba(71,173,76,.55)}
25%{box-shadow:40px 0 0 0 rgba(251,209,22,.55),60px 0 0 3px rgba(182,71,113,1),80px 0 0 0 rgba(68,139,201,.55),100px 0 0 0 rgba(71,173,76,.55)}
50%{box-shadow:40px 0 0 0 rgba(251,209,22,.55),60px 0 0 0 rgba(182,71,113,.55),80px 0 0 3px rgba(68,139,201,1),100px 0 0 0 rgba(71,173,76,.55)}
75%{box-shadow:40px 0 0 0 rgba(251,209,22,.55),60px 0 0 0 rgba(182,71,113,.55),80px 0 0 0 rgba(68,139,201,.55),100px 0 0 3px rgba(71,173,76,1)}
}
@keyframes cpPuntosSuave{
0%,100%{box-shadow:40px 0 0 0 rgba(251,209,22,1),60px 0 0 0 rgba(182,71,113,.15),80px 0 0 0 rgba(68,139,201,.15),100px 0 0 0 rgba(71,173,76,.15)}
25%{box-shadow:40px 0 0 0 rgba(251,209,22,.15),60px 0 0 0 rgba(182,71,113,1),80px 0 0 0 rgba(68,139,201,.15),100px 0 0 0 rgba(71,173,76,.15)}
50%{box-shadow:40px 0 0 0 rgba(251,209,22,.15),60px 0 0 0 rgba(182,71,113,.15),80px 0 0 0 rgba(68,139,201,1),100px 0 0 0 rgba(71,173,76,.15)}
75%{box-shadow:40px 0 0 0 rgba(251,209,22,.15),60px 0 0 0 rgba(182,71,113,.15),80px 0 0 0 rgba(68,139,201,.15),100px 0 0 0 rgba(71,173,76,1)}
}
/* REDUCED-MOTION: los puntos pasan a cpPuntosSuave (solo opacidad, 1,8 s, sin cambio de tamano -no hay movimiento, es luz que pasa de un punto a otro-) y velo, tarjeta y ayuda conservan el fundido de entrada de 200 ms para que el velo no llegue DESPUES que la tarjeta (hallazgo de la revision adversarial). */
/* v1.7.41 - bajo reduced-motion los puntos cambian solo de opacidad (cpPuntosSuave), pero la LINEA conserva su barrido de la regla base: el indicador de espera es contenido esencial y un desplazamiento de 4px de alto no es movimiento vestibular; congelarla hacia creer que el proceso murio (reporte del director, dos veces). */
@media (prefers-reduced-motion:reduce){
@supports selector(:has(*)){
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))>.ps-shown-by-js::after{animation:cpVeloEntra 200ms ease backwards,cpPuntosSuave 1.8s ease-in-out infinite,cpVeloSale 500ms ease 30s forwards}
body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))::after,body#checkout #checkout-payment-step:has(#conditions-to-approve input[type="checkbox"]:checked):has(input[name="payment-option"]:checked) #payment-confirmation:has(button.disabled:not([disabled]))>.ps-shown-by-js::before{animation:cpVeloEntra 200ms ease backwards,cpVeloSale 500ms ease 30s forwards}
}
}

/* ============================================================ */
/* AREA DE CUENTA - detalle de pedido y lista de pedidos (v1.7.49) */
/* ============================================================ */
/* ============ DETALLE DE PEDIDO - BASE (D2 aprobada + los 12 puntos) ============ */
/* v1.7.54 - GEMELAS PARA EL SEGUIMIENTO DE PEDIDO DE INVITADO. guest-tracking.tpl extiende order-detail.tpl y pinta la MISMA parcial (productos, estados, direcciones) con el body en page-guest-tracking, nunca en page-order-detail; la v1.7.53 solo gemelo las seis reglas del enlace del producto y las otras 223 eran codigo muerto en esa pagina (OBSERVADO en devel, 11-09-2026). Desde esta version TODA regla del detalle lleva su gemela .page-guest-tracking en la MISMA lista de selectores -mismo bloque, misma @media, ni una declaracion nueva-, salvo las de mensajes, formulario de mensaje y devoluciones, que en el invitado no tienen elemento. Las gemelas se generan con parser, no a mano, y un censo exige que no quede ninguna huerfana (los dos viven en el repo del proyecto, no aqui). */
/* -- titulos de seccion -- */
.page-order-detail #content .box > h3, .page-order-detail #content .box header h3, .page-guest-tracking #content .box > h3, .page-guest-tracking #content .box header h3{margin:0 0 14px;font-size:15px;font-weight:700;line-height:1.3;letter-spacing:.02em;color:var(--cp-text-heading);text-transform:uppercase}
/* -- cabecera del pedido -- */
.page-order-detail #order-infos .box:first-child, .page-guest-tracking #order-infos .box:first-child{padding:18px 20px}
.page-order-detail #order-infos .box:first-child .col-xs-9 > strong, .page-guest-tracking #order-infos .box:first-child .col-xs-9 > strong{display:block;font-size:19px;font-weight:700;line-height:1.35;color:var(--cp-text-heading)}
.page-order-detail #order-infos .box:first-child .row, .page-guest-tracking #order-infos .box:first-child .row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:0}
.page-order-detail #order-infos .box:first-child .col-xs-9, .page-guest-tracking #order-infos .box:first-child .col-xs-9{flex:1 1 auto;float:none;width:auto;min-width:0;padding:0}
.page-order-detail #order-infos .box:first-child .col-xs-3, .page-guest-tracking #order-infos .box:first-child .col-xs-3{flex:0 0 auto;float:none;width:auto;padding:0}
.page-order-detail #order-infos .box:first-child .clearfix, .page-guest-tracking #order-infos .box:first-child .clearfix{display:none}
/* -- el boton Comprar, el mismo de la lista de pedidos (DS 5.10) -- */
.page-order-detail #order-infos a.button-primary, .page-guest-tracking #order-infos a.button-primary{display:inline-flex;align-items:center;justify-content:center;gap:7px;box-sizing:border-box;min-height:34px;padding:0 14px;border:1px solid #BADCF3;border-radius:var(--cp-r-btn);background-color:#F1F7FB;color:var(--cp-link-hover);font-size:13px;font-weight:600;line-height:1.2;text-decoration:none;white-space:nowrap;transition:background-color var(--cp-t-fast),border-color var(--cp-t-fast)}
.page-order-detail #order-infos a.button-primary::before, .page-guest-tracking #order-infos a.button-primary::before{content:"";flex:0 0 auto;width:15px;height:15px;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23006BB3'><path d='M7 18c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM7.2 14.6l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49A.996.996 0 0020 4H5.21l-.94-2H1v2h2l3.6 7.59-1.35 2.44C4.52 15.37 5.48 17 7 17h12v-2H7.42c-.14 0-.25-.11-.22-.4z'/></svg>") no-repeat 50%/contain}
.page-order-detail #order-infos a.button-primary:hover, .page-guest-tracking #order-infos a.button-primary:hover{background-color:var(--cp-info-bg);border-color:var(--cp-link)}
.page-order-detail #order-infos a.button-primary:focus-visible, .page-guest-tracking #order-infos a.button-primary:focus-visible{border-color:var(--cp-link)}
@media (max-width:1024.98px){.page-order-detail #order-infos a.button-primary, .page-guest-tracking #order-infos a.button-primary{min-height:40px;padding:0 16px}}
@media (max-width:767.98px){.page-order-detail #order-infos .box:first-child .col-xs-9, .page-order-detail #order-infos .box:first-child .col-xs-3, .page-guest-tracking #order-infos .box:first-child .col-xs-9, .page-guest-tracking #order-infos .box:first-child .col-xs-3{flex:1 1 100%}}
@media (max-width:767.98px){.page-order-detail #order-infos a.button-primary, .page-guest-tracking #order-infos a.button-primary{display:flex;width:100%}}
/* -- datos del pedido -- */
.page-order-detail #order-infos .box + .box, .page-guest-tracking #order-infos .box + .box{padding:16px 20px}
.page-order-detail #order-infos .box + .box ul, .page-guest-tracking #order-infos .box + .box ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px 24px;margin:0;padding:0;list-style:none}
.page-order-detail #order-infos .box + .box li, .page-guest-tracking #order-infos .box + .box li{margin:0;font-size:15px;font-weight:600;line-height:1.35;color:var(--cp-text-strong)}
.page-order-detail #order-infos .box + .box li > strong, .page-guest-tracking #order-infos .box + .box li > strong{display:block;margin-bottom:3px;font-size:11px;font-weight:700;letter-spacing:.05em;line-height:1.2;color:var(--cp-text);text-transform:uppercase}
/* -- direcciones: dos fichas de la MISMA altura y con su chip -- */
@media (min-width:576px){.page-order-detail .addresses, .page-guest-tracking .addresses{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:0 0 16px}}
@media (min-width:576px){.page-order-detail .addresses > div, .page-guest-tracking .addresses > div{float:none;width:auto;padding:0}}
@media (min-width:576px){.page-order-detail .addresses > .clearfix, .page-guest-tracking .addresses > .clearfix{display:none}}
@media (min-width:576px){.page-order-detail .addresses article, .page-guest-tracking .addresses article{height:100%}}
@media (max-width:575.98px){.page-order-detail .addresses, .page-guest-tracking .addresses{margin:0 0 16px}}
@media (max-width:575.98px){.page-order-detail .addresses > div, .page-guest-tracking .addresses > div{float:none;width:auto;padding:0}}
@media (max-width:575.98px){.page-order-detail .addresses > div + div, .page-guest-tracking .addresses > div + div{margin-top:16px}}
.page-order-detail .addresses article, .page-guest-tracking .addresses article{position:relative}
.page-order-detail .addresses article::before, .page-guest-tracking .addresses article::before{position:absolute;top:14px;right:14px;padding:2px 10px;border-radius:var(--cp-r-pill);background-color:var(--cp-surface);font-size:11px;font-weight:700;line-height:1.6;letter-spacing:.4px;text-transform:uppercase}
.page-order-detail #delivery-address::before, .page-guest-tracking #delivery-address::before{content:"Entrega";color:var(--cp-success-on-bg);border:1px solid var(--cp-primary)}
.page-order-detail #invoice-address::before, .page-guest-tracking #invoice-address::before{content:"Facturaci\0000F3n";color:var(--cp-info-text);border:1px solid var(--cp-link)}
.page-order-detail .addresses h4, .page-guest-tracking .addresses h4{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:0 92px 10px 0;border-bottom:1px solid var(--cp-border);font-size:14px;font-weight:700;line-height:1.35;color:var(--cp-text-heading)}
.page-order-detail .addresses h4::before, .page-guest-tracking .addresses h4::before{content:"";flex:0 0 auto;width:16px;height:16px}
.page-order-detail #delivery-address h4::before, .page-guest-tracking #delivery-address h4::before{background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23404040'><path d='M12 2a7 7 0 00-7 7c0 5.25 7 13 7 13s7-7.75 7-13a7 7 0 00-7-7zm0 9.5A2.5 2.5 0 1112 6.5a2.5 2.5 0 010 5z'/></svg>") no-repeat 50%/contain}
.page-order-detail #invoice-address h4::before, .page-guest-tracking #invoice-address h4::before{background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23404040'><path d='M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6zm1 16H9v-2h6v2zm0-4H9v-2h6v2zm-2-5V3.5L18.5 9H13z'/></svg>") no-repeat 50%/contain}
.page-order-detail .addresses address, .page-guest-tracking .addresses address{margin:0;font-size:14px;font-style:normal;line-height:1.75;color:var(--cp-text)}
/* -- productos: el nombre en azul con el icono de enlace, igual que en el carrito -- */
.page-order-detail #order-products tbody td, .page-guest-tracking #order-products tbody td{padding:14px 12px;font-size:14px;line-height:1.5;vertical-align:top}
.page-order-detail #order-products tbody td > strong, .page-guest-tracking #order-products tbody td > strong{font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--cp-text);text-transform:uppercase}
.page-order-detail #order-products tbody td > strong:first-child, .page-guest-tracking #order-products tbody td > strong:first-child{font-size:15px;letter-spacing:0;text-transform:none}
.page-order-detail #order-products tbody td:nth-child(2), .page-order-detail #order-products tbody td:nth-child(3), .page-guest-tracking #order-products tbody td:nth-child(2), .page-guest-tracking #order-products tbody td:nth-child(3){color:var(--cp-text)}
.page-order-detail #order-products tbody td:nth-child(4), .page-guest-tracking #order-products tbody td:nth-child(4){font-weight:600;color:var(--cp-text-strong)}
/* v1.7.51 - PUNTO 2 del director: en la tarjeta del core el nombre del producto NO es enlace. No es que lo pierda: el core nunca lo pone. Verificado en themes/classic/templates/customer/_partials/order-detail-no-return.tpl, donde la rama de la TABLA emite <strong><a href="{$urls.pages.product}&id_product={$product.id_product}"> (linea 40) y la rama de TARJETAS emite <div class="name">{$product.name}</div> a secas (linea 130). Desde CSS no se puede crear un enlace, asi que esto NO se arregla aqui: hay que copiar ese partial al tema hijo -no vale la herencia, porque el unico {block} del partial no envuelve esa parte- y anadir el <a>. Lo que si se hace es dejar el selector CORRECTO: apuntaba a strong:first-child a, que no casaria ni con el arreglo, y pasa a .name a. Desde la v1.7.52 ese enlace SI EXISTE: la plantilla del tema hijo envuelve el nombre de la tarjeta en el mismo <a> que ya tenia la tabla, y las dos ramas llevan target="_blank" rel="noopener". La regla deja de ser preventiva y pasa a estar viva. */
.page-order-detail #order-products tbody td > strong:first-child a, .page-order-detail .order-items .order-item .name a, .page-guest-tracking #order-products tbody td > strong:first-child a, .page-guest-tracking .order-items .order-item .name a{font-size:15px;font-weight:700;line-height:1.3;text-transform:none;text-decoration:none;color:var(--cp-link-hover)}
/* v1.7.52 - ACCESIBILIDAD, levantado por la revision y RE-VERIFICADO calculando: el nombre iba en --cp-link #007ACC, que sobre blanco da 4,51 pero sobre la fila REALZADA -#ECEEF1, que pinta la regla base al pasar el raton- cae a 3,88, y a 15px/700 eso no es texto grande para la norma, asi que no cumple AA. Pasa a --cp-link-hover #006BB3: 5,59 sobre blanco y 4,81 sobre el realce. Es el mismo movimiento que el proyecto ya hizo tres veces por este mismo numero (v1.7.4, v1.7.13, v1.7.44) y lo que el DS 2.3 fija como text.link.hover. Con el reposo ya en ese color, el hover se distingue por el SUBRAYADO y deja de repetir el color. */
.page-order-detail #order-products tbody td > strong:first-child a:hover, .page-order-detail .order-items .order-item .name a:hover, .page-guest-tracking #order-products tbody td > strong:first-child a:hover, .page-guest-tracking .order-items .order-item .name a:hover{text-decoration:underline}
.page-order-detail #order-products tbody td > strong:first-child a::after, .page-order-detail .order-items .order-item .name a::after, .page-guest-tracking #order-products tbody td > strong:first-child a::after, .page-guest-tracking .order-items .order-item .name a::after{content:"";display:inline-block;width:.72em;height:.72em;margin-left:.35em;vertical-align:-1px;background-color:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M15 3h6v6'/><path d='M10 14L21 3'/><path d='M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M15 3h6v6'/><path d='M10 14L21 3'/><path d='M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5'/></svg>") center/contain no-repeat}
/* v1.7.52 - el icono iba a opacity:.7, que sobre currentColor da 2,80 sobre blanco y 2,55 sobre la fila realzada: por debajo del 3:1 que la 1.4.11 exige a un objeto grafico necesario para entender el contenido, y este lo es -el DS 13.4 dice que el icono solo se pinta si el enlace abre pestana nueva, o sea que SIGNIFICA algo-. A alfa 1 da 4,51 y 3,88. Ademas el MISMO icono del carrito nunca llevo opacidad (a.dp_url::before), asi que era una incongruencia dentro del propio archivo. Retirada la opacidad, la regla de hover que la subia a 1 sobra. */
/* En el alto contraste de Windows el motor fuerza background-color, y un icono dibujado con background-color mas mask se pinta del color del FONDO: desaparece. El archivo no tenia ninguna @media (forced-colors:active). LinkText es el color de enlace del sistema. */
@media (forced-colors:active){.page-order-detail #order-products tbody td > strong:first-child a::after, .page-order-detail .order-items .order-item .name a::after, .page-guest-tracking #order-products tbody td > strong:first-child a::after, .page-guest-tracking .order-items .order-item .name a::after{background-color:LinkText}}
/* v1.7.52 - El icono de pestana nueva NO llega al lector de pantalla: es content:"" con mask, y un pseudo-elemento con cadena vacia no entra en el arbol de accesibilidad. Quien no ve la pantalla no recibe ningun aviso de que el enlace abre una ventana nueva -WCAG 3.2.5, tecnicas G201 y H83-. Las plantillas del tema hijo anaden por eso un <span class="cp-sr"> con el texto, y esta es su utilidad. Clase PROPIA y acotada a proposito: .sr-only existe en el theme.css del core pero NO esta verificado que sobreviva en el compilado de classicchildtheme, y de esto no conviene depender a medias. */
.page-order-detail .cp-sr, .page-guest-tracking .cp-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}
/* -- personalizacion: la misma ficha del carrito -- */
/* v1.7.51 - PUNTO 3 del director: el contenedor gris se AJUSTA A SU CONTENIDO en todas las vistas, en vez de ocupar el ancho entero. El fondo lo pinta .dp_cart y no .customization -medido: .customization computa background transparente y padding 0-. MEDIDO antes: 221/291/174/208/244 en la tarjeta y 764/855/497/644/745 en la tabla, o sea SIEMPRE el ancho completo. Despues: 234px con el contenido real de este pedido, y 70px con un campo corto. El max-width:100% es la red para el contenido largo: con un comentario de 250 caracteres o un nombre de archivo de 74 sin espacios vuelve al 100% y desborda 0. Y comprobado que NO altera el reparto de la tabla: con ese mismo contenido largo, el ancho de la tabla y de sus cuatro celdas es identico con y sin la regla en 1024, 1280 y 1512. Acotado a .page-order-detail: .dp_cart es de DynamicProduct y vive tambien en el carrito, donde este archivo tiene 33 reglas propias que no se tocan. */
/* v1.7.52 - PUNTO 2 del director, APROBADO desde la preview: la personalizacion del detalle adopta el MISMO lenguaje que la del carrito -filete verde de marca y rotulo PERSONALIZACION-, pero SIN el enlace de editar (ahi no existe: el pedido ya esta hecho) y con los atributos en LISTA, no en las dos columnas del carrito. Los valores son los mismos que la ficha del carrito declara en la seccion CARRITO de este archivo: relleno 9px 12px 9px 13px, radio --cp-r-card y filete de 3px. El escape del rotulo va con sus SEIS digitos: "\0000F3" es la o acentuada, y escrito de menos produce un NUL seguido de texto literal -asi salio "PERSONALIZACI(NUL)0F3N" en la preview de esta misma ronda-. */
.page-order-detail .customization .dp_cart, .page-guest-tracking .customization .dp_cart{margin:10px 0 0;padding:9px 12px 9px 13px;border:1px solid var(--cp-border);border-left:3px solid var(--cp-primary);border-radius:var(--cp-r-card);background-color:var(--cp-surface-sunken);width:-moz-fit-content;width:fit-content;max-width:100%}
.page-order-detail .customization .dp_cart::before, .page-guest-tracking .customization .dp_cart::before{content:"Personalizaci\0000F3n";display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--cp-text);margin-bottom:5px}
/* v1.7.52 - PUNTO 3 del director: el nombre del producto abre en PESTANA NUEVA, y eso lo pone la PLANTILLA, no este archivo: el tema hijo anade target="_blank" rel="noopener" al enlace de la tabla y envuelve en ese mismo enlace el nombre de la tarjeta, que el core emite como texto plano (order-detail-no-return.tpl:129). Con eso el icono de enlace externo que el archivo ya dibujaba deja de ser una afordancia falsa -la v1.7.51 lo documentaba como tal- y pasa a decir la verdad. Estas dos reglas dan la jerarquia base del nombre en la tarjeta; el color de enlace lo pone la regla de .name a, que ya existia preparada desde la v1.7.51. */
.page-order-detail .order-items .order-item .desc .name, .page-guest-tracking .order-items .order-item .desc .name{font-size:15px;font-weight:700;line-height:1.3;color:var(--cp-text-heading)}
/* v1.7.52 - OBJETIVO TACTIL. Con 15px y line-height 1.3 la caja del enlace mide 19,5px de alto: menos de la mitad de los 40 que fija el DS 1-4 y por debajo de los 24 de la 2.5.8. En la TABLA la excepcion "inline" de esa norma es defendible -el enlace vive en un flujo de texto, con la referencia debajo-, pero en la TARJETA el div contiene SOLO el enlace, asi que no hay texto que limite la altura y la excepcion no aplica. El relleno vertical lo sube a 31,5px, que cumple 2.5.8; llegar a los 40 del DS costaria 20px por producto y queda anotado como pendiente. */
@media (max-width:991.98px){.page-order-detail .order-items .order-item .desc .name a, .page-guest-tracking .order-items .order-item .desc .name a{display:inline-block;padding:6px 0}}
.page-order-detail .order-items .order-item .desc .ref strong, .page-guest-tracking .order-items .order-item .desc .ref strong{font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--cp-text);text-transform:uppercase}
/* -- LISTA y no dos columnas: es la diferencia que pidio el director frente al carrito, donde .dp_input_div es flex con wrap. Aqui se declara display:block EXPRESAMENTE para no depender de que ningun otro bloque lo deje asi. -- */
.page-order-detail .customization .dp_input_div, .page-guest-tracking .customization .dp_input_div{display:block;padding:0}
/* -- SIN RECORTE, y es a proposito: en el carrito el clamp a dos lineas convive con el enlace "Edite esta personalizacion", que deja leer el texto entero; en el detalle de un pedido ya hecho ese enlace NO EXISTE -medido: 0 enlaces visibles- y lo recortado queda INALCANZABLE. MEDIDO con un comentario real de dos frases: 144px de texto ocultos a 390. El cliente tiene que poder releer las instrucciones que el mismo escribio. -- */
.page-order-detail .customization span[class*="dp-input-field-"], .page-guest-tracking .customization span[class*="dp-input-field-"]{display:block;margin:0 0 4px;font-size:12px;line-height:1.5;color:var(--cp-text);overflow-wrap:break-word;overflow-wrap:anywhere}
.page-order-detail .customization span[class*="dp-input-field-"] strong, .page-guest-tracking .customization span[class*="dp-input-field-"] strong{font-size:12px;font-weight:700;letter-spacing:0;color:var(--cp-text-heading);text-transform:none}
.page-order-detail .customization span.dp-input-field-preview, .page-guest-tracking .customization span.dp-input-field-preview{display:none}
/* v1.7.54 - SOLO EN EL SEGUIMIENTO DE INVITADO: el modulo de personalizacion no reconoce esa pagina como un pedido ya hecho y pinta la personalizacion como en el carrito, con el enlace "Edite esta personalizacion" -envuelto en el unico <div> hijo de .dp_input_div y precedido de un <br> suelto, que es siempre el ULTIMO <br> hijo- y el campo de vista previa. Un pedido hecho no se edita: el enlace, su <div> y ese <br> se ocultan; la vista previa la oculta la gemela de la regla anterior. El detalle no necesita nada de esto: ahi el modulo no emite el enlace (medido, 0). */
.page-guest-tracking .customization .dp_cart .dp_input_div > div, .page-guest-tracking .customization .dp_cart .dp_input_div > br:last-of-type, .page-guest-tracking .customization .dp_cart a.dp_url{display:none}
.page-order-detail .customization .field-br, .page-guest-tracking .customization .field-br{display:none}
/* -- PUNTO 7: en tablet la tabla de productos pasa a tarjeta para que la personalizacion tenga el ancho completo. La variante con devoluciones (.return) se deja intacta -- */
@media (max-width:991.98px){.page-order-detail #order-products:not(.return), .page-order-detail #order-products:not(.return) tbody, .page-order-detail #order-products:not(.return) tbody tr, .page-guest-tracking #order-products:not(.return), .page-guest-tracking #order-products:not(.return) tbody, .page-guest-tracking #order-products:not(.return) tbody tr{display:block;width:auto}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) thead, .page-guest-tracking #order-products:not(.return) thead{display:none}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tbody tr, .page-guest-tracking #order-products:not(.return) tbody tr{padding:14px 0}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tbody td, .page-guest-tracking #order-products:not(.return) tbody td{display:block;width:auto;padding:0;border:0}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tbody td + td, .page-guest-tracking #order-products:not(.return) tbody td + td{margin-top:8px;font-size:14px}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tbody td:nth-child(2)::before, .page-guest-tracking #order-products:not(.return) tbody td:nth-child(2)::before{content:"Cantidad: ";font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--cp-text);text-transform:uppercase}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tbody td:nth-child(3)::before, .page-guest-tracking #order-products:not(.return) tbody td:nth-child(3)::before{content:"Precio unitario: ";font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--cp-text);text-transform:uppercase}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tbody td:nth-child(4)::before, .page-guest-tracking #order-products:not(.return) tbody td:nth-child(4)::before{content:"Precio total: ";font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--cp-text);text-transform:uppercase}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tfoot, .page-guest-tracking #order-products:not(.return) tfoot{display:block;margin-top:10px;border-top:1px solid var(--cp-border)}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tfoot tr, .page-guest-tracking #order-products:not(.return) tfoot tr{display:flex;justify-content:space-between;gap:16px}}
@media (max-width:991.98px){.page-order-detail #order-products:not(.return) tfoot td, .page-guest-tracking #order-products:not(.return) tfoot td{display:block;border:0}}
/* -- LOS FILETES PARTIDOS DE LOS TOTALES, visto MIRANDO la captura y no midiendo: apilada, la fila de totales es flex y cada celda se encoge a su contenido, asi que el filete -que lo pinta la CELDA- sale en dos trozos con 375px de hueco en medio (MEDIDO a 768: la etiqueta acaba en 213,5 y el importe arranca en 588,7). Y el border:0 que este bloque ya traia era CODIGO MUERTO: la regla base del archivo, body:not([class*="ce-theme"]) #content table.table td, pesa (1,2,3) y el selector de aqui (1,2,2) pierde por UN ELEMENTO. Se apaga con dos ids y el filete pasa a la FILA, que si ocupa el ancho completo. Es defecto de la conversion a tarjetas, no de produccion: alli la tabla sigue siendo tabla y las celdas van pegadas. -- */
/* -- PUNTO 2 de la ronda 7: el relleno horizontal vuelve a 8px. Se habia puesto a 0 para que la ficha de personalizacion ocupara el ancho completo, y con eso quedaba a 2px del canto de la banda de realce -MEDIDO: la ficha del producto a 18px del borde de la caja, que pone 16-. Con 8 hay respiro por los dos lados y la personalizacion pierde 16px de ancho, que es el precio que el director acepto. -- */
@media (max-width:991.98px){body.page-order-detail #content #order-products:not(.return) tbody td, body.page-order-detail #content #order-products:not(.return) tfoot td, body.page-guest-tracking #content #order-products:not(.return) tbody td, body.page-guest-tracking #content #order-products:not(.return) tfoot td{border:0;padding-left:8px;padding-right:8px}}
@media (max-width:991.98px){body.page-order-detail #content #order-products:not(.return) tbody tr + tr, body.page-guest-tracking #content #order-products:not(.return) tbody tr + tr{border-top:1px solid var(--cp-border)}}
@media (max-width:991.98px){body.page-order-detail #content #order-products:not(.return) tfoot tr, body.page-guest-tracking #content #order-products:not(.return) tfoot tr{border-bottom:1px solid var(--cp-border)}}
@media (max-width:991.98px){body.page-order-detail #content #order-products:not(.return) tfoot tr:last-child, body.page-guest-tracking #content #order-products:not(.return) tfoot tr:last-child{border-bottom:0;border-top:1px solid var(--cp-border-strong)}}
/* -- PUNTO 1 de la ronda 6: apilada, la ficha del producto se realza como UN SOLO BLOQUE. El realce lo pinta la CELDA -la regla base es body:not([class*="ce-theme"]) #content table.table tbody tr:hover td-, asi que en cuanto las celdas pasan a display:block cada una pinta su propia banda: MEDIDO a 768, cuatro franjas grises separadas por huecos de 8px, que se leen como si se realzara el resumen de totales del producto y no el producto. Se pinta la FILA, que ahi ya es un bloque, y se apagan las celdas. -- */
@media (max-width:991.98px){body.page-order-detail #content #order-products:not(.return) tbody tr:hover, body.page-guest-tracking #content #order-products:not(.return) tbody tr:hover{background-color:var(--cp-surface-hover)}}
@media (max-width:991.98px){body.page-order-detail #content #order-products:not(.return) tbody tr:hover td, body.page-guest-tracking #content #order-products:not(.return) tbody tr:hover td{background-color:transparent}}
/* -- PUNTO 7 en movil: el relleno de la ficha de productos lo lleva cada .order-item, no la caja: el theme.css del core declara .page-order-detail .order-items{padding:0!important} y una regla nuestra lo anulaba tambien en el hijo, dejando el contenido pegado al canto. -- */
@media (max-width:767.98px){.page-order-detail .order-items .order-item > .row, .page-guest-tracking .order-items .order-item > .row{margin:0}}
/* v1.7.52 - PUNTO 1 del director: "en alguna vistas se sigue cortando el texto dentro de la customizacion". CAUSA MEDIDA, y era codigo muerto propio: estas tres reglas apuntaban a .col-xs-9 y .col-xs-3, y el core emite .col-sm-5.desc y .col-sm-7.qty (order-detail-no-return.tpl:128 y :146), asi que NUNCA se aplicaron. Sin ellas, de 576px en adelante Bootstrap le da a la descripcion 5/12 del contenedor y la ficha de personalizacion se estruja. MEDIDO con el control 18 y la tipografia REAL: padre 197,5px, bloque 167,5px y "Tecnica: Logo DTF Textil Full Color [TD01]" partido en DOS lineas a 600, 680 y 768. Por debajo de 576 no ocurria porque ahi col-sm-* no aplica y la columna ya va a ancho completo: por eso el defecto solo salia "en algunas vistas". El corte sube a 991.98 para cubrir todo el rango en el que la tarjeta puede verse. Y el combinador del primer tramo NO puede ser directo: en order-detail-return.tpl la tarjeta mete un .checkbox y un .content entre el .order-item y el .row (lineas 145 y 154), asi que un "> .row" casa en el partial normal y NO en el de devoluciones. Lo levanto la revision adversarial y se confirmo leyendo las dos plantillas. */
@media (max-width:991.98px){.page-order-detail .order-items .order-item .row > .col-sm-5.desc, .page-guest-tracking .order-items .order-item .row > .col-sm-5.desc{float:none;width:100%;padding:0}}
@media (max-width:991.98px){.page-order-detail .order-items .order-item .row > .col-sm-7.qty, .page-guest-tracking .order-items .order-item .row > .col-sm-7.qty{float:none;width:100%;padding:8px 0 0}}
/* v1.7.52 - LOS TRES IMPORTES DE LA TARJETA, SIN ROTULO. No estaba en el encargo y no se vio midiendo: salto MIRANDO la captura, que es la regla 12 de verificacion de la guia. El core emite los tres en columnas iguales y sin nada que los identifique, asi que se leen "$ 15.802 / 20 / $ 316.047" y no se sabe cual es cual. Es ademas una incoherencia que el DS 13 prohibe expresamente: el MISMO dato lleva rotulo en el tramo 768-991 -donde la tabla se apila y este archivo pinta CANTIDAD:, PRECIO UNITARIO: y PRECIO TOTAL:- y no lo lleva en la tarjeta del core. Venia de antes, pero el ancho completo que acaba de ganar la fila lo deja mas a la vista, y con el punto 4 corregido el tercer numero ya no coincide con el primero. El rotulo va ENCIMA para no robar ancho al importe, y hereda el text-align de su columna, asi que cada uno queda sobre su cifra. */
/* El min-height reserva DOS lineas de rotulo en los tres, y no es adorno: "PRECIO UNITARIO" no cabe en una columna de un tercio a 390px y envolvia, con lo que su importe caia una linea por debajo de los otros dos. Se vio en la captura, no en la medicion. Reservando el alto, los tres valores arrancan a la misma altura aunque el rotulo ocupe una linea o dos. */
@media (max-width:991.98px){.page-order-detail .order-items .order-item .qty > .row > div::before, .page-guest-tracking .order-items .order-item .qty > .row > div::before{display:block;min-height:2.6em;margin-bottom:2px;font-size:10px;font-weight:700;letter-spacing:.05em;line-height:1.3;color:var(--cp-text);text-transform:uppercase}}
@media (max-width:991.98px){.page-order-detail .order-items .order-item .qty > .row > div:nth-child(1)::before, .page-guest-tracking .order-items .order-item .qty > .row > div:nth-child(1)::before{content:"Precio unitario"}}
@media (max-width:991.98px){.page-order-detail .order-items .order-item .qty > .row > div:nth-child(2)::before, .page-guest-tracking .order-items .order-item .qty > .row > div:nth-child(2)::before{content:"Cantidad"}}
@media (max-width:991.98px){.page-order-detail .order-items .order-item .qty > .row > div:nth-child(3)::before, .page-guest-tracking .order-items .order-item .qty > .row > div:nth-child(3)::before{content:"Precio total"}}
/* v1.7.53 - DS 13.1: el importe total tenia jerarquia en la TABLA -600 y --cp-text-strong, por la regla de td:nth-child(4)- y la PERDIA en la TARJETA, donde los tres importes computaban 14px/400 en --cp-text. Es el mismo dato en dos variantes de la misma pagina, y la tarjeta es la vista del telefono. La alineacion NO se toca: dentro de la tarjeta los tres van a la izquierda bajo su rotulo, que es el diseno aprobado en la v1.7.52. */
@media (max-width:991.98px){.page-order-detail .order-items .order-item .qty > .row > div:nth-child(3), .page-guest-tracking .order-items .order-item .qty > .row > div:nth-child(3){font-weight:600;color:var(--cp-text-strong)}}
/* -- totales -- */
.page-order-detail #order-products tfoot td, .page-guest-tracking #order-products tfoot td{padding:9px 12px;font-size:14px;color:var(--cp-text)}
.page-order-detail #order-products tfoot tr:last-child td, .page-guest-tracking #order-products tfoot tr:last-child td{padding:13px 12px;border-top:1px solid var(--cp-border-strong);font-size:17px;font-weight:700;color:var(--cp-text-strong)}
.page-order-detail #order-products tfoot tr:last-child td:last-child, .page-order-detail .order-totals .order-total:last-child .text-xs-right, .page-guest-tracking #order-products tfoot tr:last-child td:last-child, .page-guest-tracking .order-totals .order-total:last-child .text-xs-right{white-space:nowrap}
/* v1.7.52 - PUNTO 6 del director: el chip "+ IVA" se RETIRA. Deja de tener sentido porque las plantillas del tema hijo que acompanan a esta version cambian la ultima fila de $order.totals.total -que con PS_TAX_DISPLAY=0 trae el NETO- por $order.totals.total_including_tax, que el core YA calcula (OrderLazyArray::getAmounts, la clave total_including_tax = $order->total_paid_tax_incl). Con la cifra ya con impuesto incluido, el sufijo mentiria. El white-space:nowrap de la linea de arriba SE QUEDA: un importe no debe partirse aunque no lleve chip. OJO AL DESPLEGAR: si se sube este CSS sin las plantillas, la ultima fila seguira mostrando el neto y ya sin la marca que lo advertia. Van juntos. */
.page-order-detail .order-totals .order-total, .page-guest-tracking .order-totals .order-total{display:flex;align-items:baseline;gap:10px;margin:0;padding:7px 0;font-size:14px;color:var(--cp-text)}
.page-order-detail .order-totals .order-total > div, .page-guest-tracking .order-totals .order-total > div{float:none;width:auto;padding:0}
/* -- el rotulo cede y el importe manda: con las columnas 8/4 de Bootstrap el valor del Subtotal, que lleva el chip + IVA y no puede envolver, se salia de la ficha (62px a 320, 38 a 390). -- */
.page-order-detail .order-totals .order-total > div:first-child, .page-guest-tracking .order-totals .order-total > div:first-child{flex:1 1 auto;min-width:0}
.page-order-detail .order-totals .order-total > div + div, .page-guest-tracking .order-totals .order-total > div + div{flex:0 0 auto}
.page-order-detail .order-totals .order-total:last-child, .page-guest-tracking .order-totals .order-total:last-child{margin-top:6px;padding-top:12px;border-top:1px solid var(--cp-border-strong);font-size:16px;font-weight:700;color:var(--cp-text-strong)}
/* -- productos en movil -- */
.page-order-detail .order-items .order-item, .page-guest-tracking .order-items .order-item{padding:14px 16px;font-size:14px}
.page-order-detail .order-items .order-item + .order-item, .page-guest-tracking .order-items .order-item + .order-item{margin-top:14px;padding-top:14px;border-top:1px solid var(--cp-border)}
/* -- PUNTO 2: la linea de tiempo del pedido no es una tabla accionable, asi que el realce de fila al pasar el raton solo era ruido. Lo pintaba una regla NUESTRA, generica para las tablas de cuenta (body:not([class*="ce-theme"]) #content table.table tbody tr:hover td, especificidad 1,3,5): en la version definitiva se le anade :not(#order-history) EN ORIGEN; aqui se neutraliza con la clase de pagina para que la preview muestre el resultado final. -- */
body.page-order-detail #order-history table.table tbody tr:hover td, body.page-guest-tracking #order-history table.table tbody tr:hover td{background-color:transparent}
body.page-order-detail #order-history .history-lines .history-line:hover, body.page-guest-tracking #order-history .history-lines .history-line:hover{background-color:transparent}
/* -- transportista -- */
/* -- el :not(.table-labeled) no es adorno: sin el, esta regla del transportista alcanza tambien a la linea de tiempo -esa tabla es table-striped y vive en un .box- y le gana al padding:0 de los hitos por una clase. MEDIDO a 900: 12px de relleno, la columna de la fecha con 80px utiles de 104, ESTADO ACTUAL partido en dos lineas y la primera fila a 79px contra 61,5. -- */
.page-order-detail #content .box table.table-striped:not(.table-labeled) tbody td, .page-guest-tracking #content .box table.table-striped:not(.table-labeled) tbody td{padding:11px 12px;font-size:14px;color:var(--cp-text)}
.page-order-detail .shipping-line > ul, .page-guest-tracking .shipping-line > ul{margin:0;padding:0;list-style:none}
.page-order-detail .shipping-line > ul > li, .page-guest-tracking .shipping-line > ul > li{display:flex;justify-content:space-between;gap:16px;padding:8px 0;border-bottom:1px solid var(--cp-border);font-size:14px;color:var(--cp-text-strong)}
.page-order-detail .shipping-line > ul > li:last-child, .page-guest-tracking .shipping-line > ul > li:last-child{border-bottom:0}
.page-order-detail .shipping-line > ul > li > strong, .page-guest-tracking .shipping-line > ul > li > strong{flex:0 0 auto;font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--cp-text);text-transform:uppercase}
/* -- PUNTO 10: el hilo de mensajes. La plantilla del tema hijo ya emite cp-msg-tienda y cp-msg-cliente (verificado en vivo en devel), asi que el CSS SI puede distinguirlos -- */
.page-order-detail .messages .message{position:relative;display:grid;grid-template-columns:1fr;gap:6px;margin:0 0 12px;padding:32px 16px 14px;border:1px solid var(--cp-border);border-radius:var(--cp-r-input);background-color:var(--cp-surface-sunken)}
/* -- el borde inferior se repone AQUI y no en la regla de arriba: el theme.css del core trae .page-order-detail .messages .message:last-child{border-bottom:0} con (0,4,0), y una regla de (0,3,0) no le gana. MEDIDO en los tres mensajes: 1px / 1px / 0px, con el ultimo -el del ejecutivo, con fondo azul- abierto por abajo. -- */
.page-order-detail .messages .message:last-child{margin-bottom:0;border-bottom:1px solid var(--cp-border)}
.page-order-detail .messages .message > div{float:none;width:auto;padding:0}
.page-order-detail .messages .message .col-sm-4{font-size:11px;font-weight:700;letter-spacing:.04em;line-height:1.5;color:var(--cp-text);text-transform:uppercase}
.page-order-detail .messages .message .col-sm-8{font-size:14px;line-height:1.65;color:var(--cp-text-heading)}
.page-order-detail .messages .message::after{position:absolute;top:12px;right:14px;padding:2px 10px;border-radius:var(--cp-r-pill);background-color:var(--cp-surface);font-size:11px;font-weight:700;line-height:1.6;letter-spacing:.4px;text-transform:uppercase}
.page-order-detail .messages .cp-msg-tienda{border-left:3px solid var(--cp-link);background-color:var(--cp-info-bg)}
.page-order-detail .messages .cp-msg-tienda::after{content:"ChilePromo";color:var(--cp-info-text);border:1px solid var(--cp-link)}
.page-order-detail .messages .cp-msg-cliente{border-left:3px solid var(--cp-border-strong)}
.page-order-detail .messages .cp-msg-cliente::after{content:"T\0000FA";color:var(--cp-text);border:1px solid var(--cp-border-strong)}
/* -- formulario de mensaje -- */
.page-order-detail .order-message-form header p{margin:0 0 16px;font-size:14px;line-height:1.6;color:var(--cp-text)}
.page-order-detail .order-message-form .form-group.row{margin-left:0;margin-right:0}
.page-order-detail .order-message-form .form-group.row > div, .page-order-detail .order-message-form .form-control-label{padding-left:0;padding-right:0}
/* -- PUNTO 3 de la ronda 7: el rotulo del desplegable pasa a chip de dato (DS 5.7) y, en vistas reducidas, se coloca ENCIMA del campo con 8px de aire. El :not(:empty) no es adorno: el core emite un segundo label VACIO para la fila del textarea -order-messages.tpl:68, sin espacios dentro- y sin el saldria una pastilla vacia. El ancho va a fit-content porque el label es .col-md-3 y, como item flex, un inline-block se blockifica y se quedaria con el 25% de la fila. -- */
.page-order-detail .order-message-form .form-control-label:not(:empty){display:block;width:-moz-fit-content;width:fit-content;padding:3px 11px;border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-pill);background-color:var(--cp-surface);font-size:11px;font-weight:700;letter-spacing:.05em;line-height:1.5;color:var(--cp-text);text-transform:uppercase}
/* -- El formulario va apilado en TODAS las vistas, no solo hasta 1024,98. MEDIDO de 1025 en adelante con el chip al lado: el desplegable arrancaba en x=91,2 -justo detras del chip- y el area de texto en x=206, porque el <label> VACIO que el core emite para la segunda fila (order-messages.tpl:68) conserva su 25% de columna. Desalineados 114,8px de 1025 a 1100 y 159,8 de 1280 en adelante, y con anchos distintos (343 contra 618). Apilado, los dos campos comparten borde izquierdo y ancho. -- */
.page-order-detail .order-message-form .form-group.row{display:block}
/* -- el float:none no es adorno: las .col-md-* de Bootstrap FLOTAN, y con la fila en display:block seguian una al lado de la otra -el rotulo NO quedaba encima- y ademas un hijo flotado con width:auto se encoge a su contenido, con lo que el textarea caia a 174px de los 584 disponibles. MEDIDO a 768, 900 y 1024. -- */
.page-order-detail .order-message-form .form-group.row > *{flex:none;max-width:none;width:100%;float:none}
.page-order-detail .order-message-form .form-control-label:not(:empty){margin:0 0 10px;width:-moz-fit-content;width:fit-content}
/* -- el rotulo VACIO de la segunda fila deja de ocupar: es el que desalineaba el area de texto, y ademas metia 8px de aire fantasma encima de ella. Se apaga por :empty, que aqui SI casa -el core lo emite sin un solo espacio dentro-. -- */
.page-order-detail .order-message-form .form-control-label:empty{display:none}
.page-order-detail .order-message-form .form-control{border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-input);font-size:14px;color:var(--cp-text-strong);transition:border-color var(--cp-t-fast),box-shadow var(--cp-t-fast)}
.page-order-detail .order-message-form .form-control:focus{border-color:var(--cp-link);box-shadow:var(--cp-focus-ring);background-color:var(--cp-surface)}
.page-order-detail .order-message-form textarea.form-control{min-height:104px;line-height:1.6}
.page-order-detail .order-message-form .form-footer button{display:block;margin:4px 0 0 auto}
@media (max-width:767.98px){.page-order-detail .order-message-form .form-footer button{width:100%}}
/* ============ D2 - SEGUIMIENTO ============ */
.page-order-detail #order-history tbody tr:first-child td:first-child::before, .page-guest-tracking #order-history tbody tr:first-child td:first-child::before{content:"ESTADO ACTUAL";display:block;margin-bottom:3px;font-size:10px;font-weight:700;letter-spacing:.07em;line-height:1.2;color:var(--cp-link-hover)}
.page-order-detail #order-history tbody tr:first-child .label-pill, .page-guest-tracking #order-history tbody tr:first-child .label-pill{font-size:15px;padding:5px 14px}
.page-order-detail #order-history .history-lines .history-line:first-child .date::before, .page-guest-tracking #order-history .history-lines .history-line:first-child .date::before{content:"ESTADO ACTUAL";display:block;margin-bottom:3px;font-size:10px;font-weight:700;letter-spacing:.07em;color:var(--cp-link-hover)}
.page-order-detail #order-history .history-lines .history-line:first-child .label-pill, .page-guest-tracking #order-history .history-lines .history-line:first-child .label-pill{font-size:14px;padding:4px 12px}
/* -- el historial como linea de tiempo. El punto arranca en x=11 y el halo llega hasta x=6: nunca toca el borde del bloque -- */
/* -- el body va PEGADO porque la regla base del archivo -body:not([class*="ce-theme"]) #content table.table- pesa (1,2,2) y el selector sin el se queda en (1,2,1): perdia por un elemento y la linea de tiempo se pintaba dentro de un segundo rectangulo redondeado de 1px. El overflow tambien se devuelve a visible: el de la base recortaba el halo del hito en curso. -- */
body.page-order-detail #order-history table.table-labeled, body.page-guest-tracking #order-history table.table-labeled{display:block;width:100%;border:0;border-radius:0;overflow:visible}
.page-order-detail #order-history table.table-labeled thead, .page-guest-tracking #order-history table.table-labeled thead{display:none}
.page-order-detail #order-history table.table-labeled tbody, .page-guest-tracking #order-history table.table-labeled tbody{display:block;padding:4px 4px 4px 0}
.page-order-detail #order-history table.table-labeled tbody tr, .page-guest-tracking #order-history table.table-labeled tbody tr{position:relative;display:grid;grid-template-columns:104px 1fr;align-items:center;gap:14px;padding:9px 0 9px 38px;border:0;background:none}
.page-order-detail #order-history table.table-labeled tbody tr::before, .page-guest-tracking #order-history table.table-labeled tbody tr::before{content:"";position:absolute;left:11px;top:50%;box-sizing:border-box;width:11px;height:11px;margin-top:-5px;border:2px solid var(--cp-surface);border-radius:50%;background-color:var(--cp-border-strong);z-index:1}
.page-order-detail #order-history table.table-labeled tbody tr::after, .page-guest-tracking #order-history table.table-labeled tbody tr::after{content:"";position:absolute;left:16px;top:50%;bottom:-9px;width:1px;background-color:var(--cp-border)}
.page-order-detail #order-history table.table-labeled tbody tr:last-child::after, .page-guest-tracking #order-history table.table-labeled tbody tr:last-child::after{display:none}
.page-order-detail #order-history table.table-labeled tbody td, .page-guest-tracking #order-history table.table-labeled tbody td{display:block;padding:0;border:0;background:none;font-size:13px;color:var(--cp-text)}
.page-order-detail #order-history .history-lines, .page-guest-tracking #order-history .history-lines{padding:4px 4px 4px 0}
.page-order-detail #order-history .history-lines .history-line, .page-guest-tracking #order-history .history-lines .history-line{position:relative;display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px;padding:10px 0 10px 34px;border:0}
.page-order-detail #order-history .history-lines .history-line::before, .page-guest-tracking #order-history .history-lines .history-line::before{content:"";position:absolute;left:11px;top:50%;box-sizing:border-box;width:11px;height:11px;margin-top:-5px;border:2px solid var(--cp-surface);border-radius:50%;background-color:var(--cp-border-strong);z-index:1}
.page-order-detail #order-history .history-lines .history-line::after, .page-guest-tracking #order-history .history-lines .history-line::after{content:"";position:absolute;left:16px;top:50%;bottom:-10px;width:1px;background-color:var(--cp-border)}
.page-order-detail #order-history .history-lines .history-line:last-child::after, .page-guest-tracking #order-history .history-lines .history-line:last-child::after{display:none}
.page-order-detail #order-history .history-lines .history-line .date, .page-guest-tracking #order-history .history-lines .history-line .date{font-size:13px;color:var(--cp-text)}
/* -- si el pedido acumula muchos estados, el bloque no se come la pagina -- */
@supports selector(:has(*)){.page-order-detail #order-history:has(tbody tr:nth-child(9)) tbody, .page-guest-tracking #order-history:has(tbody tr:nth-child(9)) tbody{display:block;max-height:340px;overflow-y:auto}}
@supports selector(:has(*)){.page-order-detail #order-history:has(.history-line:nth-child(9)) .history-lines, .page-guest-tracking #order-history:has(.history-line:nth-child(9)) .history-lines{max-height:340px;overflow-y:auto}}
/* -- HALO APROBADO: variante B (onda), un poco mas rapida (2400ms) -- */
.page-order-detail #order-history table.table-labeled tbody tr:first-child::before, .page-order-detail #order-history .history-lines .history-line:first-child::before, .page-guest-tracking #order-history table.table-labeled tbody tr:first-child::before, .page-guest-tracking #order-history .history-lines .history-line:first-child::before{background-color:var(--cp-link);box-shadow:0 0 0 4px rgba(0,122,204,.18)}
@media (prefers-reduced-motion:no-preference){.page-order-detail #order-history table.table-labeled tbody tr:first-child::before, .page-order-detail #order-history .history-lines .history-line:first-child::before, .page-guest-tracking #order-history table.table-labeled tbody tr:first-child::before, .page-guest-tracking #order-history .history-lines .history-line:first-child::before{animation:cpOnda 2400ms cubic-bezier(.22,.61,.36,1) infinite}}
/* v1.7.50 - PUNTO 2: la onda estaba apagada el 80% del ciclo. MEDIDA la vieja con la linea de tiempo pausada: alfa .26 en 0%, .09 a los 480ms, .03 al 35% y 0 al 70%. Con el easing ease-out el desvanecimiento se comia el efecto en el primer medio segundo. Ahora el pico sube a .40 y el alfa se reparte con una parada intermedia: MEDIDO .40 / .29 / .22 / .176 / .16 / 0 en 0-10-20-35-55-85%, o sea visible el 85% del ciclo. Y el radio maximo baja de 12 a 10px porque el tbody de la linea de tiempo es un scroll container -overflow:auto y max-height 340px cuando hay 9 o mas estados- y recorta en su padding box: MEDIDO, con 12px la onda se salia 1px por la izquierda y con 10px sobra 1px. */
@keyframes cpOnda{0%{box-shadow:0 0 0 4px rgba(0,122,204,.18),0 0 0 4px rgba(0,122,204,.40)}55%{box-shadow:0 0 0 4px rgba(0,122,204,.18),0 0 0 8px rgba(0,122,204,.16)}85%{box-shadow:0 0 0 4px rgba(0,122,204,.18),0 0 0 10px rgba(0,122,204,0)}100%{box-shadow:0 0 0 4px rgba(0,122,204,.18),0 0 0 10px rgba(0,122,204,0)}}
/* v1.7.50 - PUNTO 2: el director reporto que el halo no se ejecuta. Se ejecutaba -medido, playState running- pero la variante que corre en su Chrome es esta, y era imperceptible: 7000ms de ciclo, radio CONSTANTE y alfa entre .14 y .26, o sea 3,5 segundos para pasar de #EBF4FB a #C0DFF2. Pasa a 1800ms con alfa .08 <-> .42, el mismo ritmo y la misma amplitud que los puntos de la caja de luz del checkout. El radio sigue CONSTANTE: cero movimiento, ni traslacion ni escalado. Es el criterio que el director ya aprobo en la v1.7.41 para la linea de actividad: la norma pide retirar el movimiento vestibular, no la senal, y aqui la senal dice cual de los 22 estados es el actual. */
@media (prefers-reduced-motion:reduce){.page-order-detail #order-history table.table-labeled tbody tr:first-child::before, .page-order-detail #order-history .history-lines .history-line:first-child::before, .page-guest-tracking #order-history table.table-labeled tbody tr:first-child::before, .page-guest-tracking #order-history .history-lines .history-line:first-child::before{animation:cpHaloSuave 1800ms ease-in-out infinite}}
@keyframes cpHaloSuave{0%,100%{box-shadow:0 0 0 4px rgba(0,122,204,.08)}50%{box-shadow:0 0 0 4px rgba(0,122,204,.42)}}
/* -- PUNTO 4 de la ronda 7: en pantallas muy estrechas el cuerpo del mensaje baja un punto y aprieta la interlinea. MEDIDO a 320: 35 cajas de linea y 808px de alto para un solo mensaje. Es area de cuenta PRIVADA, donde el director autoriza excepciones al DS (regla 19), y el paso es de UNO: 14 -> 13px, interlinea 1,65 -> 1,5. El rotulo del autor se queda en 11px: es el que identifica quien escribe. -- */
@media (max-width:430.98px){.page-order-detail .messages .message .col-sm-8{font-size:13px;line-height:1.5}}
@media (max-width:430.98px){.page-order-detail .messages .message{padding:28px 12px 12px}}
@media (max-width:430.98px){.page-order-detail .messages .message .col-sm-4{letter-spacing:.03em}}
/* -- PUNTO 5 de la ronda 7: el chip de estado sin salto de linea. MEDIDO con la tipografia real: la celda del chip mide 95px a 320 y el nombre mas corto de los 29 estados ya pide 74,9 a 10px, asi que en una sola fila NO CABE ninguno de los largos por mucho que se encoja la fuente. Se cambia el reparto, que es lo unico que da sitio de verdad: la fecha va arriba y el chip debajo, con la fila entera para el. El corte es 430.98 y NO 389.98: con el nombre de estado mas largo del BO -Falta de Stock: Pedido No Pagado- a 390 y 393 -los iPhone 12 a 15- el chip volvia a compartir fila y se partia en dos. MEDIDO. -- */
@media (max-width:430.98px){.page-order-detail #order-history .history-lines .history-line, .page-guest-tracking #order-history .history-lines .history-line{grid-template-columns:1fr;row-gap:5px}}
@media (max-width:430.98px){.page-order-detail #order-history .history-lines .history-line .label-pill, .page-guest-tracking #order-history .history-lines .history-line .label-pill{justify-self:start}}
@media (max-width:430.98px){.page-order-detail #order-history .history-lines .history-line .date, .page-guest-tracking #order-history .history-lines .history-line .date{font-size:12px}}
/* -- PUNTO 4 de la ronda 6: LA FRANJA HUERFANA ENTRE 767 Y 768. Las utilidades del tema van en ENTEROS -.hidden-sm-down esconde con max-width:767px y .hidden-md-up con min-width:768px-, asi que en un viewport fraccionario de esa franja no casa NINGUNA y se pintan a la vez la tabla de escritorio Y las tarjetas de movil. MEDIDO con un viewport de 767,x: 3 filas + 3 tarjetas y la tabla desbordando su contenedor 290,7px HOY -es defecto preexistente, no de estas propuestas- y 301,7 con L3. Se cierra por el lado del telefono, que es como se comporta 767px: se retira lo que el propio tema marca como hidden-sm-down. El corte es 767.98 y NO 767.99: MEDIDO, Chrome redondea 767.99px al entero siguiente y esa regla se aplicaba TAMBIEN a 768, dejando la ficha de productos sin pintar en tablet. Con .98 no ocurre, ni en 991.98, 1024.98 ni 1199.98. -- */
@media (max-width:767.98px){body.page-order-detail #content .box.hidden-sm-down, body.page-order-detail #content table.table.hidden-sm-down, body.page-history #content table.table.hidden-sm-down, body.page-guest-tracking #content .box.hidden-sm-down, body.page-guest-tracking #content table.table.hidden-sm-down{display:none}}
/* v1.7.53 - LA GEMELA DE LA FRANJA ANTERIOR, la de 575,x. El detalle emite el historial de estados DOS VECES -order-detail.tpl:87 una tabla .hidden-xs-down y :107 un div .hidden-sm-up- y el tema los esconde en ENTEROS (575 y 576), asi que entre medias no casa ninguna y la lista de estados sale duplicada. En el codigo, .hidden-xs-down y .hidden-sm-up aparecian CERO veces: nada la cerraba. Preexistente, no es regresion: la v1.7.48 hace lo mismo y ademas desborda 14px. */
@media (max-width:575.98px){body.page-order-detail #content table.table.hidden-xs-down, body.page-guest-tracking #content table.table.hidden-xs-down{display:none}}
/* C1 - RELIEVE: la ficha flota y el contenedor se aplana. El contenedor pierde su sombra y su borde -no su fondo ni su radio- y las fichas suben a una sombra de dos capas con borde mas marcado. Es el cambio minimo que rompe la igualdad. */
/* v1.7.54 - la gemela del invitado lleva :not(.card): sin pedido encontrado (formulario de acceso, o referencia y correo que no casan) esa pagina extiende page.tpl y su #content es la unica tarjeta, .page-content.card.card-block, sin fichas dentro; aplanarla la dejaria sin borde ni sombra. Con pedido, #content viene de customer/page.tpl sin .card y las fichas llevan el relieve, como en el detalle. */
.page-order-detail #main #content.page-content, .page-history #main #content.page-content, .page-guest-tracking #main #content.page-content:not(.card){border-color:transparent;box-shadow:none}
.page-order-detail #main #content.page-content > .box, .page-order-detail #main #content.page-content > #order-infos > .box, .page-order-detail #main #content.page-content > .order-message-form, .page-order-detail #main #content.page-content .addresses article, .page-history #main #content.page-content > .orders .order, .page-guest-tracking #main #content.page-content > .box, .page-guest-tracking #main #content.page-content > #order-infos > .box, .page-guest-tracking #main #content.page-content .addresses article{border:1px solid var(--cp-border-strong);box-shadow:0 1px 2px rgba(0,0,0,.05),0 6px 16px rgba(0,0,0,.09)}
@media (max-width:767.98px){.page-history #content .orders .order{margin:0 0 12px;padding:14px 16px;border-radius:var(--cp-r-card);background-color:var(--cp-surface)}}
@media (max-width:767.98px){.page-history #content .orders .order:last-child{margin-bottom:0}}
/* -- la tarjeta redisenada resta 32px de ancho util y los dos botones dejan de caber con su rotulo entero: medido, "Volver a comprar" se recortaba 10,2px a 390 y 25,2px a 360. Con wrap + max-content el segundo baja solo cuando no cabe, sin numero magico. -- */
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2{flex-wrap:wrap}}
@media (max-width:767.98px){.page-history #content .orders .order .col-xs-2 > div{flex-basis:calc(50% - 4px);min-width:max-content}}
/* -- PUNTOS 3 y 5: una sola familia de relleno para TODAS las fichas -18px 20px en dos de ellas y 16 en el resto era la discrepancia que se veia a 768-, y mas estrecho en movil sin tocar los anillos exteriores, que son los que dan el margen con la pantalla. -- */
body.page-order-detail #content .box, body.page-order-detail #content #order-infos .box, body.page-order-detail #content #order-infos .box:first-child, body.page-order-detail #content .addresses article, body.page-order-detail #content .order-message-form, body.page-history #content .orders .order, body.page-guest-tracking #content .box, body.page-guest-tracking #content #order-infos .box, body.page-guest-tracking #content #order-infos .box:first-child, body.page-guest-tracking #content .addresses article{padding-left:16px;padding-right:16px}
@media (max-width:767.98px){body.page-order-detail #content .box, body.page-order-detail #content #order-infos .box, body.page-order-detail #content #order-infos .box:first-child, body.page-order-detail #content .addresses article, body.page-order-detail #content .order-message-form, body.page-history #content .orders .order, body.page-guest-tracking #content .box, body.page-guest-tracking #content #order-infos .box, body.page-guest-tracking #content #order-infos .box:first-child, body.page-guest-tracking #content .addresses article{padding-left:12px;padding-right:12px}}
/* -- PUNTO 7: el aire vertical. Las filas median 41px para una linea de 21: el relleno pesaba mas que el dato. Los selectores llevan body PEGADO porque la regla base -body:not([class*="ce-theme"]) #content table.table td{padding:10px 12px}- suma un elemento: sin el, el primer intento apenas movio 6px. -- */
body.page-order-detail #content #order-products tbody td, body.page-order-detail #content #order-products tfoot td, body.page-guest-tracking #content #order-products tbody td, body.page-guest-tracking #content #order-products tfoot td{padding-top:6px;padding-bottom:6px}
body.page-order-detail #content #order-products tfoot tr:last-child td, body.page-guest-tracking #content #order-products tfoot tr:last-child td{padding-top:11px;padding-bottom:11px}
body.page-order-detail #content #order-history table.table tbody td, body.page-guest-tracking #content #order-history table.table tbody td{padding-top:7px;padding-bottom:7px}
.page-order-detail .order-totals .order-total, .page-guest-tracking .order-totals .order-total{padding-top:5px;padding-bottom:5px}
.page-order-detail .addresses address, .page-guest-tracking .addresses address{line-height:1.55}
.page-order-detail .addresses h4, .page-guest-tracking .addresses h4{margin-bottom:10px;padding-bottom:8px}
.page-order-detail #order-history .history-lines .history-line, .page-guest-tracking #order-history .history-lines .history-line{padding-top:8px;padding-bottom:8px}
.page-order-detail .box.messages .message{padding-top:26px;padding-bottom:12px}
/* -- PUNTO 6: el chip de las fichas de direccion. MEDIDO a 768: la ficha mide 299px, el titulo envuelve a DOS lineas y la segunda llega a x=572, justo donde arranca el chip (551): se sobreponen 21px, y 18 a 390. Mientras el chip este anclado arriba a la derecha, el defecto vuelve en cuanto el texto crezca. Asi que en el tramo de dos columnas y en movil el chip BAJA AL FLUJO, encima del titulo: ahi no puede solaparse gane lo que gane el texto, y de paso el titulo recupera los 92px que reservaba. En escritorio se queda arriba a la derecha, que es lo aprobado y donde sobra sitio. -- */
@media (max-width:1024.98px){.page-order-detail .addresses article::before, .page-guest-tracking .addresses article::before{position:static;display:inline-block;margin:0 0 10px}}
@media (max-width:1024.98px){.page-order-detail .addresses h4, .page-guest-tracking .addresses h4{padding-right:0}}
/* -- PROPUESTA: la linea de tiempo en dos columnas desde 992px. La linea vertical se dibuja por columna con un degradado, porque el ::before de la tabla no puede partirse en dos. -- */
@media (min-width:992px){body.page-order-detail #content #order-history table.table, body.page-order-detail #content #order-history table.table tbody, body.page-guest-tracking #content #order-history table.table, body.page-guest-tracking #content #order-history table.table tbody{display:block}}
/* v1.7.50 - PUNTO 3, que no estaba en el encargo: lo levanto la revision adversarial y se confirmo EN VIVO sobre el pedido 849 de devel. Este tbody recibe de la regla de los 9+ estados un max-height:340px con overflow:auto, y aqui ademas column-count:2. Multicolumna con altura limitada NO recorta por abajo: reparte en MAS columnas hacia la derecha. Medido: scrollWidth 1323 contra clientWidth 873 a 992, 1755 contra 1160 a 1280 y 2018 contra 1336 a 1512, con SEIS de los 22 hitos enteros fuera del area visible y sin scroll vertical que los alcance -scrollHeight y clientHeight valian los dos 325-. El cliente no veia seis estados de su pedido. Se retira el limite de altura SOLO en este tramo, que es donde ya no hace falta: con el reparto en dos columnas la lista ocupa la mitad de alto. Medido despues: scrollWidth = clientWidth, 0 hitos fuera, y el bloque pasa de 423 a 521px. Esta regla pesa (2,2,3) y la del limite (1,2,3), asi que gana por especificidad. */
@media (min-width:992px){body.page-order-detail #content #order-history table.table tbody, body.page-guest-tracking #content #order-history table.table tbody{column-count:2;column-gap:32px;column-rule:1px solid var(--cp-border);max-height:none;overflow:visible}}
@media (min-width:992px){body.page-order-detail #content #order-history table.table tbody tr, body.page-guest-tracking #content #order-history table.table tbody tr{display:flex;align-items:center;gap:14px;break-inside:avoid;padding:5px 0 5px 30px}}
@media (min-width:992px){body.page-order-detail #content #order-history table.table tbody td, body.page-guest-tracking #content #order-history table.table tbody td{display:block;padding:0;border:0}}
@media (min-width:992px){body.page-order-detail #content #order-history table.table tbody td:first-child, body.page-guest-tracking #content #order-history table.table tbody td:first-child{flex:0 0 92px}}
/* -- HISTORIAL: base comun de las tres propuestas -- */
/* el contenedor cede protagonismo, igual que en el detalle (C1 RELIEVE aprobado) -- */
.page-history #main #content.page-content{border-color:transparent;box-shadow:none}
/* la zebra del tema deja de ser el unico separador: la apagan las tres propuestas -- */
/* -- el matazebras se aplica a TODAS las filas y no solo a las impares: apagandolo solo en las impares, esa misma regla (1,3,4) le ganaba al fondo blanco de la fila-tarjeta (1,2,4) y las impares se quedaban en transparente. Hoy no se nota porque el contenedor es blanco, pero la mitad de las tarjetas dependia de eso; medido: fila 1 y 3 en rgba(0,0,0,0) y fila 2 en blanco, en 768, 1024 y 1280. -- */
body.page-history #content table.table-striped tbody tr{background-color:var(--cp-surface)}
/* table-bordered dibuja una reja de bordes en cada celda; se retira y el limite lo pone la fila -- */
body.page-history #content table.table-bordered, body.page-history #content table.table-bordered td, body.page-history #content table.table-bordered th{border:0}
/* -- overflow y radio se devuelven a su valor neutro: la regla base del archivo declara overflow:hidden y border-radius en toda table.table, y con la fila convertida en tarjeta eso RECORTA su sombra -solo sobrevivia el trozo que cae en los huecos entre pedidos-. -- */
body.page-history #content table.table{width:100%;margin:0;overflow:visible;border-radius:0}
body.page-history #content table.table thead th{padding:0 12px 8px;border:0;vertical-align:bottom}
body.page-history #content table.table tbody td, body.page-history #content table.table tbody th{vertical-align:middle}
/* -- La referencia del pedido es un <th scope="row">, y una regla NUESTRA -pensada para las cabeceras- la tine de gris: body:not([class*="ce-theme"]) table.table-striped th{background: var(--cp-surface-sunken)}. Se veia como un bloque gris con linea vertical a la izquierda de cada fila. En la version definitiva se corrige EN ORIGEN acotandola a thead th. -- */
body.page-history #content table.table tbody th{background-color:transparent}
/* -- L3 BANDA DE REFERENCIA -- */
body.page-history #content table.table{border-collapse:separate;border-spacing:0 10px}
body.page-history #content table.table tbody tr{background-color:var(--cp-surface)}
body.page-history #content table.table tbody tr > *{padding:14px 12px;border-top:1px solid var(--cp-border);border-bottom:1px solid var(--cp-border);box-shadow:0 1px 2px rgba(0,0,0,.05)}
body.page-history #content table.table tbody tr > :first-child{padding-left:16px;border-left:3px solid var(--cp-link);border-radius:var(--cp-r-card) 0 0 var(--cp-r-card);background-color:var(--cp-surface-sunken);font-weight:700;color:var(--cp-text-strong)}
body.page-history #content table.table tbody tr > :last-child{padding-right:16px;border-right:1px solid var(--cp-border);border-radius:0 var(--cp-r-card) var(--cp-r-card) 0}
body.page-history #content table.table thead th{font-size:11px}
/* -- TABLET: la tabla no cabe (618px de contenedor a 768), asi que cada pedido pasa a tarjeta, igual que la tabla de productos del detalle. El corte de arriba sigue en 1024.98, que es lo aprobado. El de ABAJO se retira a proposito: con min-width:768px la franja huerfana de 767,x -donde las utilidades enteras del tema no esconden ni la tabla ni las tarjetas- se quedaba fuera y alli la tabla desbordaba 301,7px. Sin limite inferior, la tabla se convierte SIEMPRE que se vea por debajo de 1025. -- */
@media (max-width:1024.98px){body.page-history #content table.table, body.page-history #content table.table tbody, body.page-history #content table.table tbody tr{display:block;width:auto}}
@media (max-width:1024.98px){body.page-history #content table.table thead{display:none}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr{padding:14px 16px;margin:0 0 10px;border:1px solid var(--cp-border-strong);border-radius:var(--cp-r-card);background-color:var(--cp-surface);box-shadow:0 1px 2px rgba(0,0,0,.05),0 6px 16px rgba(0,0,0,.09)}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr:last-child{margin-bottom:0}}
/* Las celdas van a FLEX y no a block: el tema alinea con .text-xs-right y .text-sm-center, que llevan !important, asi que un text-align:left es declaracion muerta -el Total salia a la derecha, "Documentos" y los botones centrados-. Con la celda en flex, quien coloca es justify-content y no hace falta pelear con el !important. Y el radio de la fila-tarjeta de L1/L3 hay que anularlo aqui, o deja dos arcos sueltos en los extremos. */
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > *{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 6px;justify-content:flex-start;width:auto;padding:0;border:0;border-radius:0;box-shadow:none;clip-path:none}}
/* Las reglas de :first-child / :last-child de L1 y L3 pesan MAS que "tr > *" -una pseudo-clase de mas-, asi que hay que neutralizarlas por su nombre o sobreviven el borde y el radio de la fila-tarjeta y dejan dos arcos sueltos en los extremos (visible en captura, invisible al medir): es la regla de "al reemplazar un bloque, retirar el viejo entero". */
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :first-child, body.page-history #content table.table tbody tr > :last-child{border:0;border-radius:0;background-color:transparent;padding-left:0;padding-right:0}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > * + *{margin-top:7px}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :first-child{font-size:16px;font-weight:700;color:var(--cp-text-heading)}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :nth-child(2)::before{content:"Fecha: "}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :nth-child(3)::before{content:"Total: "}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :nth-child(4)::before{content:"Pago: "}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :nth-child(6)::before{content:"Documentos: "}}
/* -- el color es --cp-text y no --cp-text-muted: el DS prohibe el #7A7A7A como color de texto (4,29:1 sobre blanco) y estos cuatro rotulos son texto, no adorno. Con #666666 sube a 5,74. Mismo defecto que la v1.7.30 corrigio en la confirmacion de pedido. -- */
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :nth-child(2)::before, body.page-history #content table.table tbody tr > :nth-child(3)::before, body.page-history #content table.table tbody tr > :nth-child(4)::before, body.page-history #content table.table tbody tr > :nth-child(6)::before{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--cp-text)}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > .order-actions{margin-top:12px;gap:8px}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr{border-left:3px solid var(--cp-link)}}
@media (max-width:1024.98px){body.page-history #content table.table tbody tr > :first-child{padding-left:2px}}
/* -- ESCRITORIO ESTRECHO: entre 1025 y 1199 el contenedor da 858px utiles y la tabla pide 875,8 con el nombre de estado mas largo del BO, asi que se come el relleno derecho de la ficha y la ultima columna queda pegada al canto (medido con la tipografia real cargada de verdad). Se recorta el relleno lateral de las celdas, que es lo unico que sobra: cabe con 0 y no se esconde ningun dato ni se cambia la disposicion. -- */
@media (min-width:1025px) and (max-width:1199.98px){body.page-history #content table.table thead th{padding-left:6px;padding-right:6px}}
@media (min-width:1025px) and (max-width:1199.98px){body.page-history #content table.table tbody tr > *{padding-left:6px;padding-right:6px}}
@media (min-width:1025px) and (max-width:1199.98px){body.page-history #content table.table tbody tr > :first-child{padding-left:10px}}
@media (min-width:1025px) and (max-width:1199.98px){body.page-history #content table.table tbody tr > :last-child{padding-right:10px}}
/* -- PUNTO 1 de la ronda 7: en vistas reducidas el pedido es una TARJETA y realzarla en gris al pasar el raton no dice nada -no hay accion asociada a la fila- y ademas sale a bandas, porque el realce lo pinta la CELDA y ahi cada celda es un bloque. MEDIDO a 768, 900 y 1024: cinco y seis celdas pasaban de transparente a #ECEEF1. El .table-striped del selector no es adorno: sin el, empata a la regla base en (1,3,5) y ganaria solo por orden. -- */
@media (max-width:1024.98px){body.page-history #content table.table.table-striped tbody tr:hover td, body.page-history #content table.table.table-striped tbody tr:hover th{background-color:transparent}}
/* -- PUNTO 5 de la ronda 7, RECALIBRADO en la v1.7.50 contra la pagina real. La prosa anterior decia que la celda del chip mide 103,9px porque la fija el importe: es FALSO, y por eso el corte estaba en 430.98. La columna `auto` la dimensiona el contenido MAS ANCHO de la columna, que es el chip, no el total. MEDIDO en devel con el nombre de estado mas largo del BO -Falta de Stock: Pedido No Pagado-, en tarjetas CON y SIN el bloque del modulo: el chip mide 198,06px y entra en UNA linea a 360, 375, 390 y 393, con la fecha tambien en una linea y desborde 0; a 355 sigue entrando -fecha 75,5px- y a 320 si se parte en dos. Asi que el chip vuelve junto al total en TODOS los telefonos reales y solo toma fila propia por debajo de 360, donde de verdad no cabe. El corte va en 359.98 y no en 339.98 como margen. -- */
@media (max-width:359.98px){body.page-history #content .orders .order .col-xs-10 > .status{grid-area:3/1/4/3;justify-self:start}}
