/*
Theme Name: Automex Theme
Theme URI: https://automex.com.co/
Description: Tema de Automex, hijo de Hello Elementor. Pinta en codigo puro la home y WooCommerce; el resto de paginas sigue con Elementor hasta migrarlas.
Author: Automex
Template: hello-elementor
Version: 1.63.0
Text Domain: bombeo-theme

Changelog
1.63.0 - AUTOMEX: LANDING «Variadores de velocidad» EN CÓDIGO (/variadores-de-velocidad/,
         página 43262, campaña ADS Variadores 21524376881 = 74 % de las conversiones).
         Mismos componentes; todo CTA = WhatsApp con su marca PostHog (landing=variadores,
         detalle modelo/familia/caso); tablero PostHog 2313778. ORDEN (datos PostHog: en la
         página Elementor solo el 40 % llegaba a los modelos): productos justo tras el hero.
         Familia INOMAX completa de la tienda (MAX500-PV, MAX500, MAX520, MAX600, IP55, IP65,
         ACS580, ACS880) con referencias en stock, logo y sellos «Garantía directa con
         Automex · 2 años»; MAX500-PV primero con sello «Solar». Marcas líderes (Siemens V20,
         G120, G120X; Mitsubishi D800, F800) con logos y «Garantía directa con el fabricante
         · 1 año». Fotos de MAX600/IP55/IP65 recortadas en assets/img/variadores/.
         COMPONENTES NUEVOS (compartidos): atx_lp_productos (tarjetas de producto grises,
         variante de marca con logo y sellos, etiqueta destacada) y atx_lp_selector (el
         selector de pestañas; Industriales lo usa y su HTML sale idéntico).
         RESPONSIVE (CSS global): de 861 a 1200 px las rejillas de 3 y 4 ya no bajan a 2
         columnas (tarjetas gigantes); 5 productos = 5 columnas desde 1025 px.
1.62.1 - AUTOMEX: las landings de pauta imprimían el FAQPage DOS veces (su bloque
         propio + el generador genérico, que leía los <details> del contenido viejo
         de Elementor en la BBDD). inc/landings.php apaga el genérico
         (bombeo_faq_schema_activo) solo en las landings.
         MEDICIÓN: landing.js tenía landing='industriales' FIJO en landing_profundidad
         y en las preguntas del FAQ (landing_interaccion): en Presión Constante esos
         dos eventos se atribuían a Industriales. Ahora toma la landing de la página.
1.62.0 - AUTOMEX: CSS GLOBAL + LANDING «Tableros de presión constante» EN CÓDIGO.
         (1) CSS GLOBAL para todo el sitio (no solo landings): assets/css/componentes.css
         (tokens --c-*, hero, franja de marcas, todos los .lp-*) en toda la zona del
         theme; assets/css/home.css = secciones de la portada, solo en la home (salen
         los 12 <style> inline de parts/atx-home.html; alturas verificadas iguales).
         Desaparece landing.css. (2) Componentes compartidos en
         inc/landing-componentes.php (hero, marcas, oferta, CTA oscuro, lista,
         tecnología, ingeniería, casos, barra) y UNA plantilla landing.php para
         todas; cada landing = 00-datos.php + 02-cuerpo.php. (3) Nueva landing
         /landing-tableros-de-presion-constante/ (página 43606) con los mismos
         componentes, todo CTA = WhatsApp, 12 data-seccion, landing=presion_constante;
         tablero PostHog 2313432. Tarjeta ATX Master con variante «pantalla» en móvil
         (captura HMI arriba, texto debajo). Industriales sin cambios visibles.
         Incluye todo lo de 1.61.0 (que no se llegó a subir).
1.61.0 - AUTOMEX: LANDING DE PAUTA «Tableros eléctricos industriales» EN CÓDIGO
         (/landing-tableros-electricos-industriales/, campaña ADS Tableros
         Industriales). inc/landings.php la pinta por SLUG (template_include 10000)
         + landing-industriales.php + template-parts/pagina/landing-industriales/.
         Hero de la home adaptado, SIN formulario (todo CTA = WhatsApp wa.me, decisión
         de Oswel), sin menú fijo, selector de grados IP, carriles deslizables en
         móvil, textos de CTA distintos por sección, cierre = caja oscura como el CTA de ingeniería, sin pie. PostHog: 12 data-seccion,
         btTrack propio (whatsapp_click / cta_click / landing_interaccion /
         landing_profundidad) con landing=industriales; tablero PostHog 2313349.
         CSS y JS UNIFICADOS en assets/css/landing.css y assets/js/landing.js (solo
         en landings); nada inline, sin onclick (detector delegado).
1.60.5 - AUTOMEX: logo de correos y de la página de reseñas con FONDO TRANSPARENTE
         (uploads/2026/11/logo-automex-transparente.png, adjunto 44666): el anterior
         traía un recuadro blanco que se veía sobre fondos grises.
1.60.4 - AUTOMEX: (1) Fuera de la zona (páginas Elementor, 404) ya NO se imprimen el
         carrito lateral, compartir, cotización ni el modal de producto
         personalizado: salían sin estilos debajo del footer. (2) Correos: plantilla
         CLÁSICA de Woo (como Bombeo), color base negro, sin sincronizar con el tema,
         logo 200 px centrado; franja «Nueva venta» y total sin azules.
1.60.3 - AUTOMEX: LOGIN DEL CHECKOUT. El botón «Iniciar sesión» no abría nada: en
         prod el formulario de WooCommerce no llegaba (ni con «iniciar sesión
         durante el pago» encendido). form-checkout.php captura los ganchos y, si al
         invitado no le llegó el formulario, lo pinta él (nunca duplica).
1.60.2 - AUTOMEX: BÚSQUEDA. La pinta el theme (antes la plantilla Elementor 43782,
         que se quedó vacía al apagar los Jet); el formulario del header manda
         post_type=product (como Bombeo) y «Ver todos» también; los filtros de la
         búsqueda usan Relevanssi para contar lo mismo que el listado.
         MI CUENTA: con el registro apagado (Automex) el «Acceder» salía suelto y sin
         estilo → tarjeta centrada; la regla de enlaces rojos de la cuenta ya no
         tiñe el header ni el footer (:where(.woocommerce)).
1.60.1 - AUTOMEX: 🔴 JetWooBuilder mete en el <body> de TODAS las páginas las clases
         woocommerce-account/cart/checkout/order-received/shop y single-product
         (+ números). La regla body.woocommerce-account a{color:rojo} pintaba de
         rojo botones y tarjetas en home, tienda y relacionados. inc/zona-theme.php
         filtra body_class (prio 999) y deja solo las que tocan.
1.60.1 - AUTOMEX: HEADER MÓVIL compacto (≈310 → 117 px): fuera la barra superior
         (≤760) y la barra roja (≤1024); icono Tienda fuera ≤440; la hamburguesa sube a la barra del logo;
         fila 1 = menú · logo · cuenta · carrito, fila 2 = buscador. «Mi cuenta»
         añadido al menú móvil. Escritorio sin cambios.
1.60.1 - AUTOMEX: HERO NEGRO en la home (atx-hx): fuera el carrusel de banners;
         texto a la izquierda (único H1: «Fabricantes de Tableros Eléctricos
         Industriales RETIE», = metatítulo y kw de AIOSEO) + 6 fotos de la biblioteca rotando a la
         derecha con fundido. El H1 del bloque blanco pasa a H2.
         Fotos a ALTO COMPLETO pegadas a la derecha (66 % del ancho) con degradado
         negro desde la izquierda para montar el texto (como la landing RCI de
         Bombeo); en móvil la foto va debajo, a todo el ancho.
         Tipografía del hero = escala de la landing RCI de Bombeo: H1 Poppins 800
         en DOS líneas anchas en escritorio (sin cortes, 40→68 px, peso 700, −0,045em);
         ≤1200 vuelve a partirse; antetítulo gris con
         raya y lo clave en rojo; texto de apoyo con negritas en blanco.
1.60.1 - AUTOMEX: franja Certificación + Marcas de la home en UNA línea y delgada
         (287 → 88 px en escritorio; en móvil las 4 marcas en una fila).
1.60.1 - AUTOMEX: ZONA DEL THEME = home + WooCommerce (inc/zona-theme.php).
         Carrito y checkout salen SIEMPRE con el contenido de WooCommerce aunque
         la página (31148/31149 en prod) sea de widgets de Elementor: no se
         tocan en la BBDD. El resto de páginas siguen en Elementor.
1.60.1 - AUTOMEX: fuera las plantillas de páginas que eran de BOMBEO
         (page-landing-contra-incendio, page-nosotros, page-sistema-de-bombeo…,
         page-sistema-de-presion…, sus template-parts y los *.bombeo-bak).
         🔴 page-nosotros.php habría SECUESTRADO la página «nosotros» de
         Automex (id 3147) con el contenido de Bombeo. A la Papelera.
       - CORREOS de WooCommerce: mismo diseño, datos de AUTOMEX — logo negro y
         rojo (Logos-JEPG-03.png), Carrera 31A #9-52 Bogotá, NIT 900.207.008-3,
         PBX 601 756 3496, ventas@automex.com.co, WhatsApp del contact center 573102317399. Fuera
         Facebook/Instagram de Bombeo (Automex sin URL confirmada → no se pintan).
         🔴 El logo NO salía: WooCommerce nuevo lee la opción directa y ya no
         pasa por el filtro `woocommerce_email_header_image` → se añade
         `pre_option_woocommerce_email_header_image`.
       - BLOG eliminado del theme (home.php, single.php, template-parts/blog):
         era el de Bombeo. Las entradas las sigue pintando Elementor.
       - Compartir cotización: «…de Automex» en vez de «…de Bombeo.co».
       - MENÚ (submenús Tableros, Variadores y Aplicaciones): los enlaces dejan
         de ir a categorías de la tienda y van a las PÁGINAS de solución
         (presión constante, NFPA 20, arrancadores suaves, HydroSmart L9 y
         M521/M531 Evolution, MAX500, MAX500-PV, ACS580, AST7000; AFE →
         regenerativos). Lo que aún no tiene página queda desactivado con
         «Muy pronto» (.atx-sub-soon): estrella-triángulo, arranque directo,
         MAX520, MAX600, IP55, IP65, accesorios; y «Solar» en Aplicaciones
         (escritorio y móvil). «Todas las categorías» sigue
         llevando a la tienda (a propósito).
       - WhatsApp de TODO el sitio (cabecera, menú móvil, pie y botones de la
         home) al del contact center 573102317399 (antes 15557971543).
       - ZONA DEL THEME (inc/zona-theme.php): el theme pinta SOLO la home y
         WooCommerce (tienda, categorías, ficha, carrito, checkout, mi cuenta,
         búsqueda). Fuera de la zona, header/footer/page caen al tema padre y no
         se carga style.css: las páginas de Elementor se ven como hoy. Dentro, las
         plantillas del theme ganan en CÓDIGO a las de Elementor Pro (tienda
         38116, ficha 31200) y a elementor_canvas (carrito/checkout), sin vaciar
         condiciones en la BBDD. El CSS de Elementor se quita por zona.
       - Fuera los template-parts de home/header/footer de BOMBEO (no los cargaba
         nadie; 27 archivos). Nombre y autor del theme: Automex.
1.60.0 - SELECTOR DE CURVAS: estilo del aviso cuando la curva NO es estimada.
       - El selector dejo de inventarse la curva: si el producto trae sus
         cuatro numeros en el metabox «Selector de curvas» (core 0.40.0), la
         grafica se traza con ellos. El aviso de debajo tiene que decirlo, y
         no puede decirlo en amarillo de advertencia como cuando se estima.
       - Una sola regla: .bsel__aviso--real en verde. El amarillo de siempre
         se conserva para las bombas sin datos, que hoy son casi todas.
       - SIN ESTE CAMBIO el aviso verde sale con los colores del amarillo:
         dice «curva del fabricante» con pinta de advertencia. Por eso sube
         junto al core y no despues.

1.59.0 - HOME / HERO: entran los 4 banners de temporada y solar, y sale la
         campana «match perfecto», que estaba VENCIDA EN PORTADA. Su aviso
         legal seguia diciendo «Promocion valida hasta el 30 de septiembre de
         2026» el 7 de octubre. No fue un despiste puntual: la fecha estaba
         escrita a pelo dentro del HTML, asi que nada la caducaba sola.
       - Ahora el aviso es CONDICIONAL ($bt_hero_promo_tag / _legal; vacias =
         no se pinta nada). Para la proxima promo se rellenan dos variables y
         se vacian al vencer. El CSS .bom-hero-legal se conserva a proposito.
       - Vuelven el lead y el boton por banner, que v3 habia dejado en blanco
         para no inducir compra online con una promo de tienda fisica. Estos
         banners no tienen ese problema: llevan a categorias del catalogo.
       - SON 6 BANNERS, en este orden: El Nino (131586) · HydroBooster (131591)
         · bombas solares (131587) · variadores solares (131590) · HydroSmart
         (131588) · paneles solares (131589). El orden importa mas que la lista:
         con 6,5s cada uno, la mayoria de visitas solo ve uno o dos. Abre El
         Nino porque es lo unico con fecha de caducidad; sigue HydroBooster, que
         es el unico que lleva a un articulo PUBLICADO.
       - 🔴 LOS DESTINOS ESTAN VERIFICADOS CONTRA PRODUCCION (los 6 responden
         200 sin redirecciones). Un banner que promete lectura y cae en un 404
         quema la impresion, asi que solo HydroBooster dice «leer»: su articulo
         existe (post 131295). El de El Nino promete «el pozo baja» y lleva a
         SUMERGIBLES (652 refs), que es exactamente lo que resuelve esa frase;
         cuando se escriba su articulo se le cambian 'href' y 'cta'.
       - ⚠️ TRAMPA DE ESTE CATALOGO: los variadores solares NO cuelgan de
         /categoria/bombas/solares/ sino de /tableros-para-bombas/variadores/.
         HydroSmart si tiene categoria propia con 17 referencias, por eso ese
         banner no depende del articulo.
       - 'href' se escribe como RUTA y un bucle la resuelve con home_url(), que
         es lo que permite probar el hero en el espejo local.
       - 🔴 EL VELO PASA A SER POR BANNER y vive DENTRO de cada slide, para que
         funda con su propia foto. Las imagenes nuevas ya traen su zona de
         reserva degradada a la izquierda y el velo unico y fuerte de v3 se las
         ensuciaba: llevan 'suave'. La de El Nino trae esa zona casi BLANCA y
         lleva 'fuerte', porque TODO el mobiliario fijo del hero (H1, sellos,
         puntos, botones fantasma) es blanco y sobre fondo claro desaparece.
         En movil los dos pasan a velo plano: el recorte de 2.560px sobre 375
         es imprevisible y puede caer sobre la parte clara.
       - 🔴 Y EN MOVIL SE CORRE EL ENCUADRE A `object-position: 78% center`.
         Son banners de 3,84:1 metidos en un cajon casi cuadrado: con `cover` y
         `center` solo se ve el CUARTO CENTRAL de la foto, que en los cuatro es
         la zona muerta entre el degradado de reserva y el producto. Dicho de
         otro modo: en movil —mas de la mitad del trafico— se estaba viendo la
         parte vacia del banner. Los cuatro llevan el sujeto a la derecha. No
         cuesta legibilidad porque en movil el velo ya es PLANO: el texto no
         depende de que trozo de foto quede debajo. Verificado en iframes de
         375px (el resize de la ventana no cambia el viewport real aqui).
       - PESO: los 6 webp suman 407 KB contra los ~2,9 MB de los JPG que habia,
         y eso con el DOBLE de banners. El LCP de la portada es justo esta
         imagen, asi que el cambio se nota en velocidad, no solo en mensaje.
       - Los 6 adjuntos (131586-131591) tienen srcset completo en produccion.
         El 'url' absoluto sigue de red de seguridad y es lo que se sirve en el
         espejo local, donde esos IDs no existen.
1.58.0 - LANDING RCI: TRES VIAS DE CONTACTO EN EL MEDIO DE LA PAGINA.
         Medido el 7-oct con PostHog (231 personas, cruzando el scroll de
         `$pageleave` con la conversion a nivel persona):
             0-10%  solo el hero ....  44 personas ·  3 escriben ·  6,8%
             10-20% .................  34 personas ·  0 escriben ·  0,0%
             20-50% .................  70 personas ·  0 escriben ·  0,0%
             50-90% .................  27 personas ·  0 escriben ·  0,0%
             90-100% llegan al cierre  56 personas ·  5 escriben ·  8,9%
         131 personas se recorrieron el medio y NINGUNA escribio (p~1%). La
         pagina tenia exactamente DOS botones, hero y cierre, y convertia en
         esos dos puntos y en ningun otro: entre ellos hay ~5.000px de
         comparativa, tableros y casos sin una sola forma de contactar.
       - Remates tras `07-comparativa`, `11-tableros-cards` y `12-casos`, cada
         uno con su `data-prop-ubicacion` (`tras-*`) para saber cual tira. El
         mensaje de WhatsApp lleva ademas el contexto: el comercial abre el
         chat sabiendo que estaba mirando la persona.
       - ES UN TEST, NO UNA CERTEZA. Hoy no se puede separar si el medio no
         convierte por falta de BOTON o por falta de ARGUMENTO. Si capturan,
         faltaba la via; si siguen en cero con trafico suficiente, el problema
         es el contenido y toca recortar o reordenar. Aditivo a proposito: no
         se toco ni el hero (6,8%) ni el cierre (8,9%).
       - `cta-whatsapp.php`: el boton de WhatsApp vivia DUPLICADO byte a byte
         en 04 y 16 salvo una linea. Con tres remates mas eran cinco copias y
         cinco sitios donde olvidarse de `Ref: RCI-ADS`. Ahora vive una vez.
         Los href de hero y cierre salen IDENTICOS a produccion (rawurlencode
         reproduce exactamente la cadena que estaba a mano).
       - 🔴 EL REMATE NO LLEVA FONDO PROPIO: HEREDA el del bloque que cierra.
         El primer intento era una tarjeta gris con borde y estaba mal: esta
         landing alterna fondos a sangre y una franja con fondo propio PARTE la
         pagina. Paso detras de «casos» — gris arriba, gris abajo y una banda
         blanca en medio. El `fondo` va declarado por posicion en $bt_remates
         y TIENE QUE IGUALAR AL DEL VECINO.
       - Tampoco es tarjeta con sombra: ese es el lenguaje del CIERRE, que es
         el punto de conversion. Repetirlo tres veces le quita el papel.
       - Las <section> de esta landing heredan `padding:62px 0`, que es el
         ritmo ENTRE bloques. El remate no es un bloque nuevo, asi que se le
         anula: con los 62px se despegaba de lo que remata y se comia 124px de
         pagina por cada uno. La pagina crece solo 4,6% (9.020 -> 9.432px).
       - NO llevan `data-seccion`: anadirlo cambiaria el mapa de 12 secciones y
         rompería la comparacion con el historico del medidor.
       - ⚠️ El apilado en movil (media query de 860px) esta verificado por
         regla, no renderizado: el resize del navegador no cambiaba el viewport
         real en el entorno de pruebas.
1.57.1 - LANDING RCI: el medidor de profundidad llevaba desde que se monto SIN
         registrar un solo evento. No era el despliegue ni el transporte: el
         bloque `02-tracker.php` se renderiza ANTES que las secciones, asi que
         su `querySelectorAll('[data-seccion]')` devolvia cero, saltaba el
         `if(!secs.length)return;` y el medidor moria en silencio. Cero exacto,
         nunca «pocos».
       - Lo delataba un efecto colateral: `window.btSecMax` no llegaba a
         existir, asi que los `whatsapp_click` salian sin `seccion_alcanzada`
         (fichas 2 y 5 del panel de PostHog, las dos vacias).
       - El cuerpo pasa a `function arranca()` y se llama con `DOMContentLoaded`
         cuando el documento aun se esta leyendo.
       - El envio final anade `{transport:'sendBeacon'}`: posthog-js agrupa los
         envios y en `pagehide` solo encolaba, la pagina moria antes.
       - REGLA: en esta landing los bloques inline van antes del contenido.
         Cualquiera que consulte el DOM AL CARGAR tiene que esperar al
         `DOMContentLoaded`. `btTrack` no lo necesita: corre al hacer clic.
1.57.0 - MEGA-MENU: que cada tarjeta lleve A DONDE DICE. Cuatro arreglos, y
         los cuatro en `mega-menu/03-panels.php` + `05-mobile-drawer.php`,
         porque el menu esta escrito A MANO y no se entera de lo que pasa en
         el catalogo. Esa es la causa de fondo de los cuatro.
       - «Variadores solares» apuntaba a `/equipos-electricos-y-automatizacion/
         arrancadores-directos/` — ni solares ni variadores, 6 arrancadores
         directos. Ahora va a `/variadores-de-velocidad/inomax/max500-pv/`,
         que son los 23 solares de verdad.
       - FUERA la tarjeta «HydroSmart M»: apuntaba a la MISMA url que la «L»
         (`/tableros-para-bombas/hydrosmart/`, 17 productos). Dos casillas del
         menu para un solo destino.
       - FUERA la tarjeta «G120X»: la linea se descontinuo y su categoria
         quedo en CERO productos (los 71 estan en papelera desde el 17-sep).
         El menu seguia mandando gente a una pagina vacia. La categoria
         redirige ahora a `/variadores-de-velocidad/` (regla en el mapa de
         `bombeo_redirecciones`, que es dato y vive en la BBDD).
       - ENTRA la tarjeta «F800» de Mitsubishi: 28 productos PUBLICADOS que no
         tenian ninguna puerta en el menu. Estaba el D800 y no su hermano, asi
         que a esos 28 solo se llegaba por el buscador.
       - ⚠️ MIENTRAS EL MENU SEA FIJO esto se repite: el dia que una categoria
         se vacie o nazca, el menu no se entera. Convertirlo en dinamico (leer
         `product_cat` con su contador) es el arreglo de raiz, y es otro
         trabajo.
1.56.1 - La columna CLIENTE de cotizaciones, acotada a 210px y recortada a DOS
         lineas. Era la unica columna de longitud ilimitada y con el `nowrap`
         general estiraba la tabla mas alla de sus 980px: aparecia scroll
         horizontal, y el de una tabla vive AL FINAL, asi que para ver la
         derecha habia que bajar hasta abajo, arrastrar y volver a subir.
       - No basta con dejar fluir el texto: hay una razon social de 134
         caracteres en produccion y a 210px son NUEVE renglones, una torre. De
         ahi el `line-clamp:2`, con el nombre entero en el `title` (core
         0.37.1) para poder leerlo pasando el raton.
1.56.0 - EL INDICE DE CONTENIDOS ES DEL BLOG Y DE NADA MAS.
       - Antes entraba en `post` Y en toda pagina estatica, y de ahi colgaban
         tres guardas para ir tapando paginas una a una. El planteamiento
         estaba del reves: se excluia por TENER plantilla propia, asi que toda
         pagina SIN plantilla se lo llevaba por defecto. Y borrar
         `_wp_page_template` es justo el paso de la salida de Elementor: cada
         pagina que migramos a codigo puro se quedaba sin excluir sin que nadie
         lo pidiera. La lista de excepciones crecia sola.
       - Ahora entra solo `is_singular('post')`, con el filtro nuevo
         `bombeo_indice_aplica` para reabrirlo desde fuera si alguna pagina
         concreta lo quiere, en vez de volver a aflojar la condicion.
       - CONSECUENCIA VISIBLE: las 7 paginas legales PIERDEN su indice. En una
         de 11 h2 ese indice ayudaba; se retira porque la regla del proyecto es
         que el indice es del blog. Reponerlo es una linea de filtro.
       - page.php YA NO RENDERIZA LA PAGINA DOS VECES. Contaba los h2 con
         `apply_filters( 'the_content', ... )` solo para decidir si mostrar la
         fecha de actualizacion, y eso ejecutaba la pagina entera una vez para
         tirar el resultado. Rompio el selector de curvas: su shortcode encola
         el script con un `static` que se quemaba en ese render fantasma y la
         grafica llegaba sin datos. Ahora cuenta sobre el crudo. Los h2 de
         Gutenberg estan ahi, asi que la cuenta no cambia; lo unico que deja de
         contar son los h2 que salgan de un shortcode, y eso es lo correcto:
         una herramienta no es un documento porque su widget pinte encabezados.
1.55.0 - SELECTOR DE CURVAS: los ENLACES. Hasta ahora la herramienta existia
         pero no habia por donde entrar. Queda en cuatro sitios:
       - Barra superior del header, despues de Blog (02-utility-bar.php).
       - Cajon movil, despues de Blog (05-mobile-drawer.php). 🔴 NO es un
         duplicado gratuito: debajo de 1024px la barra superior derecha se
         oculta entera, y el movil es el 55% del trafico. Sin esta segunda
         copia el enlace no existia para mas de la mitad de la gente.
       - Footer, columna CATALOGO y no Empresa: quien recorre esa columna es
         justo el que no sabe cual de las 2.800 bombas le sirve.
       - Home, card 02 de "Guias, calculadoras y catalogos".
       - RETIRADA la CALCULADORA del modal que ocupaba esa card 02: markup,
         CSS `bom-calc-` y su JS, 17,2 KB menos en la home. No fue estetico:
         estimaba la bomba por numero de pisos y grifos con coeficientes que
         nunca paso Ingenieria —lo decia su propia nota interna— y devolvia
         una recomendacion GENERICA, sin mirar el catalogo, asi que podia
         recomendar algo que no se vende. El selector calcula sobre las
         bombas publicadas.
       - ⚠ LO QUE SE PERDIO: aquel modal remataba con un enlace a WhatsApp que
         llevaba el proyecto resumido en el mensaje. El selector aun no tiene
         ese remate; es un camino de conversion menos hasta que se añada.
       - La URL es /selector-de-curvas/ y el rotulo tambien: antes diferian.
       - Medida de lectura 84ch para el TEXTO de la pagina (p, h2, h3, ul, ol
         y figure), no para el contenedor: el .bsel del shortcode necesita
         los 1280 enteros para la grafica. Por eso es una lista de elementos
         y no `> *`.
       - El texto de entrada de la pagina se limita a 84ch. El cuerpo va a
         1280px porque la grafica lo necesita, pero un parrafo de 1280px no
         se lee: al volver de linea el ojo pierde el renglon. 84ch es el
         limite alto de lo legible y se acepta a proposito porque la entrada
         son DOS lineas: perder el renglon exige varias. Solo se limita el
         hijo directo de .bt-pag__body, asi que lo que pinta el shortcode
         dentro de .bsel queda a su ancho completo.
1.54.0 - SELECTOR DE BOMBAS: el aspecto (.bsel-). La logica va en bombeo-core
         0.37.0, que hay que subir ANTES o el shortcode sale como texto.
       - La pagina del selector toma el ancho del SITIO (1280), no el de
         lectura: page.php envuelve toda pagina en 1080/780, medidas pensadas
         para un texto legal largo, y una tabla con grafica no cabe ahi. El
         plugin marca el <body> con .bombeo-selector porque el CSS no puede
         detectar un shortcode por si solo.
       - Resultados en BARRAS, no tarjetas: con tarjetas, ocho resultados
         ocupaban tres pantallas y comparar obligaba a subir y bajar. En barra
         las cifras quedan alineadas en columna y comparar es recorrer la vista.
       - Los grupos se separan por TITULO con subrayado de color, sin filete
         lateral: la linea a la izquierda solo desplazaba el contenido.
       - Grafica sobria a proposito: rejilla de dos niveles en gris y un solo
         color fuerte, el rojo del punto pedido. En una grafica tecnica el
         color solo debe marcar lo que hay que mirar.
       - Las tres cajas del resumen en color solido: el optimo en navy de marca
         porque es el unico dato REAL del catalogo; maximo y minimo en gris
         porque son estimados. El color separa lo que se sabe de lo que se
         calcula.
1.53.3 - VISTA DE PAGINA PROTEGIDA propia (template-parts/pagina/password-form.php).
         La de WordPress es un parrafo, una etiqueta «Contrasena:» y un boton
         sin estilo: sirve para un blog, no para que la gerencia entre a
         revisar un documento legal antes de publicarlo.
       - Explica QUE es: «Documento en revision», no una pagina rota.
       - Fuera el prefijo «Protegido:» del titular, que parecia un fallo de
         plantilla. El candado ya lo dice, y mejor.
       - El campo se enfoca solo y acepta Enter: quien llega viene a escribir
         una clave, no a buscar donde hacer clic.
       - Si la clave falla, LO DICE. De serie WordPress recarga el mismo
         formulario y no se sabe si fallo o si no llego a enviarse.
1.53.2 - bombeo_pagina_viva() ya NO da por viva una pagina bajo CONTRASENA.
         Solo miraba post_status === 'publish', y una pagina protegida esta
         precisamente en 'publish' -es requisito para que la clave funcione-,
         asi que el pie la enlazaba. Paso de verdad: al poner las 7 legales con
         clave para que administracion las revisara, el footer empezo a ofrecer
         «Terminos y condiciones» a TODOS los clientes, que aterrizaban en un
         formulario de contrasena. Peor que no tener el enlace.
         Ahora una pagina en revision es invisible para el visitante y
         accesible para quien tiene la clave.
1.53.1 - MI CUENTA · el ancho. No era un estilo suelto: page.php la envolvia
         en .bt-pag (1080px) y .bt-pag__wrap (780px), que son medidas de
         LECTURA -pensadas para un texto legal largo-. El header del sitio va
         a 1280, de ahi el escalon contra la cabecera. Y peor: la tabla de
         enlaces compartidos necesita 980px y se quedaba sin sitio.
         Mi Cuenta pasa a 1280, el mismo ancho del header. Los documentos
         legales conservan sus 780px, que ahi si tocan.
       - El indice de contenidos deja de aplicar en WooCommerce. Mi Cuenta usa
         la plantilla por defecto, asi que el guard de plantilla propia no la
         frenaba, y un indice sobre «Pedidos / Direcciones / Descargas» no
         significa nada.
1.53.0 - MI CUENTA · el menu deja de ser barra lateral y pasa a BOTONES
         ARRIBA. No era estetica: esa columna se comia 250px + 26 de hueco, y
         la tabla de enlaces compartidos -diez columnas- se quedaba sin sitio
         y partia las fechas en tres lineas. Con el menu arriba el contenido
         recupera el ancho completo. Todo por CSS: ni plantilla ni plugin.
       - El boton activo va en navy solido; en una fila de botones el relleno
         claro de antes no bastaba para saber donde estas. «Salir» se separa
         al extremo y en movil la fila se desliza en horizontal en vez de
         apilarse en seis filas.
       - Enlaces compartidos, resumen: de rejilla segmentada a tarjetas. El
         fondo gris del contenedor asomaba por las celdas sobrantes -cinco
         cifras en una rejilla de tres- y ese recuadro vacio parecia un dato
         que falta.
       - Enlaces compartidos, tabla: nada de partir palabras, importe a la
         derecha y en negrita, franjas alternas (con diez columnas el ojo
         pierde el renglon a mitad de fila) y scroll de reserva entre 861 y
         1100px antes que volver a romper las fechas.
1.52.0 - LANDING RCI · MEDICION. Hasta ahora los tres botones reportaban la
         misma etiqueta (landing_rci), asi que era imposible saber cual
         convertia, y la profundidad solo existia como porcentaje abstracto.
       - Cada seccion lleva data-seccion (12 en total, en orden de lectura).
         Las 4 bandas verbatim no tienen <section> propio: se lo pone su banda
         desde la plantilla.
       - Medidor nuevo en 02-tracker.php: un IntersectionObserver anota en
         memoria la seccion mas profunda y se envia UN SOLO evento al salir
         (landing_profundidad). Nada de un evento por seccion: eso
         multiplicaria por doce el volumen, y bajar la factura de PostHog fue
         justo el trabajo de septiembre. Usa pagehide + visibilitychange
         porque en movil el unload no dispara al cambiar de app, que es
         exactamente como se sale de una landing de Ads.
       - btTrack ahora adjunta a cada clic la seccion en la que estaba la
         persona: no es lo mismo un clic en el hero que uno tras leerse la
         comparativa entera.
       - Botones separados: ubicacion=hero / ubicacion=cierre.
       - El texto precargado de WhatsApp termina en «Ref: RCI-ADS». Es la
         marca con la que Respond.io etiqueta SOLO el contacto como venido de
         esta campana. Si se quita, los leads vuelven a llegar sin origen.
1.51.2 - LANDING RCI · los logos de la banda de marcas se salian del
         contenedor, cruzaban la linea divisoria y cortaban las
         certificaciones. Secuela de bajar la caja de 1600 a 1180: los altos
         estaban dimensionados para la caja vieja y no los reescale.
         Medido con las proporciones reales de los seis archivos: a 52px los
         cuatro de la izquierda pedian 877px en una columna de 673. A 38px
         piden 514 y entran con holgura en 1180, 1024 y 820.
       - Ademas dejan de ser rigidos: max-width:100% + flex:0 1 auto para que
         puedan encoger, y object-fit:contain para que al encoger se reduzcan
         en proporcion en vez de deformarse. El dia que entre un logo mas
         ancho, la banda no se vuelve a romper.
1.51.1 - LANDING RCI · el sello del hero vuelve a su sitio en movil. Al centrar
         el hero lo centre tambien a el, y no toca: va anclado a la esquina de
         la imagen, que es donde se apoya. Lo centrado es SOLO el bloque de
         texto.
1.51.0 - LANDING RCI · tres sintomas, UNA sola causa: reglas genericas escritas
         como `.bt-lr section` o `.bt-lr h1` valen una clase MAS una etiqueta,
         y le ganan a cualquier regla de una sola clase por mucho que este mas
         abajo. Llevo tres rondas parcheando el sintoma; esto ataca la causa.
       - El hero sumaba DOS paddings: 62px de `.bt-lr section` mas sus 52
         propios, 114px de aire arriba. `.bt-lr__hero { padding:0 }` perdia.
       - El antetitulo del hero salia NEGRO teniendo su regla en rojo, porque
         `.bt-lr h1` le ganaba a `.bt-lr__hero-h1`.
       - Solucion: las dos genericas pasan a ser DEFECTOS dentro de :where(),
         que no suma especificidad, y el antetitulo se ancla con dos clases.
         Comprobado resolviendo la cascada, no a ojo.
       - MOVIL: el hero va centrado (solo <=620px). Apilado a una columna, el
         texto a la izquierda dejaba el lado derecho desparejo. En escritorio
         sigue a la izquierda, junto a la imagen.
1.50.0 - LANDING RCI · el logo azul de la cabecera entra en el hero, encima
         del H1. Esta landing no monta header -es de Ads y el menu es una
         fuga-, asi que sin el la pagina no decia de quien es hasta el pie.
         Es el mismo asset del header (logo-bombeo-2023.png, 281x58 reales)
         pintado a 38px de alto, 32 en movil: no se reescala por encima de su
         tamano real.
       - Aire entre los bloques de texto del hero, que iban pegados: logo 24,
         H1 16, reclamo 20, filete 22, parrafo 30.
1.49.3 - LANDING RCI · el hero era el UNICO bloque de la pagina sin aire a los
         lados en movil. Causa: .bt-lr__hero-in usaba el atajo `padding`, y ese
         atajo reescribe los CUATRO lados, borrando el margen lateral que le
         daba .bt-lr__wrap en el mismo elemento. Ahora usa padding-top y
         padding-bottom, y el lateral sobrevive.
         Comprobado que ningun otro contenedor de la landing repite el fallo:
         los cinco resuelven al mismo clamp(20px,4vw,48px).
       - De paso baja el aire vertical del hero en movil (36/40 -> 32/36), que
         con los lados a cero se veia desproporcionado.
1.49.2 - LANDING RCI · en MOVIL la imagen salia ANTES que el titular. Era una
         regla de reordenacion que yo mismo habia metido en el breakpoint de
         1100: en un movil eso es abrir la pagina con una foto sin contexto y
         el mensaje empujado fuera de pantalla. La imagen vende, pero despues
         de que el titular diga que se vende. El orden visual vuelve a ser el
         del documento.
       - El sello del hero dejaba de caber: con -14px se salia del margen
         lateral en cuanto la reticula se apila. Ahora entra dentro.
1.49.1 - LANDING RCI · NEGRO SOBRE ROJO en el titular del cierre. No era un
         color mal elegido: era un empate de especificidad.
         `.bt-lr__rojo h2` y `.bt-lr h2` valen lo mismo (una clase + una
         etiqueta), asi que decidia el orden del fichero, y la regla de
         tipografia estaba mas abajo. El titular de marcas se salvaba de pura
         suerte, por estar unas lineas por debajo.
         Ahora las dos van juntas, DESPUES de la tipografia y con dos clases
         (`.bt-lr .bt-lr__rojo h2`): el orden deja de decidir.
       - Anadida la vuelta atras dentro de la tarjeta blanca del cierre, que
         si no heredaba el blanco de la banda y se quedaba invisible.
1.49.0 - LANDING RCI · el hero deja de ser un muro de texto y pasa a vender el
         equipo. Los colores siguen sin tocarse.
       - La columna GRANDE pasa a ser la de la IMAGEN (.88/1.12, antes
         1.16/.84). En el resto de las paginas manda el texto porque explican;
         esta vende un equipo y lo que convence es verlo.
       - El reclamo baja de 40px a 27px y el parrafo de 17,5 a 16: seis lineas
         a cuerpo de titular eran un muro que empujaba la imagen hacia abajo.
       - Fondo SOLIDO #EEF3F9, el mismo de Nosotros, Polipropileno e Incendio.
         El degradado que tenia moria en #F1F1F1, o sea blanco: por eso este
         hero no se leia como los otros.
       - MISMO ANCHO EN TODA LA PAGINA. Habia tres topes escondidos que la
         hacian ver mas estrecha que el hero: el acordeon de FAQ capado a
         900px, las cifras a 1380px (heredado de la reticula de 1600 de
         Elementor) y mis propios parrafos a 78ch. Los tres fuera: manda la
         caja de la pagina. De paso, .bt-lr__encaje estaba declarado dos veces.
1.48.0 - LANDING RCI · la landing entra en la reticula del sitio. Los COLORES
         no se tocan: el rojo de la campana se queda entero.
       - Caja 1600px -> 1180px, el ancho de Nosotros, Polipropileno e
         Incendio. El 1600 venia del CSS de Elementor y dejaba la landing
         mas ancha que el resto de la web.
       - Ritmo de seccion 100/50 asimetrico -> 62px simetricos, el de las
         otras tres paginas. Eso, mas que el color, es lo que la hacia
         sentirse de otra web.
       - Hero con la geometria de /incendio/: columnas 1.16/.84, gap 48,
         padding 56/52, y los mismos cuerpos de titular, parrafo y filete.
         El reclamo pierde el max-width que lo estrangulaba a 5 lineas.
       - Las bandas dejan de llevar aire arriba: el titulo que las precede ya
         lo puso, y con los dos el bloque quedaba desgajado de su titular.
1.47.1 - LANDING RCI · hero, jerarquia intercambiada.
       - El H1 pasa a letra chica (rojo, versalitas) y el reclamo largo pasa
         a ser el texto grande. La jerarquia VISUAL no tiene por que coincidir
         con la semantica: "Sistemas de bombeo contra incendio" nombra la
         pagina pero no dice nada que el visitante no sepa ya al llegar desde
         el anuncio; la frase larga si. Google sigue leyendo el mismo H1, solo
         cambia el tamano. Sigue habiendo UN solo H1 en el documento.
       - Fuera el degradado gris de detras de la imagen: es un recorte con
         transparencia y ese panel le dibujaba una caja que no existe. El
         overflow:hidden se queda, que es lo que recorta el aire del lienzo.
1.47.0 - LANDING RCI · tres ajustes de diseno pedidos.
       - HERO con la composicion de "Nosotros": fondo claro, texto a la
         izquierda, equipo a la derecha sobre panel con sello. Se copia la
         COMPOSICION, no la paleta: alli manda el navy del tema, aqui el rojo
         de la campana. Imagen nueva sistema-contraincencio-bombeo.png, que es
         un recorte con transparencia (tRNS) y traia 236px de aire arriba y
         142px abajo en un lienzo de 1366x1152: se recorta por CSS con esos
         valores medidos sobre el PNG, sin tocar el archivo.
       - El boton del hero pasa a ROJO: sobre la foto oscura el blanco
         funcionaba, sobre fondo claro desaparecia.
       - CASOS: las tarjetas vuelven a BLANCO con tipografia negra. El rojo
         era el de produccion pero se comia el texto y convertia tres obras en
         tres manchas. El contenedor padre sigue gris y el radio 34 se queda.
       - CIERRE reorganizado: era titulo, parrafo y boton los tres centrados
         compitiendo por el mismo eje, sin nada que empujara al clic. Ahora son
         dos columnas: argumento a la izquierda con avales, y a la derecha una
         tarjeta blanca -lo unico claro sobre el rojo- con DOS vias, WhatsApp
         y telefono, porque el que no escribe a veces llama. Las cifras de la
         tarjeta salen de la banda de cifras de esta misma pagina: no hay una
         sola afirmacion nueva sobre la empresa ni promesa de tiempo de
         respuesta, que eso habria que sostenerlo.
1.46.0 - LANDING RCI · el RITMO DE FONDOS, que era el problema de verdad.
         Produccion no es una pagina blanca: alterna blanco, gris #F8F8F8 y
         bandas rojas, y ese ritmo es lo unico que separa un componente del
         siguiente. Al dejarlo todo blanco, las tarjetas blancas de ventajas
         se fundian con el papel y las cifras -que son cajas de
         rgba(255,255,255,.35), HECHAS para ir sobre rojo- no se veian.
         Leido seccion por seccion de post-119267.css, no inventado.
       - Los 4 bloques verbatim no traian caja ni fondo (vivian dentro de un
         contenedor de Elementor que se los daba). Se envuelven desde fuera.
       - El desbordamiento de la ficha tecnica no era la falta de caja: era
         que un hijo de grid no baja de su min-content. min-width:0.
       - Las 4 ventajas recuperan su placa #292929 con el icono de Font
         Awesome inline; llevaban un 01/02/03 rojo que me invente.
       - Las tarjetas de caso van rojas con radio 34, como en produccion.
       - El bloque .bt-cta estaba pegado TRES veces y el ultimo ganaba por
         orden: el boton del hero salia blanco por accidente de cascada.
         Ahora se define una vez, y blanco a proposito.
       - "La ruta correcta" pasa ANTES de la comparativa: explica lo que se
         va a comparar. Partials renumerados al orden de ejecucion.
       - Fuera el :hover que levantaba las tarjetas: sin enlace detras,
         seguia prometiendo un clic.
       - INDICE: ya no se cuela en paginas con plantilla propia. Estaba
         apareciendo en PRODUCCION dentro de /landing-contra-incendio/,
         porque Elementor pasa por the_content el contenido de sus widgets
         y lo hace dentro del bucle principal.
1.45.2 - LANDING RCI · composicion del hero y de la banda de marcas. No era CSS
        roto: estaba mal COMPUESTO.
        · HERO: el degradado llegaba al 72%% de negro por la izquierda y convertia
          ese tercio en un rectangulo vacio — parecia un error, no una foto.
          Ahora el velo es UNIFORME (.58) con un refuerzo corto solo donde va el
          texto. Y el texto pasa a ocupar una COLUMNA (7/5) de la caja en vez de
          ser un bloque suelto: con la caja de 1600px centrada en pantalla ancha
          se quedaba flotando en mitad del hero.
        · ANTETITULO: son seis lineas en versalitas. Al tamano del titular
          competia con el. Baja de cuerpo y gana medida.
        · MARCAS: las columnas eran 1fr/1fr con CUATRO logos a un lado y DOS al
          otro, asi que los cuatro se partian en dos filas y la linea quedaba
          descentrada. Se reparten 2,2 a 1 y los logos van en UNA fila.
        · LOGOS: tienen proporciones muy distintas y se veian de tamanos
          dispares. Se les iguala el ALTO, que es lo unico que los hace ver del
          mismo tamano optico.
1.45.1 - LANDING RCI · corregida al diseño REAL de produccion. En 1.45.0 la
        reconstrui sin estudiar el diseño y quedo con la identidad del TEMA, que
        no es la de esta landing. Se leyo el CSS que Elementor generaba
        (post-119267.css + kit post-23.css) y se corrigio:
        · TIPOGRAFIA: Poppins 400/700. Yo habia usado 800 con letter-spacing
          NEGATIVO —el estilo del tema, Archivo apretado—. Los antetitulos van
          en VERSALITAS con tracking +4px, ancho, no apretado.
        · ANCHO: caja de 1600px, no los 1180 del tema.
        · HERO: recupera su IMAGEN DE FONDO a sangre (banner-2.png, 627px de
          alto) con degradado para que el texto blanco se lea. Yo la habia
          omitido por completo.
        · MARCAS: banda oscura #2D2D2D a sangre y dos columnas separadas por
          linea —marcas integradas y certificaciones—, como en produccion. Los
          logos son blancos: sobre fondo claro desaparecian.
        · COLORES: #E30613 acento · #111111 titulares · #414141 texto.
        · Fuera la raya ambar del tema, que aqui no existe.
        · Se retiran los 6 enlaces `href="#"` de las tarjetas de tableros: no
          llevaban a ninguna parte y prometian un clic inexistente. El unico
          enlace de la pagina es el WhatsApp.
1.45.0 - LANDING DE LA CAMPANA RCI sin Elementor. Nueva plantilla
        `page-landing-contra-incendio.php` + `template-parts/pagina/landing-rci/`
        (16 ficheros). Es la landing de Google Ads: 1.596 visitas en 90 dias,
        1.561 de pago, 11,7% de conversion. La mas delicada del sitio.
        🔴 PLANTILLA CANVAS: no llama a get_header() ni get_footer(). Escribe su
        propio <html> y solo invoca wp_head() y wp_footer(). En Elementor esto
        lo daba `elementor_canvas`; en una landing de campana el menu y el pie
        son fugas.
        🔴 SEGUIMIENTO INTACTO: se verifico contra produccion que GTM
        (GTM-P4R5FGV) y PostHog los inyecta un PLUGIN por wp_head(), no el tema,
        asi que la medicion de Ads no se toca. El tracker `btTrack` que dispara
        `whatsapp_click` a PostHog y al dataLayer viaja VERBATIM.
        LOS SIETE BLOQUES de HTML crudo que vivian dentro de widgets de Elementor
        se conservan VERBATIM: ya eran codigo puro autocontenido, sin una sola
        dependencia del plugin (tracker, CTA de portada, comparativa UL/FM,
        contadores, tarjetas ATX, acordeon FAQ y CTA de cierre). Solo se retiro
        un @import de Google Fonts, porque el tema ya encola Poppins.
        SE RECONSTRUYO lo que ataba la pagina al plugin: titulares, parrafos,
        logos, iconos y los 3 carruseles de casos, que ahora usan el componente
        compartido del tema.
        Texto verificado contra produccion: 0 bloques perdidos. Los logos
        recuperan el srcset que Elementor si servia (bombeo_lr_logo), para no
        bajar un archivo de 1024 px y pintarlo a 160 en movil.
        🔴 AL DESPLEGAR hay que BORRAR el meta `_wp_page_template` de la pagina:
        mientras valga `elementor_canvas`, WordPress ignora esta plantilla.
1.44.4 - CONTRA INCENDIO · portada reequilibrada. Las columnas pasan de
        .88fr/1.22fr a 1.16fr/.84fr: el texto estaba demasiado angosto y el
        titular se partia en cinco lineas. La lamina se estrecha, pero sigue
        viendose mas grande que antes porque en 1.44.3 se le quito el aire
        transparente.
        LEAD ACORTADO por Oswel: de 316 a 194 caracteres, diciendo lo mismo
        (NFPA 20, certificados UL, mano de obra local, puesta en marcha, soporte
        y repuestos). Es el SEGUNDO texto que se cambia a proposito en esta
        pagina; el original queda escrito en el comentario de 00-datos.php.
1.44.3 - CONTRA INCENDIO · se recorta el AIRE TRANSPARENTE de la lamina del hero.
        El PNG de produccion (1600x1228) trae 193 px vacios a la izquierda y 174
        a la derecha: empequeñecian el dibujo y estrechaban la columna de texto.
        Se midio el canal alfa y el contenido real ocupa 1233 x 1181 px,
        relacion 1,044 — casi 1:1. Se recorta con esas cifras exactas por CSS
        (marco con aspect-ratio + overflow, imagen al 129,765% desplazada
        -15,653% / -2,794%), SIN tocar el archivo de produccion. El sello queda
        fuera del marco para que el overflow no se lo coma.
1.44.2 - CONTRA INCENDIO · la lamina del hero se ve SIN CAJA. Es un PNG con
        transparencia real (paleta + tRNS), asi que se le quitan fondo blanco,
        borde redondeado, sombra y el recorte a 4/3: ahora se recorta sola
        contra el degradado, a su proporcion natural. Y MAS GRANDE: la columna
        de la imagen pasa de .92fr a 1.22fr. El sello baja a apoyarse en la base
        de la lamina.
1.44.1 - CONTRA INCENDIO · la foto del hero pasa a ser la lamina de los DOS
        TABLEROS (electrico y diesel), que resume la pagina entera en una
        imagen. Encaja sin recorte: 1600x1228 = relacion 1,30 contra el 1,33 que
        pide el hero. La foto del equipo ensamblado que estaba arriba BAJA a la
        seccion del tablero, asi no queda ninguna imagen huerfana.
1.44.0 - POLIPROPILENO y CONTRA INCENDIO · el SELLO flotante sobre la foto del
        hero, calcado del de «Nosotros» (navy, borde ambar a la izquierda,
        desbordado 18px y sombra). Las tres portadas del sitio se comportan
        ahora igual.
        Polipropileno: «Preensamblado en fabrica · Probado y listo para conectar».
        Contra incendio: «NFPA 20 · RETIE · Ensamble nacional».
        🔴 Nota: este texto es NUEVO, no viene de produccion. Se anade con el
        visto bueno expreso de Oswel; sale de lo que la propia pagina afirma mas
        abajo, no de una invencion. En contra incendio es el mismo sello que se
        habia retirado en 1.43.0 por no estar aprobado.
1.43.2 - POLIPROPILENO · fuera tambien la BARRA FIJA, igual que en contra
        incendio: las dos paginas son hermanas y deben comportarse igual.
        `07-cta-fija.php` pasa a `07-cierre.php`.
        CONTRA INCENDIO · antetitulo del hero REESCRITO por Oswel: el de
        produccion decia «¡ Proteja su inversion y garantice la seguridad de sus
        instalaciones con la confianza y eficiencia !» — largo y de usted. Ahora
        es «¡Protege tu inversion y garantiza tu seguridad!»: corto y tutea.
        Es el PRIMER texto de estas paginas que se cambia a proposito; el resto
        sigue siendo literal de produccion.
1.43.1 - CONTRA INCENDIO · fuera la BARRA FIJA inferior con el boton de WhatsApp.
        Tapaba el pie y estorbaba al leer una pagina que ya reparte siete
        llamadas a la accion por el cuerpo. `08-cta-fija.php` pasa a
        `08-cierre.php` y solo imprime el script del carrusel.
1.43.0 - CONTRA INCENDIO NACIONAL sin Elementor: nueva plantilla
        `page-sistema-de-bombeo-contra-incendio-nacional-uso-comercial-e-industrial.php`
        + `template-parts/pagina/incendio/` (00-datos · 01-estilos · 02-portada ·
        03-respaldo · 04-electrico · 05-tablero · 06-diesel · 07-porque ·
        08-cta-fija). Misma URL que produccion. Es la pagina con mas organico
        del sitio fuera de fichas: 31 clics y posicion 7,4 en 90 dias.
        🔴 NI UNA PALABRA CAMBIADA. Verificado con diff contra produccion:
        0 bloques perdidos de 145. Se conservan los saltos de linea sueltos,
        el «numeral 20,28» y el titular que acaba en «…puede ofrecer!».
        Se aplica wptexturize para que «PORQUE USAR NUESTROS...» salga con el
        mismo caracter de puntos suspensivos que pinta WordPress en produccion.
        LO QUE SI CAMBIO, POR CONVERSION: accion sobre el pliegue (en produccion
        quedaba tras dos titulares); BARRA FIJA (es de las paginas mas largas);
        las 5 piezas de cada sistema pasan de diez bloques apilados a tarjetas
        numeradas, para comparar electrico contra diesel de un vistazo; cada
        sistema recibe su acento (navy el electrico, rojo el diesel) porque en
        produccion se leian iguales; el tablero ATX sube a banda navy.
        Las DOS repeticiones del bloque «PORQUE USAR NUESTROS…» se unifican en
        una con los seis iconos: lo unico que deja de repetirse es el titular,
        que en produccion estaba escrito dos veces identico.
        🔴 ERRATAS DE PRODUCCION CONSERVADAS y aisladas en constantes propias de
        00-datos.php para poder cambiarlas en un segundo: dos botones llevan el
        mensaje de WhatsApp de POLIPROPILENO en una pagina de NFPA 20, y un
        boton sale del sitio hacia atxco.group.
1.42.3 - POLIPROPILENO · el hero adopta el estilo del de «Nosotros»: fondo CLARO
        en degradado con borde inferior, dos columnas (texto + foto), H1 navy,
        raya ambar y las certificaciones como fichas blancas bajo el texto, en
        vez de logos sueltos sobre navy.
        La foto de portada es la PRIMERA de la galeria de obra, que pasa a pintar
        las tres restantes: asi no se repite ninguna imagen en la pagina
        (verificado, 0 duplicadas).
1.42.2 - POLIPROPILENO · seccion de Tableros ATX a DOS COLUMNAS: texto a la
        izquierda, carrusel a la derecha. Se retira el logo de ATX que habia
        encima: la marca ya se nombra en el texto y en la composicion, y competia
        con el titular.
        CARRUSEL: el componente compartido acepta AUTOAVANCE opcional
        (bombeo_carrusel(..., $auto) en milisegundos). Aqui va a 4 s. Se detiene
        al pasar el raton, al enfocarlo con teclado, al tocarlo, cuando sale de
        pantalla (IntersectionObserver, no gasta nada fuera de vista) y si el
        sistema pide menos animacion. Los 6 carruseles de Nosotros NO lo llevan:
        verificado, 0 atributos data-auto alli.
1.42.1 - POLIPROPILENO · corregido a la linea del tema. En 1.42.0 me sali de ella:
        habia metido un DEGRADADO en la portada, botones en VERDE WHATSAPP con
        icono SVG y sombra de color, un AZUL #E30613 que no existe en el tema y
        un circulo decorativo. Todo fuera. Ahora usa el mismo boton que Nosotros
        (ambar, texto navy, sin icono), portada en navy PLANO y borde superior
        navy en las tarjetas. Paleta reducida a la del tema.
        Ademas se RECUPERA EL PESO de dos titulares que en Elementor eran <p>
        grandes y yo habia degradado a etiqueta diminuta en versalitas:
        "¡ Garantice agua segura para su proyecto ! " y "Tableros para Sistemas
        de presion Constante". Y se retira el sello "NTC 4897 / Agua potable",
        que era copy inventado por mi: la regla era no anadir ni una palabra.
        Texto verificado contra produccion: 0 bloques perdidos de 67.
1.42.0 - POLIPROPILENO sin Elementor: nueva plantilla
        `page-sistema-de-presion-de-agua-polipropileno-uso-comercial-industrial.php`
        + `template-parts/pagina/polipropileno/` (00-datos · 01-estilos ·
        02-portada · 03-beneficios · 04-composicion · 05-normativa ·
        06-tableros · 07-cta-fija). Misma URL que produccion.
        🔴 NI UNA PALABRA CAMBIADA, por indicacion expresa: se conservan incluso
        las erratas de origen ("tranquilidad nde saber", "Tuberias" sin tilde,
        los espacios de "¡ Garantice agua segura ... ! "). Verificado con 15
        frases literales contra el texto de produccion.
        LO QUE SI CAMBIO, POR CONVERSION: la accion sube sobre el pliegue (en
        produccion el primer boton quedaba tras el titular, un parrafo largo y
        dos logos); BARRA FIJA que aparece al pasar la portada; los 5 beneficios
        pasan de muro de texto a tarjetas escaneables; la norma NTC4897 sube a
        banda propia (es lo que mas diferencia frente a quien vende PVC y estaba
        perdida); las 5 piezas pasan a lista con check y fotos fijas al lado; y
        un solo tipo de accion en toda la pagina (WhatsApp verde), sin nada que
        compita.
        CARRUSEL ahora es COMPONENTE COMPARTIDO (`template-parts/pagina/carrusel.php`):
        estaba duplicado en Nosotros y hacia falta aqui. CSS y JS se imprimen una
        sola vez por pagina. Nosotros migrada a el, render identico verificado
        (6 carruseles, 23 fotos, 143 imagenes).
1.41.0 - NOSOTROS refactorizada con la MISMA convencion que la home: cada seccion
        es un componente autocontenido en `template-parts/pagina/nosotros/`
        (00-datos · 01-estilos · 02-portada · 03-historia · 04-marcas-propias ·
        05-infraestructura · 06-equipo · 07-aliados · 08-casos-de-exito ·
        09-cierre). `page-nosotros.php` pasa de 819 a 66 lineas y solo orquesta.
        Se queda en la RAIZ del tema porque la jerarquia de plantillas de
        WordPress solo busca `page-{slug}.php` ahi, no en template-parts/.
        Las partes se cargan con `require` y no con get_template_part() para que
        hereden los arrays de 00-datos.php sin pasarlos a mano.
        Render identico, verificado: 143 imagenes, 6 carruseles, 4 KPIs, 39 logos,
        1 solo H1.
1.40.5 - NOSOTROS · reparto de fotos y seccion de infraestructura. (a) La foto del
        SHOWROOM (WhatsApp 2026-05-26 10.47.15) pasa de infraestructura a la
        seccion de HISTORIA, que ahora es dos columnas: foto vertical con pie
        ("El showroom, abierto desde 2021") + linea de tiempo VERTICAL a su lado.
        (b) INFRAESTRUCTURA se queda SIN IMAGENES, por peticion: pasa a banda navy
        —el unico corte oscuro de la pagina, para que respire— con las 6
        capacidades en dos columnas sobre fondo oscuro y una ficha de visita
        BLANCA que resalta encima: direccion, horario, telefono y los botones
        "Como llegar" (Google Maps) y "Escribir antes de ir" (WhatsApp).
        Se retira el CSS muerto de la rejilla y las fotos anteriores.
1.40.4 - NOSOTROS (incluye el titular de marcas propias, que repetia el mismo error:
        "No solo lo vendemos: lo fabricamos" -> "Las marcas que fabrica el grupo") · correcciones de fondo, no de forma. (a) Fuera "planta propia":
        Bombeo.co es la TIENDA ESPECIALIZADA del grupo, no la fabrica. La planta es
        de Automex y asi se dice ahora, en su propio bloque. El hero pasa a decir
        lo que si es: tienda + asesoria tecnica + atencion presencial + ejecucion
        de proyectos. (b) FOTO del hero: entra la del SHOWROOM (la que estaba mas
        abajo) y el sello pasa a "Showroom en Bogota · zona ferretera". (c) Como el
        showroom sube al hero, "Quienes somos" se rehace como LINEA DE TIEMPO
        (2018 · 2020 · 2021 · hoy), que cuenta la historia mejor que un parrafo y
        no compite por fotos. (d) La seccion de infraestructura se rehace como
        SHOWROOM Y TALLER: dos fotos con rotulo, ficha de visita con direccion,
        horario, telefono y botones de "Como llegar" y WhatsApp, y debajo las 6
        capacidades en rejilla de 3. Antes era una rejilla plana sin un solo dato
        util para ir al local.
1.40.3 - NOSOTROS · portada y cifras. (a) El HERO deja de ser azul: fondo claro en
        degradado, a dos columnas (texto + foto con sello flotante). Se hizo para
        que las CERTIFICACIONES quepan dentro de la portada y se lean —sobre navy
        los logos de ISO y RETIE no se distinguian. Ahora van ahi, con su logo
        real y que significa cada una. (b) Se ELIMINA la seccion "Nuestros
        certificados", que quedaba redundante. (c) Los 4 KPIs dejan de ser tarjetas
        genericas ("Respaldo / 7 / 2 / Colombia") y pasan a franja editorial con
        datos VIVOS del catalogo: anios desde 2018, productos publicados, marcas
        con producto y referencias de fabricacion propia. Ninguno esta escrito a
        mano: si entran 200 productos, la pagina se actualiza sola.
1.40.2 - NOSOTROS · marcas propias rehecha. Antes eran 6 tarjetas iguales con un
        parrafo cada una, sin jerarquia ni salida. Ahora la seccion cuenta lo que
        de verdad es: AUTOMEX es el FABRICANTE (bloque destacado en navy, con sus
        sellos RETIE / ISO 9001:2015 / planta / desde 2008 y el total de
        referencias propias), ATX, Inomax, Norris y HydroSmart son SUS MARCAS DE
        PRODUCTO (tarjetas enlazadas a /marcas/<slug>/, con que fabrica cada una y
        su numero de referencias), y AXT Co Group es la UNIDAD DE SERVICIOS, en
        una franja aparte porque no fabrica producto.
        El numero de referencias se LEE de la taxonomia product_brand en cada
        carga, con la cifra del array como respaldo si el termino no existe (el
        clon local tiene menos catalogo). Ademas la seccion pasa a aportar 4
        enlaces internos a las paginas de marca, que ya tienen texto SEO propio.
1.40.1 - NOSOTROS · casos de exito: cada caso vuelve a ser un CARRUSEL propio, como
        en la version de Elementor, sobre fondo gris. Antes eran una rejilla de
        miniaturas. Carrusel sin librerias: la pista es un contenedor con
        scroll-snap —arrastrar con el dedo funciona solo, sin JS— y los botones,
        los puntos y las flechas del teclado unicamente desplazan ese scroll.
        Contador "n / total", botones que se desactivan en los extremos, y los
        casos de una sola foto ocultan controles (.bt-car--unica). Respeta
        prefers-reduced-motion.
1.40.0 - NOSOTROS sin Elementor: nueva plantilla `page-nosotros.php` (WordPress la
        toma sola por el slug). Migra las 9 secciones: portada, cifras, quienes
        somos, 6 marcas propias, infraestructura, equipo, 39 logos de aliados,
        certificados y 6 casos de exito con galeria. Incluye los 4 bloques de HTML
        CRUDO que vivian dentro de widgets de Elementor. Cambios deliberados:
        paleta unificada a la del tema (#101216/#F5A623 en vez del #0F4C81/#F5B800
        del kit viejo de Elementor), fuera los 4 @import a Google Fonts que cada
        bloque cargaba por su cuenta (el tema ya encola Poppins) y fuera los
        !important que hacian falta para pelear contra Elementor. El contenido vive
        en arrays al principio del fichero, para ajustarlo sin tocar el marcado.
        FOOTER: se suman Aviso de privacidad y Cookies a la barra legal.
1.39.2 - FOOTER: enlaces legales al esquema de URLs nuevo, que se explica solo
        (garantias-devoluciones-y-envios, tratamiento-de-datos-personales,
        terminos-y-condiciones, peticiones-quejas-y-reclamos). Se quitan las
        llamadas a slugs muertos: ahora las rutas viejas y los atajos los resuelve
        el motor de 301 de bombeo-core 0.35.0 (opcion `bombeo_redirecciones`),
        que es donde corresponde.
1.39.1 - INDICE DE CONTENIDOS visible: el bloque usaba --suave (#F4F5F7), que es
        EXACTAMENTE el mismo color del fondo de pagina (--bombeo-bg), asi que se
        perdia. Ahora va un escalon mas oscuro, con la pareja que ya usan las
        tarjetas de producto (#EDF1F6 sobre borde #DDE4EC). Aplicado en page.php
        y en single.php.
1.39.0 - PAGINAS ESTATICAS sin Elementor, fase 1 (legal + confianza). (a) NUEVO
        `page.php`: hasta ahora las paginas caian en la plantilla del tema padre
        (hello-elementor). Es el chrome comun de todas las paginas que salgan de
        Elementor — migas, H1, tipografia, tablas, avisos (bloque Cita), FAQ con
        <details> nativos e indice automatico. Los documentos largos (3 H2 o mas)
        muestran ademas la fecha de actualizacion; las paginas cortas no.
        (b) INDICE DE CONTENIDOS: ahora tambien en paginas, no solo en entradas
        (la portada queda excluida). El rotulo es contextual — "En este articulo"
        en entradas, "Contenido de esta pagina" en paginas — y filtrable con
        `bombeo_indice_rotulo`. Antes una pagina de politicas decia "En este articulo".
        (c) NUEVO `template-parts/pagina/faq-schema.php`: emite JSON-LD FAQPage a
        partir de los bloques "Detalles" de la pagina. Sin configuracion: si hay
        preguntas, hay schema. Las respuestas todavia marcadas con <mark> (pendientes
        de confirmar) se OMITEN del schema, para no publicar un marcador interno como
        respuesta oficial. AIOSEO no genera FAQPage, no hay duplicado.
        (d) FOOTER: los enlaces legales apuntaban a 5 slugs que NO EXISTEN
        (`garantias`, `devoluciones`, `pqrs`, `politica-de-privacidad`, `terminos`).
        El helper los descartaba en silencio, asi que la columna "Cliente" solo
        mostraba Mi cuenta / Mis pedidos y la barra legal NO SE PINTABA. Ahora
        apuntan tambien a las paginas que existen de verdad; los slugs viejos se
        dejan puestos a proposito, se encienden solos si algun dia se crean.
1.38.9 - BLOG sin Elementor, fase 1. Nuevo `template-parts/blog/blog.php` (helpers
        compartidos por single.php y home.php): (a) la categoría POR DEFECTO ya no se
        muestra (ni sobre el título ni en las tarjetas del hub): el blog no tiene
        páginas de categoría, las categorías son solo de productos; (b) PRODUCTOS
        RELACIONADOS salen de los productos insertados con los shortcodes del core
        (sku y variaciones resueltos) y se completan con los MÁS VENDIDOS — antes
        dependían del slug `bombas-centrifugas`, que no existe en prod, y la sección no
        salía; cacheado 12 h por entrada; (c) ÍNDICE DE CONTENIDOS automático desde los
        H2 en artículos largos (3+ H2), <nav>+<ol> nativo sin JS, ids únicos,
        scroll-margin para el header fijo. Filtros: bombeo_blog_categoria_visible,
        bombeo_blog_relacionados_ids, bombeo_blog_indice_min_h2.
1.38.8 - BLOG/ARTÍCULOS en código puro + SHORTCODES DE PRODUCTO. (a) Plantillas nuevas
        `home.php` (hub de guías: destacado, rejilla, banda de venta, enlaces a categorías)
        y `single.php` (chrome del artículo; sin imagen destacada en el cuerpo —solo OG y
        tarjetas—; FAQ con bloques Detalles nativos). Contenido en formato ESTÁNDAR de
        WordPress (bloques) + shortcodes. (b) La LÓGICA de los shortcodes vive en
        bombeo-core 0.34.0 (includes/contenido/); el theme SOLO aporta el CSS de los
        componentes (prefijo `.bsc-`: card, barra, mini, comparativa, destacado, botón
        navy de marca) y declara add_theme_support('bombeo-shortcodes') para que el core
        no encole su respaldo. Requiere core 0.34.0 (subir core primero o a la par).
1.38.7 - CORREOS: pulido visual del contenido. (a) TABLAS del pedido en TODOS los
        correos (cliente incluido): encabezado navy en mayúsculas, celdas con más
        aire y bordes suaves, y el TOTAL resaltado (fondo azul claro, navy, grande)
        vía la clase `order-totals-total`; dirección en tarjeta suave; `hr` más
        tenues. (b) SOLO en «Nuevo pedido» (admin): franja de resumen arriba
        (Nueva venta + total + pedido/método de pago), tarjeta del Comercial con
        AVATAR de inicial, y el «Enhorabuena por la venta.» reemplazado por un
        botón «Ver pedido en el panel». (c) Se QUITA la promo de la app de
        WooCommerce («Consigue la aplicación», link a woocommerce.com/mobile) de
        los correos de admin. Todo por hooks en template-parts/emails/branding.php
        (before/after_order_table, additional_content_new_order, mail_content), sin
        override de plantillas ni cambios en el core.
1.38.6 - CORREO «Nuevo pedido» (operación/admin): muestra QUÉ COMERCIAL hizo la
        venta. Hook nuevo `woocommerce_email_after_order_table` en
        template-parts/emails/branding.php, restringido a `$email->id ===
        'new_order'` → NO aparece en ningún correo del cliente. Lee el meta
        `_bombeo_comercial` que bombeo-core ya estampa en el checkout cuando la
        venta viene de un carrito compartido o cotización (includes/descuentos/
        enlazar-pedido.php); las ventas directas se rotulan «Venta directa». Solo
        display, sin cambios en el core ni migración de datos.
1.38.5 - CORREOS DE WOOCOMMERCE con estilo Bombeo (nuevo `template-parts/emails/
        branding.php`, cargado en functions.php). Se hace por HOOKS (no override de
        plantillas) → sobrevive a updates de Woo, sin romper estructura ni datos
        dinámicos. Aplica: logo AZUL en cabecera; fondo neutro + tarjeta blanca
        (borde+sombra); encabezado navy centrado; FOTO del producto en la tabla del
        pedido (`woocommerce_email_order_items_args` show_image); pie con NIT/
        dirección/contacto + iconos RRSS (fuera el "Built with WooCommerce"); y
        remitente "Bombeo colombia" para los wp_mail sueltos (reseñas) — los de Woo
        ya traen su From. Datos de empresa viven en el theme (no en el core
        reutilizable). ⚠️ Iconos RRSS por Icons8 (hospedar en bombeo.co a futuro);
        URLs de Facebook/Instagram pendientes de confirmar.
1.38.4 - FICHA/RESEÑAS: la sección de reseñas ahora PINTA LA LISTA A MANO (no el
        template nativo). Motivo: bombeo-core 0.33.0 cierra `comments_open` en
        productos para que NADIE reseñe salvo por el enlace del correo
        (/resena/<token>, compra verificada); el template nativo se auto-oculta
        con comments_open=false y se perdía TODA la sección. Ahora se listan los
        comentarios `review` aprobados (promedio + estrellas + badge "Compra
        verificada" + texto + fecha), SIN formulario público. Requiere core
        0.33.0 (subir core primero o a la par). 100% CSS+PHP de plantilla.
1.38.3 - TIENDA/CATEGORIAS: los FILTROS ahora quedan FIJOS (sticky) al hacer
        scroll por los productos (desktop). Causa del bug: el sticky estaba en
        .bt-filters, pero su contenedor (.bt-shop__filters) mide lo mismo que su
        contenido -> no habia recorrido para pegarse. Fix: el sticky pasa al grid
        item (.bt-shop__filters), que vive dentro de .bt-shop__layout (alto) y si
        da recorrido; top:20px (misma convencion que el aside de checkout). Panel
        muy largo -> scroll interno propio (max-height + overflow-y:auto). Solo
        aplica en >=861px; el drawer movil (<=860px) NO se toca. Cambio 100% CSS.
1.38.2 - HOME/HERO: campana "match perfecto" — 6 banners promocionales nuevos
        (SOLO TIENDA FISICA, no online) reemplazan los 3 banners de producto del
        hero. Cada banner pinta SOLO el titular superpuesto (sin lead ni CTA a
        catalogo, para no inducir compra online) + AVISO LEGAL fijo al pie
        (descuentos validos en tienda fisica, Cra. 27 #15-10 Paloquemao, hasta
        30-sep-2026). Imagenes 1600x626 por URL (uploads/2026/09). VENCE 30-sep:
        restaurar los banners de producto desde 1.38.1. (Este paquete incluye
        tambien el fix 1.38.1 del popup movil, que aun no se habia desplegado.)
1.38.1 - Popup de crear cotizacion en MOVIL: el boton "Crear cotizacion" quedaba
        oculto abajo (tocaba pasar a "vista escritorio" para poder generar). Causa:
        en movil la caja usaba min-height:100dvh + max-height:none (altura SIN
        acotar), asi el formulario crecia mas que la pantalla y el scroll interno
        nunca se activaba. Fix: acotar a height:100dvh (como ya hacia la vista
        escritorio con max-height:90vh) -> .bt-cot__scroll scrollea y el pie queda
        fijo y visible. Ademas: campos a 16px SOLO en movil para que iOS no haga
        zoom al enfocar cada campo. Cambio 100% CSS del popup (inline en el footer),
        sin tocar logica ni core.
1.38.0 - Popup de crear cotizacion: campo nuevo "Condiciones comerciales"
        precargado con las de Cotizaciones -> Ajustes y editable para cada
        cotizacion (el guardado y el render por cotizacion los hace core
        0.32.5 -> subir core primero). El JS envia el campo en el POST.
        Layout HORIZONTAL en 2 columnas (datos del cliente a la izquierda,
        condiciones a la derecha) con el boton fijo en el pie; el paso de
        "cotizacion creada" sigue centrado y angosto. Movil: una columna.
1.37.1 - Se retiran los avisos de "precios sujetos a cambio": el bloque del
        cajon del carrito (mini-cart.php) y, en la ficha, SOLO la frase de
        "queda en firme al confirmarse su pedido" — el primer parrafo de la
        ficha (equipos de importacion) se conserva.
1.27.0 - EL RUT ES OBLIGATORIO PARA TODOS, persona natural incluida.

        Razon del negocio: Bombeo esta obligado a facturar toda venta, y sin
        RUT no se puede emitir la factura. Da igual quien compre.

        Ya no se le oculta a la persona natural; solo cambia el texto. Y la
        friccion la absorbe el propio sistema: el documento se guarda en la
        PERSONA, asi que de la segunda compra en adelante el cliente ni lo ve.


1.26.0 - DATOS DE FACTURACION: primero a nombre de QUIEN se factura.

        El orden es: tipo de persona -> documento -> razon social -> nombre ->
        apellidos -> correo -> telefono.

        Preguntar el tipo PRIMERO no es estetica: decide si el documento es
        cedula o NIT, si hace falta razon social y si el RUT tiene sentido.
        Preguntarlo despues obligaria al cliente a volver atras a corregir lo
        que ya habia escrito.

        🔴 EL JS SOLO ADAPTA; QUIEN VALIDA ES EL SERVIDOR. Ocultar la razon
        social no impide enviarla vacia, asi que se exige en
        woocommerce_after_checkout_validation. Probado: empresa sin razon
        social se RECHAZA; persona natural pasa.

        Y el RUT en Mi cuenta -> Detalles de la cuenta: quien lo sube una vez
        no vuelve a subirlo. El pedido conserva copia del que se uso, porque
        si el cliente lo cambia el ano que viene, las compras viejas tienen
        que seguir apuntando al que era valido entonces.


1.25.0 - RUT en el checkout, y la tarjeta pasa a llamarse DATOS DE FACTURACION.

        La cedula o NIT estaba en la tarjeta de ENVIO por herencia del orden
        de campos de WooCommerce, no por criterio: es un dato fiscal, no de
        entrega. Ahora va con el resto de datos de facturacion, y justo
        debajo el RUT — los dos son el mismo tramite.

        🔴 EL FICHERO SE SUBE APARTE, AL ELEGIRLO. WooCommerce envia el
        checkout por AJAX con jQuery .serialize(), que NO incluye ficheros:
        un <input type=file> normal no llegaria JAMAS al servidor, y el fallo
        seria invisible — el cliente veria su documento seleccionado y el
        pedido entraria sin el.

        Aqui solo el aspecto y el JS. La subida, el almacenamiento protegido y
        el control de acceso viven en bombeo-core v0.14.0.


1.24.0 - Descuento detallado en el resumen del pago y corregidos los avisos.

        El descuento ya no sale como un banner arriba: va DENTRO de la tabla
        de totales, con precio de lista tachado en rojo, la rebaja y el neto.
        Un banner es un anuncio; en el resumen es una cuenta.

        🔴 EL AVISO DEL 25 %% LEIA UNA CIFRA CONGELADA. window.bombeoDto.lista
        se calculaba UNA VEZ al cargar la pagina, asi que si el comercial
        cambiaba cantidades o anadia productos —lo normal mientras arma un
        carrito— el aviso mentia justo cuando mas falta hace acertar. Ahora se
        lee de data-dto-lista, que se regenera con el cajon.

        Y en el cajon se enseña la cuenta entera. Antes solo la resta, y como
        el subtotal YA viene descontado parecia que se restaba dos veces.

        Acompana a bombeo-core v0.13.0, que corrige seis fallos —dos de dinero—
        encontrados en una revision adversarial de 32 agentes.


1.23.0 - DESCUENTO COMERCIAL: interfaz del cajon y linea visible para el cliente.

        El comercial fija un porcentaje —general o por producto, EXCLUYENTES—
        y comparte el carrito con el descuento ya aplicado. Sustituye a los
        cupones, que se filtran y acaban usandolos quienes no debian.

        Aqui solo esta el aspecto y el JS. El calculo vive en bombeo-core
        v0.12.0, que es donde tiene que estar: es dinero, y no puede depender
        de que el theme siga siendo este.

        El PANEL solo lo ven admin y comerciales; la LINEA del descuento la ve
        todo el mundo — si el cliente solo viera un precio mas bajo no
        percibiria el beneficio.

        Sin tope, por decision del usuario. Pero a partir del 25 %% el dialogo
        pide confirmacion ENSEÑANDO EL IMPORTE EN PESOS: con productos de hasta
        369 millones, un 50 escrito donde iba un 5 son 184 millones regalados.
        No limita nada; solo enseña lo que se esta firmando.


1.22.0 - Estilo del aviso de 'ese enlace es de otro comercial' y del campo de
        WhatsApp que ahora vive en Mi cuenta. Acompana a bombeo-core v0.11.0,
        que corrige siete fallos encontrados en una revision adversarial.


1.21.0 - EL ASESOR COMERCIAL, VISIBLE PARA EL CLIENTE.

        Cuando alguien llega por un carrito compartido, en la pagina de pago
        ve quien se la preparo y un boton de WhatsApp para escribirle.

        Aqui solo esta el ASPECTO. El marcado lo pinta bombeo-core v0.10.0,
        que es quien sabe de que enlace viene el visitante.

        La pantalla de enlace caducado NO usa este CSS: es autocontenida a
        proposito —no depende del theme ni de WooCommerce— porque tiene que
        funcionar pase lo que pase. Alli los estilos van incrustados.


1.20.0 - 🔴 EL FOOTER ENVIABA CLIENTES A PAGINAS QUE NO EXISTEN.

        Ocho enlaces del footer daban 404. No era teorico: el registro de
        bombeo-core conto visitantes REALES llegando desde el home en 5 dias
        — 20 golpes a /politica-de-privacidad/, 17 a /trabaja-con-nosotros/,
        17 a /servicios-tecnicos/, 15 a /pqrs/, 12 a /garantias/, 11 a
        /devoluciones/, mas /terminos/ y /politica-de-tratamiento-de-datos/.
        Ninguna de las siete paginas existe todavia en la base de datos.

        La salida obvia era comentar los enlaces, pero eso deja el trabajo
        pendiente en la memoria de alguien. Con bombeo_ft_li() y
        bombeo_enlace_pagina() el enlace se pinta SOLO si la pagina existe y
        esta publicada: el dia que se publique vuelve por si mismo, sin tocar
        esta plantilla y sin que nadie tenga que acordarse de nada.

        Y un bug que llevaba tiempo ahi: "Mis pedidos" apuntaba a
        /mi-cuenta/orders/ y devolvia 404. El endpoint de esta instalacion es
        /mi-cuenta/pedidos/ — estaba en ingles. Ahora se resuelve con
        wc_get_endpoint_url(), asi que no se vuelve a romper aunque se cambie
        el slug del endpoint.

1.19.0 - El enlace de cuenta del header saluda por el NOMBRE cuando hay sesion
        iniciada: "Hola, Carolina" en vez de "Mi cuenta". Sin sesion sigue
        diciendo "Mi cuenta".

        Se usa el nombre de pila, no el de usuario: "Carolina" se lee como un
        saludo y "crestrepo89" se lee como una base de datos. Si no hay nombre
        de pila cae a display_name y luego al login, para no dejarlo vacio
        nunca. Y se corta a 18 caracteres: la barra es estrecha y un nombre
        largo empujaria toda la fila.


1.18.0 - COMPARTIR CARRITO: el boton, el dialogo y sus estilos.

        El comercial arma un carrito, pulsa Compartir, elige cuantos dias vale
        (8 por defecto) y obtiene un enlace corto que puede mandar por
        WhatsApp. El cliente lo abre y cae DIRECTO en la pagina de pago con
        todo puesto.

        AQUI SOLO ESTA LA CARA VISIBLE. La logica, la tabla y el endpoint viven
        en bombeo-core v0.7.0, y no es una manía de orden: ese enlace pasa
        semanas en el correo de un cliente, y si dependiera del theme, el dia
        que se cambie de plantilla morirían TODAS las cotizaciones enviadas.

        EL PERMISO SE COMPRUEBA TRES VECES y no es redundancia:
          · en mini-cart.php, para no pintar un boton inutil
          · en wp_enqueue_scripts, para no entregar ni el nonce
          · en el endpoint AJAX  ← la unica que de verdad protege
        Ocultar no es proteger: cualquiera puede llamar a admin-ajax.php a mano.

        El evento del boton se DELEGA en el documento: WooCommerce reemplaza
        todo el interior del cajon en cada refresco de fragmentos, asi que un
        listener puesto sobre el boton moriria al primer cambio de cantidad.

Changelog
1.17.0 - 🔴 LA PAGINA DE GRACIAS MENTIA SOBRE EL ESTADO DEL PEDIDO.

        Decia "¡Gracias por su compra!" a TODO el mundo, hubiera pagado o no.

        Por que pasaba: WooCommerce manda al cliente a esa pagina en cuanto
        CREA el pedido. Con Bold el cobro ocurre despues, en la pasarela. Asi
        que ahi llegan tres personas distintas —quien pago, quien no ha pagado
        todavia, y quien cancelo o le rechazaron— y las tres leian lo mismo.

        No es un detalle estetico. El que cancela se va creyendo que pago: no
        completa la compra, y encima llama preguntando por un pedido que no
        existe. Se pierde la venta dos veces.

        AHORA EL MENSAJE SIGUE A $order->get_status():

          processing/completed  ✅ "¡Pago confirmado!"        verde
          pending               ⏳ "Pendiente de pago"        ambar + boton Completar
          on-hold               ⏸  "En espera de confirmacion" azul
          cancelled             ❌ "Pedido cancelado"          rojo + "no se realizo ningun cobro"
          failed                ❌ "No se pudo procesar"       rojo + "no se le cobro nada"
          refunded              ↩  "Reembolsado"               azul

        El color ES informacion: verde SOLO cuando de verdad se cobro. Y el
        boton de pagar aparece solo si needs_payment() lo permite, para no
        ofrecer una accion que llevaria a un error.

        ADEMAS, tres correcciones de la 1.16.0:

        · DOBLE CABECERA. En la 1.16.0 le puse a la pagina de gracias la
          cabecera COMPLETA del sitio. Fue decision mia, no del cliente, y
          quedaba con dos cabeceras. Revertido: las tres URLs del flujo
          (checkout, pagar y gracias) usan la misma plantilla minima, solo
          logo y "Volver". Fuera checkout-gracias.php.

        · UN TIC DE 1.000 PX. El SVG de la tarjeta salia a tamano natural
          porque el wrapper .bt-checkout faltaba, y las reglas del sitio son
          `.bt-checkout .bt-card__ico svg{width:19px}`. Sin ese ancestro, nada.

        · ANCHO. El contenido estaba en 720 px y se veia angosto para una
          tabla de producto + cantidad + total. Ahora 1080, dentro de un canal
          de 1180.

        · La banda "Compra protegida / Asesoria / Envio" sale de la cabecera
          minima: cada pagina ya trae la suya, y ahi es especifica del momento
          ("Pedido n.o 123087 · Pago cifrado · Factura legal").

1.16.0 - CORRIGE LA 1.15.0, QUE SE QUEDO A MEDIAS. Aquella dejo las paginas
        "con estilo" pero NO con el de este sitio, y con tres fallos visibles.

        LO QUE ESTABA MAL:
        · ANCHO. Se puso 900 px cuando todo el sitio usa un canal de 1280
          (.bt-checkout-page, .bom-mp-inner, la cabecera). La pagina no
          cuadraba con el header que tiene encima.
        · EL REALCE CREMA DEL TOTAL caia sobre la fila "Acciones", porque la
          regla era `tfoot tr:last-child` y esa fila va la ultima. Resultado:
          dos botones sobre fondo crema, apilados y rotos.
        · UN RECUADRO VERDE VACIO. Se estilo `.woocommerce-notice--success`
          dando por hecho que traia texto. No lo traia.
        · EL BOTON salio amarillo cuando el del checkout es azul marino con
          candado.

        LA CAUSA DE FONDO, y es la leccion: en la 1.15.0 decidi que "bastaba
        con CSS" sin haber leido el marcado real. No bastaba. El diseno de
        este sitio se apoya en envoltorios —las tarjetas .bt-card con su
        cabecera de icono— que el marcado de WooCommerce no trae, y eso no se
        puede inventar desde una hoja de estilos.

        LO QUE SE HACE AHORA:
        · woocommerce/checkout/form-pay.php y thankyou.php, propias. Reutilizan
          las clases del checkout (.bt-checkout-page, .bt-card, .bt-summary,
          .bt-payment), asi que heredan su diseno entero: metodos de pago con
          borde, cuadro gris de la pasarela y boton azul marino. Se conservan
          los hooks woocommerce_before_thankyou / _thankyou_<gateway> /
          _thankyou, que es por donde entra Bold.
        · Ancho 1280, el del resto del sitio.
        · El realce del total se acota con :not(:has(.button)), asi no toca la
          fila de acciones. Esos botones van en linea y con el estilo del sitio.
        · Textos en espanol y de usted.

        La tabla del pedido y las direcciones las sigue pintando WooCommerce
        desde el hook woocommerce_thankyou (order/order-details.php): esas SI
        se resuelven por CSS, porque ahi solo hacen falta estilos.

1.15.0 - EL FINAL DE LA COMPRA YA NO SALE DESNUDO. Tres URLs se servian sin un
        solo estilo, y una de ellas es la que ve el cliente JUSTO DESPUES DE
        PAGAR:

          /finalizar-compra/pedido-recibido/<id>/   (pagina de gracias)
          /finalizar-compra/pagar/<id>/             (pagar pedido pendiente)
          Mi cuenta -> Pedidos -> Ver pedido

        DOS CAUSAS DISTINTAS, no una:

        1. La pagina de gracias estaba EXCLUIDA del enrutado a proposito:
             if ( is_checkout() && ! is_wc_endpoint_url( 'order-received' ) )
           Al quedar fuera caia al theme padre y salia sin cabecera, sin pie y
           sin estilos. Ahora tiene plantilla propia, checkout-gracias.php.

        2. TODA la maqueta de tablas de pedido estaba acotada a
           `body.woocommerce-account`. Fuera de Mi cuenta no aplicaba nada, y
           ni la pagina de gracias ni la de pagar llevan esa clase. De ahi que
           la tabla saliera desnuda en las dos.

        DECISION DE DISENO: la pagina de gracias lleva la cabecera COMPLETA del
        sitio, no la minima del checkout. El checkout se sirve sin distracciones
        porque cualquier enlace antes de pagar es una venta menos; despues de
        pagar la logica se invierte y conviene que el cliente pueda volver al
        catalogo o entrar a su cuenta. La de "pagar pedido" SI conserva la
        minima: ahi todavia no ha pagado.

        NO se copiaron thankyou.php ni form-pay.php al theme. El marcado de
        WooCommerce ya trae las clases correctas, y mantener copias obligaria a
        revisarlas en cada actualizacion —lo avisan ellos en la cabecera de cada
        plantilla— a cambio de nada. Es CSS, no plantillas.

        Ademas: fuera style.css.bak.checkout2 y style.css.bak.minicart. Estaban
        dentro del theme, se empaquetaban en el ZIP y uno era descargable por
        cualquiera (200, 21 KB).


1.14.0 - FUERA LOS MARCADORES SIN SUSTITUIR, QUE ESTABAN GENERANDO 404 REALES.
        El registro propio de 404 los cazo el 2026-08-02: 397 URLs distintas,
        408 golpes, y seguian llegando ese mismo dia a las 17:55.

        Eran DOS fallos distintos que se veian igual en el registro:

        1. UN ENLACE ROTO DE VERDAD, en la home.
           template-parts/home/11-recursos-tecnicos.php servia la tarjeta
           «Como elegir su bomba en 5 pasos» con href="URL_GUIA_ELEGIR_BOMBA".
           Al ser una ruta RELATIVA, el navegador la resolvia contra la pagina
           actual: cualquier cliente que la pulsara acababa en un 404.
           Ahora la URL vive en $bt_rec_guia, arriba del fichero y vacia. Con
           URL la tarjeta es un <a>; sin ella es un <div> con la marca
           «Proximamente»: se ve igual, pero ni se pulsa ni se rastrea.
           No se uso href="" (llevaria a la propia pagina) ni href="#" (seguiria
           aparentando ser un enlace que no hace nada).

        2. NOTAS DE TRABAJO EN COMENTARIOS DE HTML — 12 bloques.
           Un comentario de HTML SI se envia al navegador. Hay rastreadores que
           extraen URLs del HTML en crudo con expresiones regulares, sin separar
           comentario de enlace: veian la cadena URL_BLOG dentro de la nota y
           pedian /producto/<slug>/URL_BLOG. De ahi URL_BLOG (224 URLs) y
           URL_MI_CUENTA (173).
           Los 12 bloques pasan a comentario de PHP: el texto se conserva para
           quien mantenga el codigo, pero deja de viajar. De paso salen del
           HTML publico un nombre propio y varias frases internas.

        REGLA QUE DEJA ESTE CAMBIO: las notas de trabajo van en comentario de
        PHP. En comentario de HTML, solo lo que sirva a quien mire el codigo
        fuente del sitio publicado.

        Verificado: php -l en los 55 ficheros (0 errores) y la home local ya
        emite CERO marcadores.

1.13.0 - CANTIDAD EDITABLE EN EL CAJON DEL CARRITO. Cierra el hueco que dejo la
        1.9.7: como la pagina /carrito/ se redirige, NO HABIA NINGUN SITIO
        donde subir de 1 a 3 unidades — tocaba quitar el producto y volver a
        anadirlo desde la ficha.
        Botones − y + junto a la cantidad, con el precio de linea al lado. El
        endpoint vive en bombeo-core (es logica, no presentacion); aqui solo
        estan los botones y el JS.
        Detalles que importan:
        · El evento se DELEGA en la raiz del cajon. WooCommerce reemplaza todo
          el interior en cada refresco de fragmentos, asi que un listener
          puesto sobre los botones moriria en el primer cambio.
        · Mientras viaja la peticion la caja se atenua y se bloquea: dos clics
          seguidos no mandan dos cambios.
        · Restar teniendo 1 ELIMINA la linea, que es lo que espera cualquiera
          que pulse "menos".
        · Si el stock no da, se avisa en rojo bajo la cantidad con las unidades
          que quedan, en vez de dejar pedir 40 de algo que tiene 3.
        Verificado por HTTP de extremo a extremo: 1→2→3→2→1→eliminada, y un
        nonce invalido lo rechaza.
1.12.0 - TRATO DE USTED EN TODA LA PLANTILLA. Se acabo el tuteo.
        Salio de una revision del aviso de precios: su cuerpo trataba de usted
        pero la llamada a la accion tuteaba. Al barrer el theme entero
        aparecieron 23 cadenas mas mezclando los dos tratos — en el checkout,
        el carrito, el buscador, la ficha, los titulares de la home y el pie.
        Mezclar tu y usted en una misma tienda queda peor que cualquiera de
        los dos, y en ingenieria industrial B2B el usted es ademas lo natural.
        Ejemplos de lo que cambia:
          "Encuentra lo que necesitas"  -> "Encuentre lo que necesita"
          "Encuentra tu bomba"          -> "Encuentre su bomba"
          "¿Ya tienes cuenta?"          -> "¿Ya tiene cuenta?"
          "Tu carrito esta vacio."      -> "Su carrito esta vacio."
          "Cuentanos que necesitas.
           Te respondemos..."           -> "Cuentenos que necesita.
                                            Le respondemos..."
          "Te damos un estimado...
           segun tu proyecto"           -> "Le damos un estimado...
                                            segun su proyecto"
        23 cadenas en 12 ficheros. Verificado con un barrido posterior: no
        queda tuteo en ningun texto visible.
        ⚠️ Al escribir textos nuevos, mantener el usted. Un solo "puedes" o
        "tu" rompe la coherencia de todo lo demas.
1.11.1 - Texto del aviso de precios, redactado por el cliente. Cambia el "que"
        del negocio: no es solo equipo importado, son "equipos de importacion,
        de fabricacion, o de ensamble por parte del fabricante" — que describe
        mejor lo que realmente se vende. Y pasa a tratar de USTED
        ("el valor que ve", "su pedido", "le avisamos").
        Solo se corrigio la errata "importacio" -> "importacion".
        NOTA: el cuerpo trata de usted pero la llamada a la accion se dejo tal
        cual la escribio el cliente, en tu ("¿Necesitas asegurar un precio?
        Confirmalo..."). Es su texto y no se cambia por cuenta propia; si se
        quiere unificar, seria "¿Necesita asegurar un precio? Confirmelo...".
1.11.0 - "IVA incluido" junto a los precios, en los tres sitios donde se ven:
        bajo la cifra en la ficha, dentro de la caja amarilla en las tarjetas
        y al lado de "Subtotal" en el cajon del carrito.
        🔴 SE ESCRIBE A MANO, Y HAY QUE SABER POR QUE: esta tienda tiene los
        impuestos de WooCommerce DESACTIVADOS (comprobado en produccion:
        woocommerce_calc_taxes = "no" y CERO tipos configurados). El precio que
        se teclea en el producto ya es el final, con el IVA dentro. Por eso el
        sufijo nativo —woocommerce_price_display_suffix— no vale: solo se pinta
        cuando el calculo de impuestos esta activo.
        ⚠️ SI ALGUN DIA SE ACTIVAN LOS IMPUESTOS hay que quitar estas
        etiquetas, o el precio anunciara el IVA dos veces.
        ⚠️ Y OJO CON ESTO: hay 112 productos marcados como "taxable" frente a
        5.157 como "none". Hoy da igual porque el calculo esta apagado, pero el
        dia que se encienda, a esos 112 se les sumaria el IVA ENCIMA de un
        precio que ya lo incluye.
        En la tarjeta la etiqueta va DENTRO de la caja amarilla, no debajo:
        fuera obligaria a dar altura extra a las 40 tarjetas de un listado;
        dentro cabe porque la caja ya reservaba 52px y el precio no los
        llenaba. Las tres usan el patron de etiqueta del theme —mayusculas,
        peso 700, letter-spacing 0.06em— en 11px, 9px y 9,5px segun el sitio.
1.10.1 - Rehecho el aviso de precios: era demasiado plano —icono suelto y
        texto seguido— y el amarillo de alerta chirriaba en la caja de compra.
        · Color: el MISMO gris azulado de las tarjetas de producto
          (#EDF1F6 con borde #DDE4EC), para que se lea como parte de la
          plantilla y no como un parche pegado encima.
        · ESQUINAS RECTAS. Ademas de que se pidieron asi, ahora la cabecera es
          una franja propia con su linea inferior: con redondeo esa franja se
          partiria en las esquinas y quedaria sucia.
        · Estructura de verdad en vez de un parrafo: cabecera con icono y
          titulo en mayusculas (11,5px / 0.06em, el mismo patron de etiqueta
          que usa el resto del theme), cuerpo en dos parrafos —uno para el
          porque y otro para el compromiso— y la llamada a la accion separada
          por su propia linea, para que se lea como paso siguiente y no como
          final del parrafo.
        · El icono pasa a ser un simbolo de moneda, que habla de precio; el
          anterior era un "informacion" generico.
        · La accion ahora es un boton con el icono real de WhatsApp
          ("Confirmar precio con un asesor"), no un enlace de texto.
1.10.0 - AVISO DE PRECIOS SUJETOS A CAMBIO, en la ficha y en el cajon del
        carrito. En la ficha va debajo de los botones de compra; en el cajon,
        encima del separador del pie, para que se lea ANTES del total y no
        despues.
        El texto vive en UNA sola funcion —bombeo_aviso_precios() en
        functions.php— con dos versiones, completa y compacta. Escrito dos
        veces, a la tercera correccion ya dirian cosas distintas.
        🔴 SOBRE LA REDACCION, QUE NO ES CAPRICHOSA: la peticion era reservarse
        el derecho a cambiar el precio "incluso despues de la compra". Eso en
        Colombia es terreno delicado — el Estatuto del Consumidor (Ley 1480 de
        2011) obliga a respetar el precio anunciado en la transaccion, y una
        clausula que permita subirlo despues de comprar puede calificarse de
        abusiva y quedarse sin efecto. Se dice lo mismo por el lado que SI
        protege: el precio puede variar sin aviso y queda EN FIRME al
        CONFIRMARSE el pedido, no al hacerlo. Eso deja margen real —entre que
        entra el pedido y se confirma— sin prometer nada que la ley tumbe.
        Ademas cierra con un enlace a WhatsApp ("¿Necesitas asegurar un
        precio?"), que convierte un aviso defensivo en una via de contacto.
        El CSS se imprime una sola vez aunque el aviso salga dos veces en la
        misma pagina: ficha y cajon conviven.
1.9.7 - EL CARRITO ES EL CAJON LATERAL. No hay pagina intermedia.
        · Fuera el boton "Ver carrito" del cajon: del cajon se va DIRECTO a
          pagar. Un paso menos y un sitio menos donde abandonar la compra.
        · La pagina /carrito/ se intercepta y redirige. NO se borra ni se
          despublica, porque WooCommerce la necesita por dentro
          (wc_get_cart_url() se usa en el nucleo y el checkout redirige a ella
          cuando el carrito esta vacio); quitarla dejaria esos caminos
          apuntando a la nada.
          ⚠️ EL ORDEN DE LAS RAMAS NO ES CAPRICHO: con carrito lleno va al
          checkout, pero con carrito VACIO va a la tienda. Si fuera siempre al
          checkout se formaria un bucle infinito, porque WooCommerce manda al
          carrito justo cuando esta vacio. Verificado: un solo salto en los
          dos casos. Y noindex, que ya no existe para el visitante.
        · FALLO CORREGIDO en la cabecera: el boton del carrito tenia el enlace
          CABLEADO a "https://bombeo.co/cart/". URL absoluta —se rompe en
          local o si cambia el dominio— y apuntando a /cart/, que hace un 301
          a /carrito/. El clic lo intercepta el JS del cajon, asi que no se
          notaba; pero sin JavaScript llevaba a una URL con salto. Ahora usa
          wc_get_checkout_url().
        · Limpiados dos comentarios HTML obsoletos ("v3.1 — carrito apunta a
          https://bombeo.co/cart/") que viajaban al navegador afirmando algo
          que ya no es cierto.
        ⚠️ CONSECUENCIA A TENER PRESENTE: el cajon muestra la cantidad como
        TEXTO y solo permite quitar el producto. Sin pagina de carrito, no hay
        donde cambiar de 1 a 3 unidades: habria que quitar y volver a anadir
        desde la ficha. Si eso estorba, la solucion es poner controles +/- en
        el propio cajon.
1.9.6 - RENDIMIENTO EN MOVIL: la tienda, las categorias y la busqueda iban
        lentas y las imagenes salian gigantes. La causa era una sola linea:
          .bt-pcard-grid{grid-template-columns:1fr}   /* por debajo de 560px */
        UNA columna en movil, y como la caja de imagen es cuadrada
        (aspect-ratio 1/1), cada tarjeta se comia la pantalla entera: solo
        cabia UN producto por vista. Y hacia el doble de dano, porque el
        navegador, al ver un hueco de ~358px, elegia del srcset la variante de
        768w en vez de una pequena.
        Ahora son DOS columnas en movil (y cuatro desde 768px). La imagen baja
        de ~358px a ~179px de lado, se ven cuatro productos en el mismo scroll
        y el navegador baja una variante mucho mas ligera.
        Ajustado tambien el interior de la tarjeta en movil —margenes, tamano
        de letra, alto del precio y del boton— para que quede en proporcion;
        si no, el texto y el precio quedaban enormes al lado de una imagen que
        ya no lo es.
      - El atributo 'sizes' de la imagen se pone A MANO en bombeo_product_card().
        WordPress lo deducia del ancho declarado (300px) y generaba
        "(max-width:300px) 100vw, 300px", que NO describe esta rejilla. Ahora
        dice la verdad: "(max-width:767px) 46vw, (max-width:1279px) 23vw, 300px".
        Sin esa pista el navegador se cubre las espaldas y baja de mas.
1.9.5 - Cabeceras @version en las plantillas de WooCommerce. WooCommerce avisaba
        en el escritorio de que el theme tenia "copias obsoletas". Eran dos
        cosas distintas y ninguna rompia nada, pero dejaban el aviso encendido
        y —lo importante— impedian que WooCommerce pudiera avisar DE VERDAD el
        dia que una plantilla se quede atras:
        · archive-product.php, content-product.php, single-product.php y
          cart/mini-cart.php no llevaban @version. Se escribieron desde cero,
          no copiando el original, asi que WooCommerce no tenia con que
          comparar. Se les pone la version del original correspondiente
          (8.6.0, 9.4.0, 1.6.4 y 10.0.0).
        · form-checkout.php y review-order.php SI la llevaban y coincidian
          exactamente con el nucleo (9.4.0 y 5.2.0), pero se marcaban como
          obsoletas igual. La culpa era de una anotacion nuestra:
            @version 9.4.0 (base)
          WooCommerce lee la etiqueta entera, compara "9.4.0 (base)" contra
          "9.4.0" y no le cuadra. El "(base)" era una aclaracion para
          nosotros; se quita de la etiqueta.
        Esto NO tiene que ver con el carrito lateral de la 1.9.4: es cosmetico.
        En el mismo aviso, WooCommerce delataba a
        elementor-pro/modules/woocommerce/wc-templates/cart/mini-cart.php, o
        sea que confirmaba por su cuenta lo que se arreglo en la 1.9.4.
1.9.4 - FALLO CORREGIDO: el carrito lateral salia sin estilos. La causa no era
        el CSS, era que la plantilla del theme NUNCA se ejecutaba.
        Elementor Pro engancha 'woocommerce_locate_template' en prioridad 10
        desde ElementorPro\Modules\Woocommerce\Module y devuelve SUS propias
        plantillas, pisando las del theme. WooCommerce normalmente busca
        primero en el theme hijo; ese filtro se salta el orden.
        🔴 OJO, QUE ESTO DESPISTA: no depende de que haya plantillas del Theme
        Builder activas. Se midio en produccion con CERO plantillas de
        WooCommerce configuradas y aun asi:
          cart/mini-cart.php -> elementor-pro/.../wc-templates/cart/mini-cart.php
        mientras el theme tenia la suya (3.708 bytes, clases bt-mc__*) sin
        llegar a ejecutarse. Son dos mecanismos distintos: las plantillas del
        Theme Builder por un lado, y esta sustitucion silenciosa a nivel de
        plugin por otro, que va SIEMPRE que Elementor Pro este activo.
        El cajon salia con marcado elementor-menu-cart__* y se veia crudo
        porque el CSS que lo sostenia venia del "Kit", que la 1.9.3 retira con
        razon: no puede mandar en la tipografia de todo el sitio.
        Ahora, en prioridad 99 —despues de la de Elementor—, si el theme tiene
        la plantilla, gana el theme. Si no la tiene, no se toca nada.
        No vale solo para el mini-carrito: protege TODA plantilla de
        WooCommerce que el theme personalice, hoy y en el futuro.
1.9.3 - FALLO CORREGIDO: el CSS de Elementor se colaba en las paginas del theme
        y les cambiaba el aspecto. Aparecio al activar el theme en produccion:
        la ficha y el checkout "tomaban otros estilos".
        Elementor sigue ACTIVO a proposito —las 9 landings de campana (contra
        incendio, promocion del mes, nosotros, gracias-cotizacion...) estan
        construidas con el y deben seguir funcionando— pero su CSS es GLOBAL:
        · El "Kit" (uploads/elementor/css/post-23.css) marca el <body> con la
          clase elementor-kit-23 y desde ahi manda en TODO el sitio. Ponia:
            .elementor-kit-23 a  { font-family:"Prompt"; font-weight:600 }
            .elementor-kit-23 h2 { letter-spacing:-1px; font-size:30px }
            .elementor-kit-23 h3 { font-size:var(--e-global-typography-...) }
            .elementor-kit-23 p  { margin-block-end:15px }
          O sea: TODOS los enlaces del sitio con la fuente Prompt en vez de
          Poppins, y los h2 con un interletrado que no es el del theme
          (-1px contra los -0.02em del sistema tipografico).
        · post-28.css y post-34.css son el CSS de las plantillas Header y
          Footer del Theme Builder. Ya no pintan nada —eso lo hace el theme—
          pero su hoja se seguia cargando: peso muerto y reglas que estorban.
        Ahora se quitan SOLO donde el theme es quien pinta. La comprobacion es
        por pagina: si la construyo Elementor (_elementor_edit_mode), no se
        toca ni una linea y conserva su CSS entero.
        El ID del Kit se lee de la opcion 'elementor_active_kit', no se cablea.
        La lista de plantillas se guarda 12 h en un transitorio y se invalida
        sola al guardar o borrar una plantilla de Elementor.
1.9.2 - FALLO CORREGIDO: los 12 enlaces de marca de la home no filtraban NADA.
        Apuntan a ?filter_product_brand=<slug>, pero bombeo_filter_taxonomies()
        devolvia las 37 taxonomias de spec, que incluyen 'marcas' (la de
        JetEngine) y NO incluyen 'product_brand' — esta ultima esta en la lista
        de exclusion del sistema, y con razon, porque no es una spec.
        Como los filtros solo se aplican a las taxonomias de esa lista, esos
        enlaces devolvian 200 y mostraban el catalogo ENTERO. Un cliente que
        pulsara "Pedrollo" en la home veia las 5.269 fichas.
        Ahora la barra filtra por la taxonomia NATIVA, que es la que usa todo
        lo demas del theme: la tarjeta de producto, el resumen de compra, el
        schema que lee AIOSEO y el feed de Google Shopping. 'marcas' sale de la
        barra. Y "Marca" pasa a ser el PRIMER filtro, que es el que mas se usa.
        Verificado en local: /categoria/bombas/ da 40 tarjetas y
        ?filter_product_brand=barnes da 23.
        Esto ademas desatasca la decision sobre 'marcas': el theme ya no la
        necesita en ninguna parte.
1.9.1 - FALLO CORREGIDO: la cabecera abria <body> SIN llamar a wp_body_open().
        Ese es el gancho por el que los plugins inyectan lo primero del cuerpo,
        y en este sitio por ahi entra el <noscript> de Google Tag Manager, que
        se sirve desde el plugin Head & Footer Code (opcion
        'auhfc_settings_sitewide'). Sin la llamada, esa parte de GTM no se
        inyectaba en NINGUNA pagina del theme salvo el checkout minimo, que si
        la tenia. Se perdio al escribir cabecera propia: el theme padre
        (hello-elementor) si la llama, en su header.php linea 27.
        Anadida en template-parts/header/02-utility-bar.php, justo tras abrir
        <body>, que es donde tiene que ir. Verificado con un gancho de prueba:
        dispara en ficha, home y tienda.
        NOTA: el Tag se queda en el plugin, NO se lleva al theme. Ahi sobrevive
        a cualquier cambio de plantilla; metido en el theme se perderia el dia
        que se toque.
1.9.0 - La DESCRIPCION del producto vuelve a los campos nativos de WooCommerce.
        ficha/descripcion.php leia primero la descripcion larga nativa y, si
        estaba vacia, caia al campo 'informacion-adicional' de JetEngine.
        El problema no era de la ficha —que ya lo resolvia— sino de todo lo
        demas: la descripcion larga NATIVA estaba vacia en 5.261 de 5.269
        productos, y es la que leen AIOSEO para el schema de Product y el feed
        de Google Shopping (google-listings-and-ads manda get_description() y
        solo cae a get_short_description() si la larga esta vacia). Resultado:
        Google recibia la descripcion corta, de 270 caracteres de media, o
        directamente NADA en 1.597 fichas.
        El 2026-07-31 se migraron 1.556 productos al campo nativo (larga: 8 ->
        1.495, media de 1.014 caracteres, dentro del rango que Google
        recomienda). Aqui el respaldo pasa a ser la descripcion CORTA, que es
        la otra fuente nativa. Fuera la dependencia de JetEngine.
        En pantalla NO cambia nada: la plantilla ya priorizaba la nativa, solo
        cambia de que linea saca el texto.
1.8.0 - FALLO CORREGIDO: la ficha se pintaba a trozos y la tienda no, aunque
        la tienda es MAS pesada (261 KB y 107 imagenes contra 199 KB y 74).
        La causa no eran las consultas —la ficha hace 63 y la tienda 101— ni
        el servidor, que entrega el HTML entero con 1 ms entre el primer byte
        y el ultimo. Era UN script:
          summary.php incrustaba <script src="https://bold.co/library/ui-kit.js">
          SIN defer ni async, en el 67% del cuerpo. Un script asi DETIENE el
          parseo del HTML hasta que descarga y ejecuta, asi que specs, video,
          desplegables, resenas, relacionados y TODO el footer —el 33% de la
          pagina— esperaban a que un dominio ajeno contestara. Y la URL
          devolvia un 301 a checkout.bold.co, o sea un salto extra completo
          (DNS + conexion + TLS + redireccion): 150-300 ms de parada seca.
        Sustituido por una imagen fija con los mismos sellos (PCI DSS, PSE,
        Visa, Mastercard ID Check, reCAPTCHA), en assets/img/pagos-bold.jpg.
        Vive en el theme, no en la biblioteca de medios: viaja con el ZIP y no
        depende de ninguna URL externa. Recortada del original para quitarle
        su titular, que repetia la etiqueta "Pago 100% seguro" que ya pone la
        caja de compra: 45 KB -> 7,9 KB (516x64, servida a 340 px para que
        quede nitida en pantallas de alta densidad). Lleva width y height para
        que no salte la maqueta al cargar.
        RESULTADO: la ficha queda con el mismo perfil que la tienda — 2
        scripts bloqueantes, CERO externos, el primero al 97,5% del cuerpo
        (o sea, ya al final, donde no corta nada).
        NOTA para produccion: el plugin "Bold pagos en linea" sigue activo y
        es el que debe manejar el cobro real en el checkout; esto de aqui era
        solo el distintivo visual de la ficha.
1.7.0 - RENDIMIENTO. La plantilla servia la pagina a trozos porque cada
        componente bajaba a la base de datos por su cuenta. Medido con
        peticiones HTTP reales, no en teoria:
          ficha de producto   ~131 -> 63 consultas
          home                 253 -> 54 consultas
          tienda y categoria   187 -> 101 (de las que 40 son ruido del clon
                               local, ver nota abajo; en produccion ~61)
        Las cuatro causas, todas el mismo error de fondo — preguntar N veces
        lo que se puede preguntar una:
        · Especificaciones tecnicas: bombeo_get_specs() recorria las 49
          taxonomias de spec con un wp_get_post_terms() DENTRO del bucle. 49
          consultas por ficha y casi todas volvian vacias (un producto normal
          rellena 6-10). Ahora ceba la cache una vez y lee con get_the_terms().
          Cero consultas en una carga normal, porque WP_Query ya la ceba.
        · Barra de filtros: identico patron, un get_terms() por taxonomia.
          88 consultas en CADA pagina de tienda y de categoria. get_terms()
          acepta un array de taxonomias: las 49 caben en una sola consulta.
        · Relacionados y destacados de la home: wc_get_product() uno a uno con
          las caches frias, mas la imagen de cada tarjeta. Ahora se cargan de
          golpe con _prime_post_caches() antes del bucle.
        · Tarjeta de producto: usaba wp_get_post_terms() para la marca, que va
          SIEMPRE a la base de datos. get_the_terms() lee la cache que
          WP_Query ya cebo. En una rejilla de 24 productos eso eran 24
          consultas solo para pintar la marca.
        Ademas, los IDs de los destacados de la home se guardan en un
        transitorio de 12 h (se invalida solo al guardar un producto): lo que
        se cachea son los IDs, no el HTML, asi que precio y stock siguen
        leyendose frescos en cada visita.
        VERIFICADO que la salida no cambia: viejo contra nuevo sobre 150
        productos = 742 specs, 326 opciones de filtro y 150 marcas, cero
        diferencias. Es optimizacion, no cambio de comportamiento.
        NOTA: en el espejo local los productos tienen autores (22 y 209) que
        no existen como usuarios; un get_userdata() fallido no se cachea
        nunca, asi que WordPress repite la consulta en cada producto (40 por
        pagina de tienda). Comprobado contra produccion: alli esos usuarios SI
        existen y hay 0 productos huerfanos. Es ruido del clon, no se toca.
      - FALLO CORREGIDO (FOUC en la ficha): el <style> con la maqueta
        (.bt-fp-grid, display:grid) estaba al FINAL de single-product.php,
        detras de toda la ficha. El navegador pintaba la galeria sin rejilla,
        o sea a ancho completo, y solo al llegar al final aplicaba el grid y
        lo recolocaba todo de golpe. Movido delante del marcado: el CSS que
        define la maqueta tiene que llegar antes que el HTML que maqueta.
1.6.0 - Home / "Encuentra lo que necesitas": fuera la palabra SKU, que es
        jerga de almacen y el cliente no la entiende. Y las cifras de las
        tarjetas estaban CABLEADAS y muy lejos de la realidad: decia +1.200
        en Bombas cuando hay 3.219, +1.500 en Acc. hidraulicos cuando hay 221
        y +180 en solares cuando hay 43. Corregidas contra produccion.
        El lead repetia lo que ya dice el hero (catalogo + ficha tecnica);
        ahora explica como elegir: filtrar por potencia, caudal, voltaje o marca.
      - Home: HERO nuevo (00-hero.php) en el hueco que front-page.php dejaba
        reservado. Es el UNICO H1 de la home — antes no habia ninguno, que era
        un fallo SEO real. Ancho completo con el contenido al mismo contenedor
        que el resto (1280px + 24px), foto del showroom con velo azul para
        contraste, y botones a tienda y WhatsApp.
        El texto usa los terminos con los que de verdad busca Colombia segun
        Search Console (bombas de agua, tableros, variadores, material
        electrico, marcas), no formulas tipo "las mejores bombas".
        Titulos de la home y del footer de peso 800 a 700 (14 reglas). Se
        quedan en 800 a proposito: los numeros de estadistica, el logo en
        texto del footer y el precio de las tarjetas.
        Icono real de WhatsApp en los 11 botones que abren wa.me.
        FALLO CORREGIDO: en SVG las reglas CSS ganan a los atributos fill= y
        stroke= del propio elemento, asi que los .bom-XXX-btn svg{stroke:...}
        de cada seccion dibujaban el logo como contorno grueso. Y el primer
        arreglo tampoco valia: misma especificidad (0,1,1) y ambas con
        !important, con los <style> de seccion aplicandose DESPUES por ir en
        el <body>. Resuelto doblando la clase: svg.bom-wa-ico.bom-wa-ico.
1.5.0 - Home / Productos destacados: reescrito. Tenia 40 productos CABLEADOS
        a mano en un array de JavaScript, con precio, imagen y URL congelados
        en el codigo, y tarjeta propia (.bom-feat-card) que habia que mantener
        sincronizada con la del theme. Ahora lee de WooCommerce y pinta con
        bombeo_product_card() — la MISMA tarjeta que la tienda, las categorias
        y los relacionados. Precio, stock, imagen y valoracion siempre reales.
        Cada pestana ordena: destacados de Woo -> mas vendidos -> mas
        recientes, asi nunca queda coja (hoy hay 0 marcados con la estrella
        y solo 8 productos con ventas registradas).
        Las 5 pestanas se pintan en servidor y se alternan con CSS: sin AJAX.
        Anadido boton "Ir a la tienda" bajo la rejilla.
        Se retiran ~11 clases .bom-feat-* que estilaban la tarjeta vieja.
1.4.0 - URLs: 145 enlaces del theme apuntaban a la estructura vieja
        /product-category/ y a slugs que ya no existen (bombas-de-agua-bombas,
        lapicero-agua-limpia-..., tableros-rci-bajo-nfpa20). Funcionaban por las
        301, pero cada clic en nuestro propio menu era un salto de redireccion.
        Reescritos contra el arbol de 79 categorias del 2026-07-31:
          mega-menu/03-panels.php     56    header/05-mobile-drawer.php   62
          mega-menu/02-bar.php         6    home/01-catalogo.php           8
          home/11-recursos-tecnicos    7    home/05-tableros-atx.php       1
          footer/04-footer-main.php    5
        Los 61 destinos distintos verificados uno a uno contra produccion:
        existen, la ruta coincide con el arbol y todos tienen productos.
        home/07-marcas.php: los 11 enlaces de marca pasan del filtro de
        JetSmartFilters (?jsf=jet-engine&tax=marcas:ID, que muere con Croco)
        al filtro propio del theme (?filter_product_brand=slug).
1.3.0 - Marca: se pasa de la taxonomia custom 'marcas' (la registra JetEngine y
        muere con el) a la nativa de WooCommerce 'product_brand'. Esa misma
        taxonomia alimenta a la vez la ficha, el schema de AIOSEO y el feed de
        Google Shopping (Google Listings & Ads la lee de serie). Datos migrados
        el 2026-07-31: 45 marcas y 5.504 asignaciones, verificadas una a una.
        Tocado en functions.php (tarjeta y filtros) y ficha/summary.php.
        schema.php RETIRADO: emitia un segundo Product + BreadcrumbList que
        competia con los de AIOSEO. Dos nodos Product no es mas informacion,
        es ambiguedad, y Google puede descartar los dos. El fichero se queda
        vacio y documentado porque single-product.php lo incluye.
        La marca vuelve a verse en las tarjetas de producto: llevaba un
        display:none heredado que la ocultaba aunque se calculara en cada
        listado. Ahora en amarillo de marca sobre el nombre.
1.2.0 - Mi cuenta con estilos propios (acceso, registro, pedidos, descargas,
        direcciones y detalles). Login del checkout arreglado: al moverlo el JS
        al modal salia de .bt-checkout-page y perdia sus reglas. Ancho de la
        cuenta igualado a 1280 liberando el tope de 1140 de .site-main del theme
        padre. Anulado el clearfix de WooCommerce, que en flex generaba espacios.
1.1.0 - (no publicada)
1.0.0 - Base del theme hijo en codigo puro.
*/

/* ============================================================
   Tipografía por defecto de TODA la plantilla (theme hijo).
   Poppins se carga UNA sola vez (functions.php → wp_enqueue 'bombeo-fonts').
   Este body default garantiza que TODO el texto herede Poppins,
   incluso el que no esté cubierto por selectores propios.
   ============================================================ */
body {
	font-family: 'Poppins', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}

/* ============================================================
   Fondo global (código puro · toda la web)
   Tono suave y neutro (sin el azulado anterior).
   ============================================================ */
:root { --bombeo-bg: #F4F5F7; }

body.bombeo-codigo-puro { background: var(--bombeo-bg); }

/* El área de contenido entre el header y el footer hereda el fondo suave. */
body.bombeo-codigo-puro .site-main,
body.bombeo-codigo-puro .site-content,
body.bombeo-codigo-puro main { background: transparent; }

/* ============================================================
   CARD DE PRODUCTO CENTRALIZADA (.bt-pcard)
   Usada en: relacionados, shop y categorías. Un solo estilo.
   ============================================================ */
.bt-pcard{display:flex;flex-direction:column;background:#EDF1F6;border:1px solid #DDE4EC;border-radius:14px;overflow:hidden;height:100%;transition:box-shadow .2s ease,border-color .2s ease;font-family:'Poppins',system-ui,-apple-system,sans-serif}
.bt-pcard *{box-sizing:border-box}
.bt-pcard:hover{border-color:#d3dae5;box-shadow:0 8px 22px rgba(16,18,22,.12)}
.bt-pcard__imgwrap{display:block;position:relative;aspect-ratio:1/1;margin:14px 14px 4px;background:#fff;border:1px solid #ECEEF1;border-radius:10px;overflow:hidden}
.bt-pcard__imgwrap img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:16px}
.bt-pcard__ph{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#c3ccd8;font-size:11px}
.bt-pcard__body{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:16px;flex:1 1 auto}
.bt-pcard__brand{display:block;width:100%;font-size:11px;font-weight:800;letter-spacing:0.06em;text-transform:uppercase;color:#F9B233;line-height:1;padding-bottom:4px}
.bt-pcard__name{color:#101216;font-size:14.5px;font-weight:600;line-height:1.35;text-decoration:none;display:block;width:100%}
.bt-pcard__name:hover{text-decoration:underline}
.bt-pcard__rating{display:flex;align-items:center;gap:4px;font-size:11px;color:#6B7079;line-height:1}
.bt-pcard__stars{position:relative;display:inline-block;font-size:12px;line-height:1;letter-spacing:1px}
.bt-pcard__stars::before{content:"★★★★★";color:#E6E8EC}
.bt-pcard__stars-fill{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap}
.bt-pcard__stars-fill::before{content:"★★★★★";color:#F5A623}
.bt-pcard__count{color:#6B7079}
.bt-pcard__buy{margin-top:auto;width:100%;display:flex;align-items:stretch;gap:8px}
.bt-pcard__price{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;text-align:center;min-height:52px;background:#F9B233;color:#101216;border-radius:8px;padding:7px 12px;font-weight:800;font-size:16px;line-height:1.15;overflow-wrap:anywhere}
/* "IVA incluido" DENTRO de la caja amarilla, bajo la cifra. Fuera obligaria a
   dar altura extra a las 40 tarjetas de un listado; dentro cabe porque la caja
   ya reservaba 52px de alto y el precio no los llenaba. */
.bt-pcard__iva{display:block;margin-top:2px;font-size:9px;font-weight:700;line-height:1;letter-spacing:0.06em;text-transform:uppercase;color:#101216;opacity:.62}
.bt-pcard__cart{flex:0 0 auto;width:52px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #E6E8EC;border-radius:8px;cursor:pointer;text-decoration:none;transition:border-color .15s ease,background .15s ease}
.bt-pcard__cart:hover{border-color:#F9B233;background:#FFF9EE}
.bt-pcard__price *{color:#101216 !important}
.bt-pcard__price del{opacity:.55;font-weight:500;font-size:12px}
.bt-pcard__price ins{text-decoration:none}

/* Grid genérico (relacionados) */
/* 🔴 DOS COLUMNAS EN MOVIL, NO UNA.
   Antes era una sola columna por debajo de 560px, y eso hacia dos danos a la
   vez: la tarjeta ocupaba el ancho completo y, como la caja de imagen es
   cuadrada (aspect-ratio 1/1), salia un bloque de ~390x390 que se comia la
   pantalla —solo cabia UN producto por vista—; y el navegador, al ver ese
   hueco tan grande, elegia del srcset la variante mas pesada. De ahi que la
   tienda, las categorias y la busqueda fueran lentas en el movil.
   Con dos columnas la imagen baja a ~190px de lado: pesa una cuarta parte y
   se ven cuatro productos en el mismo scroll. */
.bt-pcard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
@media(min-width:768px){.bt-pcard-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}}

/* La tarjeta, en proporcion al espacio que le queda en movil. Sin esto el
   texto y el precio quedan enormes al lado de una imagen que ya no lo es. */
@media(max-width:767px){
	.bt-pcard{border-radius:11px}
	.bt-pcard__imgwrap{margin:8px 8px 2px;border-radius:8px}
	.bt-pcard__imgwrap img{padding:9px}
	.bt-pcard__body{padding:10px;gap:6px}
	.bt-pcard__brand{font-size:10px;padding-bottom:2px}
	.bt-pcard__name{font-size:12.5px;line-height:1.3}
	.bt-pcard__buy{gap:6px}
	.bt-pcard__price{min-height:42px;font-size:13.5px;padding:6px 8px;border-radius:7px}
	.bt-pcard__cart{width:42px;border-radius:7px}
	.bt-pcard__cart svg{width:17px;height:17px}
}

/* Loop de WooCommerce (shop / categorías) usando nuestras cards */
body.bombeo-codigo-puro ul.products{display:grid !important;grid-template-columns:1fr !important;gap:16px;margin:0;padding:0;list-style:none}
@media(min-width:560px){body.bombeo-codigo-puro ul.products{grid-template-columns:repeat(2,minmax(0,1fr)) !important}}
@media(min-width:768px){body.bombeo-codigo-puro ul.products{grid-template-columns:repeat(4,minmax(0,1fr)) !important}}
body.bombeo-codigo-puro ul.products li.product{width:auto !important;margin:0 !important;padding:0 !important;float:none !important;list-style:none}
body.bombeo-codigo-puro ul.products li.product::before{display:none}
body.bombeo-codigo-puro ul.products::before,body.bombeo-codigo-puro ul.products::after{content:none !important;display:none !important}

/* ============================================================
   SHOP / CATEGORÍAS
   ============================================================ */
.bt-shop{max-width:1400px;margin:0 auto;padding:22px 24px 72px;font-family:'Poppins',system-ui,-apple-system,sans-serif;color:#101216}
.bt-shop__crumb{font-size:13px;color:#6B7079;margin:4px 0 18px}
.bt-shop__crumb a{color:#6B7079;text-decoration:none}
.bt-shop__crumb a:hover{color:#E30613}
/* Migas compactas en móvil: una línea, scroll horizontal sin barra, degradado a la derecha.
   Conserva todos los enlaces (rastreables por Google) y el JSON-LD BreadcrumbList intacto. */
@media(max-width:768px){
	.bt-shop__crumb,.bt-fp-crumb{font-size:12.5px;margin-top:2px;margin-bottom:12px;white-space:nowrap;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 86%,transparent 100%);mask-image:linear-gradient(90deg,#000 86%,transparent 100%)}
	.bt-shop__crumb::-webkit-scrollbar,.bt-fp-crumb::-webkit-scrollbar{display:none}
	.bt-shop__crumb .woocommerce-breadcrumb,.bt-fp-crumb .woocommerce-breadcrumb{white-space:nowrap;display:inline-block}
}
.bt-shop__head{margin:0 0 28px;padding-bottom:22px;border-bottom:1px solid #E6E8EC}
.bt-shop__title{font-size:26px;font-weight:700;letter-spacing:-0.02em;margin:0;color:#101216}
.bt-shop__desc{color:#33475B;margin:16px 0 0;font-size:15.5px;line-height:1.75;max-width:900px}
.bt-shop__desc strong,.bt-shop__desc b{color:#101216;font-weight:700}
.bt-shop__desc a{color:#E30613;text-decoration:none;font-weight:600}
.bt-shop__desc a:hover{text-decoration:underline}
.bt-shop__desc p{margin:0 0 10px}
.bt-shop__desc p:last-child{margin:0}
/* Clamp a 2 líneas + "Ver más" — solo se activa por JS en móvil */
.bt-shop__desc.is-clamp{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.bt-shop__desc.is-clamp p{display:inline;margin:0}
.bt-shop .bt-shop__head .bt-shop__descmore{display:none;align-items:center;gap:5px;margin:9px 0 0 !important;padding:0 !important;background:transparent !important;background-image:none !important;border:0 !important;box-shadow:none !important;outline:none !important;color:#E30613 !important;font-family:inherit;font-weight:700 !important;font-size:13.5px !important;line-height:1.4 !important;text-transform:none !important;letter-spacing:normal !important;border-radius:0 !important;min-height:0 !important;height:auto !important;width:auto !important;cursor:pointer}
.bt-shop .bt-shop__head .bt-shop__descmore.is-show{display:inline-flex}
.bt-shop .bt-shop__head .bt-shop__descmore:hover,.bt-shop .bt-shop__head .bt-shop__descmore:focus{background:transparent !important;color:#0B567F !important;box-shadow:none !important;text-decoration:underline}
.bt-shop .bt-shop__head .bt-shop__descmore svg{width:14px !important;height:14px !important;transition:transform .2s ease}
.bt-shop .bt-shop__head .bt-shop__descmore[aria-expanded="true"] svg{transform:rotate(180deg)}
@media(max-width:768px){.bt-shop__desc{font-size:14.5px;line-height:1.7;margin-top:12px}}
.bt-shop__bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 26px}
.bt-shop .woocommerce-result-count{color:#6B7079;font-size:13px;margin:0}
.bt-shop .woocommerce-ordering{margin:0}
.bt-shop .woocommerce-ordering select{border:1px solid #E6E8EC;border-radius:8px;padding:9px 12px;font-family:inherit;font-size:13px;color:#101216;background:#fff;cursor:pointer}
.bt-shop__empty{color:#6B7079}
/* ---- Resultados de búsqueda (reutiliza .bt-shop + .bt-pcard) ---- */
.bt-search__eyebrow{font-size:13px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#F9B233;margin:0 0 10px}
.bt-search .bt-shop__title{font-size:28px}
.bt-search__q{color:#E30613}
.bt-search__empty{max-width:640px;margin:24px auto 8px;text-align:center;padding:32px 20px}
.bt-search__empty-title{font-size:19px;font-weight:700;color:#101216;margin:0 0 8px}
.bt-search__empty-tips{color:#6B7079;margin:0 0 22px}
.bt-search__form{display:flex;gap:10px;max-width:520px;margin:0 auto 18px}
.bt-search__form input[type="search"]{flex:1 1 auto;min-width:0;border:1.5px solid #E6E8EC;border-radius:10px;padding:12px 14px;font-family:inherit;font-size:15px;color:#2C3038}
.bt-search__form input[type="search"]:focus{outline:none;border-color:#E30613}
.bt-search__form button{flex:0 0 auto;background:#101216 !important;background-image:none !important;color:#fff !important;border:0 !important;border-radius:10px;padding:12px 22px;font-family:inherit;font-weight:700;font-size:14.5px;cursor:pointer}
.bt-search__form button:hover{background:#061F3A !important}
.bt-search__catalog{display:inline-block;color:#E30613;font-weight:600;text-decoration:none}
.bt-search__catalog:hover{text-decoration:underline}
.bt-shop .woocommerce-pagination{margin-top:28px}
.bt-shop .woocommerce-pagination ul{display:flex;gap:6px;list-style:none;margin:0;padding:0;flex-wrap:wrap;border:none}
.bt-shop .woocommerce-pagination li{margin:0}
.bt-shop .woocommerce-pagination a,.bt-shop .woocommerce-pagination span{display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:38px;padding:0 10px;border:1px solid #E6E8EC;border-radius:8px;color:#101216;text-decoration:none;font-size:14px;background:#fff}
.bt-shop .woocommerce-pagination .current{background:#101216;color:#fff;border-color:#101216}

/* Layout: filtros a la izquierda + grid a la derecha */
.bt-shop__layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:28px;align-items:start}
.bt-shop__main{min-width:0}
/* Filtros fijos al hacer scroll (sticky) — DESKTOP. El sticky va en el grid item
   (.bt-shop__filters), no en .bt-filters: su contenedor .bt-shop__layout es alto
   y da recorrido para pegarse. Panel muy largo → scroll interno propio. El drawer
   móvil (@media max-width:860) sobrescribe a position:fixed y no se toca. */
@media(min-width:861px){
	.bt-shop__filters{position:sticky;top:20px;align-self:start;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);overflow-y:auto;overscroll-behavior:contain}
}
/* Filtros móvil (botón + drawer + overlay) — ocultos en desktop */
.bt-shop__filtoggle,.bt-shop__fildrawerhead,.bt-shop__filoverlay{display:none}
@media(max-width:860px){
	.bt-shop__layout{grid-template-columns:1fr;gap:0}
	/* Los filtros pasan a drawer off-canvas (izquierda); ya NO empujan a los productos */
	.bt-shop__filters{position:fixed;top:0;left:0;height:100vh;height:100dvh;width:300px;max-width:86vw;z-index:100000;background:#F4F5F7;box-shadow:0 0 40px rgba(8,25,45,.25);transform:translateX(-100%);transition:transform .25s ease;overflow-y:auto;padding:0 18px 24px;margin:0}
	.bt-shop__filters.is-open{transform:translateX(0)}
	.bt-shop__fildrawerhead{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:#F4F5F7;padding:16px 0 12px;margin:0 0 6px;border-bottom:1px solid #E6E8EC;z-index:1}
	.bt-shop__fildrawertitle{font-size:16px;font-weight:800;color:#101216}
	.bt-shop__filclose{background:none;border:0;font-size:26px;line-height:1;color:#6B7079;cursor:pointer;padding:0;width:34px;height:34px}
	.bt-shop__filoverlay{display:block;position:fixed;inset:0;background:rgba(11,36,64,.5);opacity:0;visibility:hidden;transition:opacity .25s ease,visibility .25s ease;z-index:99999}
	.bt-shop__filoverlay.is-open{opacity:1;visibility:visible}
	.bt-shop__filtoggle{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1.5px solid #101216;color:#101216 !important;border-radius:10px;padding:9px 16px;font-weight:700;font-size:14px;cursor:pointer;font-family:inherit;transition:background .15s ease,color .15s ease}
	.bt-shop__filtoggle:hover,.bt-shop__filtoggle:focus{background:#101216;color:#fff !important;border-color:#101216}
	.bt-shop__filtoggle svg{width:17px;height:17px;flex:0 0 auto}
	/* Barra: Filtros + Orden en una línea; se oculta el "Mostrando N resultados" */
	.bt-shop__bar{margin:0 0 18px;gap:10px;flex-wrap:nowrap}
	.bt-shop .woocommerce-result-count{display:none}
	.bt-shop .woocommerce-ordering{margin:0;min-width:0}
	.bt-shop .woocommerce-ordering select{font-size:14px;padding:10px 12px;border:1.5px solid #E6E8EC;border-radius:10px;max-width:100%}
}

/* Sidebar de filtros (mismos que las taxonomías) */
.bt-filters{font-family:'Poppins',system-ui,-apple-system,sans-serif;background:transparent;border:none;border-radius:0;padding:0}
.bt-filters__head{display:flex;align-items:center;justify-content:space-between;margin:0 0 18px;padding-bottom:12px;border-bottom:2px solid #101216}
.bt-filters__title{font-size:18px;font-weight:700;color:#101216}
.bt-filters__clear{font-size:12px;color:#E30613;text-decoration:none}
.bt-filters__clear:hover{text-decoration:underline}
.bt-filters__field{margin:0 0 16px}
.bt-filters__label{display:block;font-size:15px;font-weight:700;color:#101216;margin:0 0 7px}
.bt-filters__selwrap{position:relative}
.bt-filters__selwrap::after{content:'';position:absolute;right:16px;top:50%;width:9px;height:9px;border-right:2px solid #6B7079;border-bottom:2px solid #6B7079;transform:translateY(-70%) rotate(45deg);pointer-events:none}
.bt-filters__select{width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;background:#FFFFFF;border:1px solid #E6E8EC;border-radius:10px;padding:13px 40px 13px 14px;font-family:'Poppins',system-ui,sans-serif;font-size:15px;color:#101216;cursor:pointer;line-height:1.2}
.bt-filters__select:hover{border-color:#cdd6e2}
.bt-filters__select:focus{outline:none;border-color:#E30613}

/* Botón "Ver más" (AJAX, sin paginación) */
.bt-shop__more{display:flex;justify-content:center;margin:30px 0 0}
.bt-loadmore{background:#101216;color:#fff;border:none;border-radius:8px;padding:13px 32px;font-family:'Poppins',system-ui,sans-serif;font-weight:700;font-size:14px;cursor:pointer;transition:background-color .15s ease}
.bt-loadmore:hover{background:#061F3A}
.bt-loadmore[data-loading]{opacity:.7;cursor:progress}

/* ============================================================
   CARRITO LATERAL (drawer / side sheet)
   ============================================================ */
.bt-cart{position:fixed;inset:0;z-index:2147483000;visibility:hidden}
.bt-cart.is-open{visibility:visible}
.bt-cart__overlay{position:absolute;inset:0;background:rgba(4,16,30,.5);opacity:0;transition:opacity .28s ease}
.bt-cart.is-open .bt-cart__overlay{opacity:1}
.bt-cart__panel{position:absolute;top:0;right:0;height:100%;width:410px;max-width:92vw;background:#fff;box-shadow:-10px 0 40px rgba(16,18,22,.18);transform:translateX(100%);transition:transform .3s cubic-bezier(.2,.7,.3,1);display:flex;flex-direction:column;font-family:'Poppins',system-ui,-apple-system,sans-serif}
.bt-cart.is-open .bt-cart__panel{transform:translateX(0)}
.bt-cart__head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid #E6E8EC}
.bt-cart__title{font-size:17px;font-weight:700;color:#101216}
.bt-cart__close{background:transparent;border:none;font-size:28px;line-height:1;color:#6B7079;cursor:pointer;padding:0 4px;transition:color .15s ease}
.bt-cart__close:hover{color:#101216}
.bt-cart__body,.bt-cart .widget_shopping_cart_content{flex:1 1 auto;overflow-y:auto;padding:10px 22px 22px;display:flex;flex-direction:column;color:#101216}
/* Mini-cart propio (.bt-mc) */
.bt-cart .bt-mc__list{list-style:none;margin:0;padding:0}
.bt-cart .bt-mc__item{display:flex;align-items:flex-start;gap:12px;padding:14px 0;border-bottom:1px solid #E6E8EC;position:relative}
.bt-cart .bt-mc__thumb{flex:0 0 auto;width:60px;height:60px;border:1px solid #E6E8EC;border-radius:8px;background:#fff;display:block;overflow:hidden}
.bt-cart .bt-mc__thumb img{width:100%;height:100%;object-fit:contain;padding:6px;display:block;margin:0}
.bt-cart .bt-mc__info{flex:1 1 auto;min-width:0;padding-right:26px;display:flex;flex-direction:column;gap:4px}
.bt-cart .bt-mc__name{color:#101216 !important;text-decoration:none;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bt-cart .bt-mc__name:hover{color:#E30613 !important}
.bt-cart .bt-mc__qty{font-size:13px;color:#6B7079}
.bt-cart .bt-mc__price{color:#101216;font-weight:700}
.bt-cart .bt-mc__price .amount{color:#101216 !important}
.bt-cart .bt-mc__remove{position:absolute;top:14px;right:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;color:#9aa6b4 !important;background:#F1F4F8;border-radius:50%;text-decoration:none;transition:background .15s ease,color .15s ease}
.bt-cart .bt-mc__remove:hover{background:#FBE9E7;color:#B30510 !important}
.bt-cart .bt-mc__foot{margin-top:auto;padding-top:6px}
.bt-cart .bt-mc__subtotal{display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-top:2px solid #E6E8EC;font-size:15px;font-weight:700;color:#101216}
/* Cantidad editable dentro del cajon. Sin esto no hay NINGUN sitio donde
   cambiar de 1 a 3 unidades: la pagina /carrito/ se redirige. */
.bt-cart .bt-mc__qtybox{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:5px;position:relative}
.bt-cart .bt-mc__qbtn{width:22px;height:22px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;
	border:1px solid #D5DCE6;background:#fff;color:#101216;border-radius:4px;cursor:pointer;
	font-size:14px;font-weight:700;line-height:1;padding:0;transition:border-color .14s,background .14s}
.bt-cart .bt-mc__qbtn:hover:not(:disabled){border-color:#101216;background:#F4F7FB}
.bt-cart .bt-mc__qbtn:disabled{opacity:.38;cursor:default}
.bt-cart .bt-mc__qnum{min-width:20px;text-align:center;font-size:13px;font-weight:700;color:#101216}
.bt-cart .bt-mc__qtybox .bt-mc__price{margin-left:2px;font-size:13px;color:#6B7079}
/* Mientras viaja la peticion: se atenua y se bloquea, para que dos clics
   seguidos no manden dos cambios. */
.bt-cart .bt-mc__qtybox.is-cargando{opacity:.5;pointer-events:none}
.bt-cart .bt-mc__qaviso{flex:1 0 100%;font-size:11px;line-height:1.35;color:#B32D2E;margin-top:2px}

/* "IVA incluido" junto a la palabra Subtotal, en pequeno: aclara sin robarle
   protagonismo a la cifra, que es lo que se mira. */
.bt-cart .bt-mc__iva{display:block;font-size:9.5px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#6B7079;margin-top:2px}
.bt-cart .bt-mc__subtotal-val{color:#E30613;font-size:18px}
.bt-cart .bt-mc__subtotal-val .amount{color:#E30613 !important}
.bt-cart .bt-mc__btn{display:block;text-align:center;padding:13px;border-radius:8px;font-weight:700;font-size:14px;text-decoration:none;margin-top:10px;transition:background .15s ease,border-color .15s ease}
.bt-cart .bt-mc__btn--checkout{background:#101216;color:#fff !important}
.bt-cart .bt-mc__btn--checkout:hover{background:#061F3A}
.bt-cart .bt-mc__btn--cart{background:#fff;border:1.5px solid #101216;color:#101216 !important}
.bt-cart .bt-mc__btn--cart:hover{background:#F4F7FB}
.bt-cart .bt-mc__empty{text-align:center;padding:44px 0;margin:auto 0;color:#6B7079;display:flex;flex-direction:column;align-items:center;gap:12px}
.bt-cart .bt-mc__empty p{margin:0;font-size:14px}
.bt-cart .bt-mc__empty .bt-mc__btn{width:100%}
@media(max-width:480px){.bt-cart__panel{width:100%;max-width:100%}}

/* ============================================================
   CHECKOUT — estilo "modelo" (.bt-checkout / tarjetas)
   ============================================================ */

/* Oculta el título de página del tema (evita duplicado) en checkout/cart */
body.woocommerce-checkout .page-header,
body.woocommerce-cart .page-header{display:none!important}

.woocommerce-checkout .bt-checkout-page{max-width:1400px;margin:0 auto;padding:24px 24px 64px}
.bt-checkout-page__head{margin:0 0 24px;text-align:center}
.bt-checkout-page__title{font-size:29px;font-weight:800;color:#16181D;margin:0 0 12px;letter-spacing:-0.02em}
.bt-checkout-page__trust{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;gap:10px 22px;margin:0;padding:0}
.bt-checkout-page__trust li{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:600;color:#6B7079}
.bt-checkout-page__trust li svg{width:17px;height:17px;color:#E30613;flex:0 0 auto}

/* Grid principal */
.bt-checkout.woocommerce-checkout{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:26px;align-items:start;margin:0}
.bt-checkout__main{min-width:0;display:flex;flex-direction:column;gap:18px}
.bt-checkout__main #customer_details{display:flex;flex-direction:column;gap:18px}

/* Tarjeta base */
.bt-checkout .bt-card{background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:22px 24px;box-shadow:0 1px 2px rgba(16,42,74,.03)}
.bt-checkout .bt-card__head{display:flex;align-items:center;gap:12px;margin:0 0 18px}
.bt-checkout .bt-card__ico{flex:0 0 auto;width:38px;height:38px;border-radius:10px;background:#F4F5F7;color:#E30613;display:flex;align-items:center;justify-content:center}
.bt-checkout .bt-card__ico svg{width:19px;height:19px}
.bt-checkout .bt-card__title{font-size:14px;font-weight:800;color:#2C3038;margin:0;text-transform:uppercase;letter-spacing:0.06em}

/* Badge "Sesión activa" */
.bt-checkout .bt-badge{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;padding:5px 10px;border-radius:20px}
.bt-checkout .bt-badge svg{width:13px;height:13px}
.bt-checkout .bt-badge--ok{background:#E7F6EE;color:#1E8A54}

/* Caja usuario logueado */
.bt-checkout .bt-userbox{background:#F4F5F7;border:1px solid #E1EDF8;border-radius:11px;padding:15px 16px;display:flex;flex-direction:column;gap:3px}
.bt-checkout .bt-userbox strong{font-size:15px;color:#2C3038;font-weight:700}
.bt-checkout .bt-userbox span{font-size:13.5px;color:#6B7079}

/* Rejilla de campos */
.bt-checkout .bt-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.bt-checkout .bt-fields--notes{margin-top:2px}
.bt-checkout .bt-fields .form-row{float:none!important;width:auto!important;padding:0;margin:0 0 15px;display:flex;flex-direction:column}
.bt-checkout .bt-fields .form-row-wide,
.bt-checkout .bt-fields .form-row-full,
.bt-checkout .bt-fields .notes{grid-column:1/-1}
.bt-checkout #billing_country_field{display:none!important}

/* Labels en mayúsculas */
.bt-checkout .bt-fields label{font-size:11px;font-weight:700;color:#6B7079;margin:0 0 7px;text-transform:uppercase;letter-spacing:0.06em;line-height:1.3}
.bt-checkout .bt-fields label .required,
.bt-checkout .bt-fields label abbr[title]{color:#E30613;border:0;text-decoration:none;margin-left:2px}
.bt-checkout .woocommerce-input-wrapper{display:block;width:100%;position:relative}

/* Inputs — especificidad alta para ganarle a WooCommerce/tema */
body.woocommerce-checkout .bt-checkout .bt-fields .form-row input.input-text,
body.woocommerce-checkout .bt-checkout .bt-fields .form-row textarea,
body.woocommerce-checkout .bt-checkout .bt-fields .form-row select,
body.woocommerce-checkout .bt-checkout .bt-fields .form-row .select2-selection{width:100%;min-height:52px;background:#fff;border:1.5px solid #E6E8EC!important;border-radius:11px!important;padding:13px 15px;font-size:15px;color:#2C3038;line-height:1.4;box-sizing:border-box;transition:border-color .15s ease,box-shadow .15s ease;box-shadow:none!important}
body.woocommerce-checkout .bt-checkout .bt-fields .form-row textarea{min-height:92px;resize:vertical;line-height:1.5}
body.woocommerce-checkout .bt-checkout .bt-fields .form-row input.input-text:focus,
body.woocommerce-checkout .bt-checkout .bt-fields .form-row textarea:focus,
body.woocommerce-checkout .bt-checkout .bt-fields .form-row select:focus{outline:0;border-color:#E30613!important;box-shadow:0 0 0 3px rgba(227,6,19,.14)!important}
.bt-checkout .bt-fields .form-row input::placeholder,
.bt-checkout .bt-fields .form-row textarea::placeholder{color:#9AA7B8}

/* Iconos a la izquierda dentro del input */
.bt-checkout #billing_first_name,
.bt-checkout #billing_last_name{padding-left:42px!important;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239AA7B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E") 14px center/18px no-repeat!important}
.bt-checkout #billing_email{padding-left:42px!important;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239AA7B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Cpath d='m22 6-10 7L2 6'/%3E%3C/svg%3E") 14px center/18px no-repeat!important}
.bt-checkout #billing_phone{padding-left:42px!important;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239AA7B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") 14px center/18px no-repeat!important}
.bt-checkout #billing_cedula{padding-left:42px!important;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239AA7B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Ccircle cx='8' cy='10' r='2'/%3E%3Cpath d='M14 9h4M14 13h4M5 16h6'/%3E%3C/svg%3E") 14px center/18px no-repeat!important}
.bt-checkout #billing_city,
.bt-checkout #billing_address_1,
.bt-checkout #billing_address_2{padding-left:42px!important;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239AA7B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E") 14px center/18px no-repeat!important}

/* select2 (departamento) al mismo estilo */
.bt-checkout .bt-fields .select2-container{width:100%!important}
.bt-checkout .bt-fields .select2-container--default .select2-selection--single{display:flex;align-items:center}
.bt-checkout .bt-fields .select2-container--default .select2-selection--single .select2-selection__rendered{line-height:1.4;color:#2C3038;padding:0}
.bt-checkout .bt-fields .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;top:0;right:12px}
.bt-checkout .bt-fields .select2-container--default.select2-container--open .select2-selection--single,
.bt-checkout .bt-fields .select2-container--default.select2-container--focus .select2-selection--single{border-color:#E30613!important;box-shadow:0 0 0 3px rgba(227,6,19,.14)!important}
.bt-checkout .bt-fields select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%236B7788' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:38px!important}

/* ---------- Columna derecha ---------- */
.bt-checkout__aside{position:sticky;top:20px;display:flex;flex-direction:column;gap:18px}
.bt-checkout__aside #order_review{display:flex;flex-direction:column;gap:18px}

/* Resumen */
.bt-checkout .bt-summary__count{margin-left:auto;font-size:12.5px;font-weight:700;color:#6B7079;text-transform:none;letter-spacing:0}
.bt-checkout table.bt-review{width:100%;border-collapse:collapse!important;margin:0;background:transparent!important;border:0!important;box-shadow:none!important}
.bt-checkout .bt-review td,.bt-checkout .bt-review th{border:0!important;padding:0!important;background:transparent!important;vertical-align:top}
.bt-checkout .bt-review tbody tr td{padding:0 0 14px!important}
.bt-checkout .bt-review .product-total{text-align:right;font-weight:700;color:#2C3038;white-space:nowrap;padding-left:10px;font-size:14px}
.bt-checkout .bt-review__item{display:flex;align-items:flex-start;gap:12px}
.bt-checkout .bt-review__thumb{flex:0 0 auto;width:52px;height:52px;border:1px solid #E6E8EC;border-radius:9px;background:#fff;overflow:hidden}
.bt-checkout .bt-review__thumb img{width:100%;height:100%;object-fit:contain;padding:5px;display:block;margin:0}
.bt-checkout .bt-review__info{min-width:0;display:flex;flex-direction:column;gap:2px}
.bt-checkout .bt-review__name{font-size:13px;font-weight:600;color:#2C3038;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bt-checkout .bt-review__meta{font-size:12.5px;color:#8492A6}
.bt-checkout .bt-review tfoot tr th,.bt-checkout .bt-review tfoot tr td{padding:9px 0!important;font-size:14px;color:#6B7079}
.bt-checkout .bt-review tfoot tr th{text-align:left;font-weight:600}
.bt-checkout .bt-review tfoot tr td{text-align:right;font-weight:700;color:#2C3038}
.bt-checkout .bt-review tbody tr:last-child td{padding-bottom:14px!important;border-bottom:1px solid #F0F2F5!important}
.bt-checkout .bt-review tfoot .cart-subtotal th,.bt-checkout .bt-review tfoot .cart-subtotal td{padding-top:14px!important;border-top:0!important}
.bt-checkout .bt-ship-tbd__val{color:#8492A6;font-weight:600}
.bt-checkout .bt-review tfoot .order-total th{font-size:16px;font-weight:800;color:#2C3038}
.bt-checkout .bt-review tfoot .order-total td{font-size:21px;font-weight:800;color:#16181D}
.bt-checkout .bt-review tfoot .order-total th,.bt-checkout .bt-review tfoot .order-total td{border-top:1px solid #E6E8EC!important;padding-top:13px!important}

/* ---------- Método de pago ---------- */
.bt-checkout .bt-payment #payment.woocommerce-checkout-payment{background:transparent;border-radius:0;margin:0}
.bt-checkout .bt-payment #payment .wc_payment_methods{list-style:none;margin:0;padding:0;border:0}
.bt-checkout .bt-payment #payment ul.wc_payment_methods li.wc_payment_method{display:flex;flex-wrap:wrap;align-items:center;border:1.5px solid #E4E9F0;border-radius:12px;background:#fff;margin:0 0 10px;padding:0;overflow:hidden;list-style:none}
.bt-checkout .bt-payment #payment ul.wc_payment_methods li.wc_payment_method>input[type=radio]{width:18px;height:18px;accent-color:#E30613;margin:0 0 0 16px;flex:0 0 auto}
.bt-checkout .bt-payment #payment ul.wc_payment_methods li.wc_payment_method>label{flex:1 1 auto;display:flex;align-items:center;gap:10px;padding:13px 16px 13px 11px;margin:0;font-size:14.5px;font-weight:700;color:#2C3038;cursor:pointer;text-transform:none;letter-spacing:0}
.bt-checkout .bt-payment #payment ul.wc_payment_methods li.wc_payment_method>label img{margin-left:auto;max-height:26px;width:auto}
.bt-checkout .bt-payment #payment div.payment_box{flex:1 0 100%;background:#F5F8FC;border:0;border-top:1px solid #E4E9F0;margin:0;padding:11px 16px;font-size:12.5px;line-height:1.5;color:#6B7079;border-radius:0;box-shadow:none}
.bt-checkout .bt-payment #payment div.payment_box::before{display:none!important}
.bt-checkout .bt-payment #payment div.payment_box p{margin:0}
.bt-checkout .bt-payment #payment .woocommerce-terms-and-conditions-wrapper{margin:4px 0 14px}
.bt-checkout .bt-payment #payment .woocommerce-privacy-policy-text p{font-size:12px;color:#8492A6;margin:0 0 10px}
.bt-checkout .bt-payment #payment .woocommerce-privacy-policy-text a,
.bt-checkout .bt-payment #payment .woocommerce-terms-and-conditions-wrapper a{color:#E30613!important;font-weight:600;text-decoration:underline}
.bt-checkout .bt-payment #payment .woocommerce-privacy-policy-text a:hover,
.bt-checkout .bt-payment #payment .woocommerce-terms-and-conditions-wrapper a:hover{color:#101216!important}

/* CTA realizar pedido */
.bt-checkout .bt-payment #payment .form-row.place-order{padding:0;margin:2px 0 0}
.bt-checkout #payment #place_order{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;background:#16181D!important;color:#fff!important;border:0!important;border-radius:12px!important;padding:16px 18px;font-size:15.5px;font-weight:800;letter-spacing:0.06em;text-transform:uppercase;cursor:pointer;transition:background .15s ease,transform .05s ease;box-shadow:0 8px 20px rgba(11,36,64,.24);text-shadow:none}
.bt-checkout #payment #place_order::before{content:"";width:16px;height:16px;flex:0 0 auto;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E") center/contain no-repeat}
.bt-checkout #payment #place_order:hover{background:#08080A!important}
.bt-checkout #payment #place_order:active{transform:translateY(1px)}

/* El toggle por defecto de WooCommerce se oculta: usamos el prompt del aside */
.bt-checkout-page .woocommerce-form-login-toggle{display:none!important}

/* Prompt "¿Ya tienes cuenta?" (arriba del resumen) */
.bt-checkout .bt-loginprompt{display:flex;flex-direction:column;gap:14px}
.bt-checkout .bt-loginprompt__row{display:flex;align-items:center;gap:12px}
.bt-checkout .bt-loginprompt__txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.bt-checkout .bt-loginprompt__txt strong{font-size:15px;font-weight:700;color:#2C3038}
.bt-checkout .bt-loginprompt__txt span{font-size:13px;color:#6B7079;line-height:1.4}
.bt-checkout .bt-loginprompt__btn{display:block;text-align:center;background:#F4F5F7;color:#E30613!important;border:1.5px solid #CFE4F5;border-radius:10px;padding:11px;font-weight:700;font-size:14px;text-decoration:none;transition:background .15s ease}
.bt-checkout .bt-loginprompt__btn:hover{background:#DCEBF8}

/* Hint "Precargados de tu cuenta" en el header de la tarjeta */
.bt-checkout .bt-card__hint{margin-left:auto;font-size:11.5px;font-weight:600;color:#1E8A54;background:#E7F6EE;padding:4px 9px;border-radius:16px;letter-spacing:0;text-transform:none}

/* Tarjeta "Tus datos" compacta (foto + nombre + Mi perfil) */
.bt-checkout .bt-account{display:flex;align-items:center;gap:13px;padding:14px 18px}
.bt-checkout .bt-account__avatar{flex:0 0 auto;width:46px;height:46px;border-radius:50%;overflow:hidden;background:#F4F5F7;display:block}
.bt-checkout .bt-account__avatar img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%;margin:0}
.bt-checkout .bt-account__info{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.bt-checkout .bt-account__name{font-size:15px;font-weight:700;color:#2C3038;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bt-checkout .bt-account__link{font-size:13px;color:#E30613;font-weight:600;text-decoration:none;width:-moz-fit-content;width:fit-content}
.bt-checkout .bt-account__link:hover{text-decoration:underline}
.bt-checkout .bt-account__dot{flex:0 0 auto;width:10px;height:10px;border-radius:50%;background:#22C55E;box-shadow:0 0 0 3px rgba(34,197,94,.18)}

/* Login form (dentro del modal) */
.bt-checkout-page form.woocommerce-form-login,
.bt-loginmodal form.woocommerce-form-login{background:#fff;border:1px solid #E6E8EC;border-radius:14px;padding:22px 24px;margin:0 0 18px;max-width:540px}
.bt-checkout-page form.woocommerce-form-login .form-row,
.bt-loginmodal form.woocommerce-form-login .form-row{margin:0 0 14px;display:flex;flex-direction:column;width:auto;float:none}
.bt-checkout-page form.woocommerce-form-login label,
.bt-loginmodal form.woocommerce-form-login label{font-size:11px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 7px}
.bt-checkout-page form.woocommerce-form-login .input-text,
.bt-loginmodal form.woocommerce-form-login .input-text{width:100%;min-height:48px;border:1.5px solid #E6E8EC;border-radius:10px;padding:11px 14px;font-size:14.5px;color:#2C3038;box-sizing:border-box}
.bt-checkout-page form.woocommerce-form-login .input-text:focus,
.bt-loginmodal form.woocommerce-form-login .input-text:focus{outline:0;border-color:#E30613;box-shadow:0 0 0 3px rgba(227,6,19,.14)}
.bt-checkout-page form.woocommerce-form-login button.button,
.bt-loginmodal form.woocommerce-form-login button.button{background:#16181D;color:#fff;border:0;border-radius:10px;padding:12px 22px;font-weight:700;font-size:14px;cursor:pointer}
.bt-checkout-page form.woocommerce-form-login button.button:hover,
.bt-loginmodal form.woocommerce-form-login button.button:hover{background:#08080A}
.bt-checkout-page form.woocommerce-form-login .woocommerce-form-login__rememberme,
.bt-loginmodal form.woocommerce-form-login .woocommerce-form-login__rememberme{flex-direction:row;align-items:center;gap:8px;font-size:13px;font-weight:500;color:#6B7079;text-transform:none;letter-spacing:0}
.bt-checkout-page form.woocommerce-form-login .woocommerce-form-login__rememberme input,
.bt-loginmodal form.woocommerce-form-login .woocommerce-form-login__rememberme input{accent-color:#E30613}
.bt-checkout-page form.woocommerce-form-login .lost_password,
.bt-loginmodal form.woocommerce-form-login .lost_password{margin:6px 0 0}
.bt-checkout-page form.woocommerce-form-login .lost_password a,
.bt-loginmodal form.woocommerce-form-login .lost_password a{color:#E30613;font-size:13px}

/* Modal de login (popup) */
.bt-loginmodal{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(11,36,64,.55);opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease}
.bt-loginmodal.is-open{opacity:1;visibility:visible}
.bt-loginmodal__panel{width:100%;max-width:440px;max-height:90vh;overflow-y:auto;background:#fff;border-radius:16px;box-shadow:0 24px 60px rgba(8,25,45,.35);transform:translateY(12px) scale(.98);transition:transform .2s ease}
.bt-loginmodal.is-open .bt-loginmodal__panel{transform:none}
.bt-loginmodal__head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid #E6E8EC}
.bt-loginmodal__title{font-size:17px;font-weight:800;color:#16181D}
.bt-loginmodal__close{background:none;border:0;font-size:26px;line-height:1;color:#9AA7B8;cursor:pointer;padding:0;width:32px;height:32px;border-radius:8px;transition:background .15s ease,color .15s ease}
.bt-loginmodal__close:hover{background:#F1F4F8;color:#16181D}
.bt-loginmodal .woocommerce-form-login{border:0!important;border-radius:0!important;margin:0!important;padding:22px!important;max-width:none!important;display:block!important}

/* Notices */
.woocommerce-checkout .bt-checkout-page .woocommerce-error,
.woocommerce-checkout .bt-checkout-page .woocommerce-info,
.woocommerce-checkout .bt-checkout-page .woocommerce-message{border-radius:11px;margin-bottom:16px}

/* ---------- Checkout distraction-free (cabecera/footer mínimos) ---------- */
body.bombeo-checkout-min{background:#F4F5F7;font-family:'Poppins',system-ui,-apple-system,'Segoe UI',sans-serif;margin:0}
.bt-comin-header{background:transparent;padding:18px 0 8px}
.bt-comin-header__inner{max-width:1400px;margin:0 auto;padding:0 24px;display:flex;flex-direction:column;align-items:flex-start}
.bt-comin-back{display:inline-flex;align-items:center;gap:6px;margin:0 0 22px;font-size:13.5px;font-weight:600;color:#6B7079;text-decoration:none;transition:color .15s ease}
.bt-comin-back:hover{color:#16181D}
.bt-comin-back svg{width:17px;height:17px;flex:0 0 auto}
.bt-comin-logo{display:inline-block;line-height:0}
.bt-comin-logo img{height:50px;width:auto;display:block;mix-blend-mode:multiply}
.bt-comin-trust{list-style:none;display:flex;flex-wrap:wrap;gap:8px 20px;margin:28px 0 0;padding:0}
.bt-comin-trust li{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:600;color:#6B7079}
.bt-comin-trust li svg{width:17px;height:17px;color:#E30613;flex:0 0 auto}
.bt-comin-main{min-height:60vh}
.bt-comin-footer{text-align:center;padding:26px 20px 44px;color:#9AA7B8;font-size:12.5px;line-height:1.6}
.bt-comin-footer p{margin:0}
.bt-comin-footer span{color:#6B7079}
@media(max-width:560px){.bt-comin-logo img{height:44px}.bt-comin-trust li{font-size:12.5px}}

/* ---------- Responsive ---------- */
@media(max-width:980px){
	.bt-checkout.woocommerce-checkout{grid-template-columns:1fr;gap:18px}
	.bt-checkout__aside{position:static}
}
@media(max-width:560px){
	.bt-checkout .bt-fields{grid-template-columns:1fr}
	.bt-checkout-page__title{font-size:23px}
	.woocommerce-checkout .bt-checkout-page{padding:18px 14px 48px}
	.bt-checkout .bt-card{padding:18px 16px}
}

/* ============================================================
   MI CUENTA (body.woocommerce-account)
   Ancho 1280 igual que header, footer, shop y checkout.
   Cubre los dos estados y las cuatro pestañas.
   ============================================================ */
/* ============================================================
   Mi Cuenta NO es un documento
   ============================================================
   page.php la envuelve en .bt-pag (1080px) y .bt-pag__wrap (780px),
   que son medidas de LECTURA: pensadas para leer un texto legal largo
   sin cansar la vista. El header del sitio va a 1280, así que Mi Cuenta
   se veía metida hacia dentro, con un escalón evidente contra la
   cabecera. Y peor: la tabla de enlaces compartidos, que necesita 980px,
   se quedaba sin sitio.
   Aquí se le devuelve el ancho del sitio. El migas y el H1 de page.php
   se conservan, que sí aportan.
   ============================================================ */
body.woocommerce-account .bt-pag{max-width:1400px;padding:0 24px 64px}
body.woocommerce-account .bt-pag__migas{max-width:none;margin:20px 0 0}
body.woocommerce-account .bt-pag__wrap{max-width:none}
/* El padding lateral ya lo pone .bt-pag: si no, se sumaría dos veces. */
body.woocommerce-account .woocommerce{max-width:none;padding-left:0;padding-right:0}

body.woocommerce-account .woocommerce{max-width:1400px;margin:0 auto;padding:24px 24px 64px;font-family:'Poppins',system-ui,-apple-system,sans-serif;color:#101216}
body.woocommerce-account .woocommerce *{box-sizing:border-box}

/* Neutraliza los flotados de WooCommerce en TODA la cuenta
   (los usa tanto en login+registro como en direcciones). */
body.woocommerce-account .col2-set,
body.woocommerce-account .u-columns{width:auto;float:none;margin:0}
body.woocommerce-account .col2-set::before,
body.woocommerce-account .col2-set::after,
body.woocommerce-account .u-columns::before,
body.woocommerce-account .u-columns::after{display:none}
body.woocommerce-account .col-1,
body.woocommerce-account .col-2,
body.woocommerce-account .u-column1,
body.woocommerce-account .u-column2{width:auto!important;float:none!important;margin:0;padding:0}

/* --- Avisos --- */
body.woocommerce-account .woocommerce-notices-wrapper ul,
body.woocommerce-account .woocommerce-notices-wrapper .woocommerce-message,
body.woocommerce-account .woocommerce-notices-wrapper .woocommerce-error{list-style:none;margin:0 0 20px;padding:14px 18px;border-radius:12px;font-size:14px;line-height:1.5;border:1px solid #E6E8EC;background:#fff}
body.woocommerce-account .woocommerce-notices-wrapper .woocommerce-error{border-color:#F2C9C7;background:#FDF3F2;color:#8E241F}
body.woocommerce-account .woocommerce-notices-wrapper .woocommerce-message{border-color:#BFE0CF;background:#F1F9F4;color:#1D6B41}
body.woocommerce-account .woocommerce-notices-wrapper li{margin:0}

/* ============================================================
   DESLOGUEADO — Acceder + Registrarse
   ============================================================ */
body.woocommerce-account #customer_login{display:grid;grid-template-columns:1fr 1fr;gap:22px}
body.woocommerce-account #customer_login .u-column1,
body.woocommerce-account #customer_login .u-column2{display:flex;flex-direction:column;background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:28px;box-shadow:0 2px 10px rgba(16,18,22,.04)}
body.woocommerce-account #customer_login h2{margin:0;font-size:19px;font-weight:800;color:#16181D;letter-spacing:-0.02em}
body.woocommerce-account #customer_login .u-column1 h2::after{content:"Entra con tu correo y contraseña.";display:block;margin-top:6px;font-size:13px;font-weight:500;color:#6B7079;letter-spacing:0}
body.woocommerce-account #customer_login .u-column2 h2::after{content:"Crea tu cuenta y sigue tus pedidos.";display:block;margin-top:6px;font-size:13px;font-weight:500;color:#6B7079;letter-spacing:0}

/* Solo «Acceder» (registro en Mi cuenta APAGADO, caso Automex): WooCommerce pinta
   el <h2> y el formulario sueltos, sin #customer_login. Misma tarjeta, centrada. */
body.woocommerce-account .woocommerce > h2{max-width:520px;margin:12px auto 0;background:#fff;border:1px solid #E6E8EC;border-bottom:0;border-radius:16px 16px 0 0;padding:28px 28px 0;font-size:19px;font-weight:800;color:#16181D;letter-spacing:-0.02em}
body.woocommerce-account .woocommerce > h2::after{content:"Entra con tu correo y contraseña.";display:block;margin-top:6px;font-size:13px;font-weight:500;color:#6B7079;letter-spacing:0}
body.woocommerce-account .woocommerce > form.woocommerce-form-login{max-width:520px;margin:0 auto;background:#fff;border:1px solid #E6E8EC;border-top:0;border-radius:0 0 16px 16px;padding:20px 28px 28px;box-shadow:0 2px 10px rgba(16,18,22,.04)}
body.woocommerce-account .woocommerce > form.woocommerce-ResetPassword{max-width:520px;margin:12px auto 0;background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:28px}

/* ============================================================
   FORMULARIOS (login, registro, recuperar, editar, direcciones)
   ============================================================ */
body.woocommerce-account form.woocommerce-form-login,
body.woocommerce-account form.woocommerce-form-register,
body.woocommerce-account form.woocommerce-ResetPassword,
body.woocommerce-account form.woocommerce-EditAccountForm,
body.woocommerce-account form.woocommerce-address-fields,
body.woocommerce-account form.edit-account{display:flex;flex-direction:column;margin:20px 0 0;padding:0;border:0}
body.woocommerce-account .form-row{display:flex;flex-direction:column;width:auto;float:none;margin:0 0 15px;padding:0}
body.woocommerce-account .form-row label{font-size:11px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 7px;line-height:1.4}
body.woocommerce-account .form-row label .required{color:#E30613;text-decoration:none}
body.woocommerce-account .input-text,
body.woocommerce-account input[type="text"],
body.woocommerce-account input[type="email"],
body.woocommerce-account input[type="tel"],
body.woocommerce-account input[type="password"],
body.woocommerce-account select,
body.woocommerce-account textarea{width:100%;min-height:48px;border:1.5px solid #E6E8EC;border-radius:10px;padding:11px 14px;font-size:15px;font-family:inherit;color:#101216;background:#fff;transition:border-color .15s ease,box-shadow .15s ease}
body.woocommerce-account .input-text:focus,
body.woocommerce-account input:focus,
body.woocommerce-account select:focus,
body.woocommerce-account textarea:focus{outline:0;border-color:#E30613;box-shadow:0 0 0 3px rgba(227,6,19,.14)}
body.woocommerce-account .woocommerce-password-hint,
body.woocommerce-account .woocommerce-privacy-policy-text p,
body.woocommerce-account form em{display:block;margin:2px 0 0;font-size:12.5px;font-style:normal;color:#6B7079;line-height:1.5}
/* La fila que contiene el botón no debe estirarlo a todo el ancho. */
body.woocommerce-account .form-row .button{align-self:flex-start}

/* --- Botones --- */
body.woocommerce-account .button,
body.woocommerce-account button.button,
body.woocommerce-account input.button,
body.woocommerce-account a.woocommerce-Button{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:auto;background:#16181D;color:#fff;border:0;border-radius:10px;padding:13px 24px;font-family:inherit;font-weight:700;font-size:14.5px;line-height:1;cursor:pointer;text-decoration:none;transition:background .15s ease,transform .12s ease}
body.woocommerce-account .button:hover,
body.woocommerce-account button.button:hover,
body.woocommerce-account input.button:hover,
body.woocommerce-account a.woocommerce-Button:hover{background:#08080A;color:#fff;text-decoration:none}
body.woocommerce-account .button:active{transform:translateY(1px)}

body.woocommerce-account .woocommerce-form-login__rememberme{flex-direction:row;align-items:center;gap:8px;font-size:13.5px;font-weight:500;color:#6B7079;text-transform:none;letter-spacing:0;margin:0 0 16px}
body.woocommerce-account .woocommerce-form-login__rememberme input{accent-color:#E30613;width:auto;min-height:0}
body.woocommerce-account .lost_password{margin:14px 0 0;font-size:13.5px}
/* Solo los enlaces del CONTENIDO de la cuenta: antes teñía de rojo también el header
   y el footer. :where() deja la especificidad igual que antes (0,1,2). */
body.woocommerce-account :where(.woocommerce) a{color:#E30613;text-decoration:none}
body.woocommerce-account :where(.woocommerce) a:hover{text-decoration:underline}

/* ============================================================
   LOGUEADO — menú ARRIBA, en botones, y contenido a todo lo ancho
   ============================================================
   Antes era barra lateral de 250px. El problema no era estético: esa
   columna se comía 250px + 26 de hueco, y la tabla de enlaces
   compartidos —diez columnas— se quedaba sin sitio y partía las fechas
   en tres líneas. Subiendo el menú, el contenido recupera el ancho
   completo y la tabla entra sin romperse.
   ============================================================ */
/* Base primero: anula los flotados de WooCommerce (float:left/30% y float:right/68%). */
body.woocommerce-account .woocommerce-MyAccount-navigation,
body.woocommerce-account .woocommerce-MyAccount-content{float:none;width:auto}
body.woocommerce-account.logged-in .woocommerce{display:block}
body.woocommerce-account .woocommerce-MyAccount-navigation{margin:0 0 22px}

/* Fuera la tarjeta que envolvía la lista: ahora cada enlace es su propio botón. */
body.woocommerce-account .woocommerce-MyAccount-navigation ul{list-style:none;margin:0;padding:0;background:none;border:0;
	box-shadow:none;display:flex;flex-wrap:wrap;gap:8px}
body.woocommerce-account .woocommerce-MyAccount-navigation li{margin:0}
body.woocommerce-account .woocommerce-MyAccount-navigation li a{display:inline-flex;align-items:center;white-space:nowrap;
	padding:10px 17px;border-radius:999px;background:#fff;border:1px solid #E6E8EC;font-size:14px;font-weight:600;
	color:#6B7079;text-decoration:none;transition:background .15s ease,color .15s ease,border-color .15s ease}
body.woocommerce-account .woocommerce-MyAccount-navigation li a:hover{background:#F1F5FA;border-color:#C7CBD2;color:#101216;text-decoration:none}
/* El activo va en navy sólido: en una fila de botones el relleno claro de
   antes no bastaba para saber dónde estás. */
body.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a{background:#101216;border-color:#101216;color:#fff;font-weight:700}
body.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a:hover{background:#0B3A6B;border-color:#0B3A6B;color:#fff}
/* Salir se separa del resto y no compite con las secciones. */
body.woocommerce-account .woocommerce-MyAccount-navigation li.woocommerce-MyAccount-navigation-link--customer-logout{margin-left:auto}
body.woocommerce-account .woocommerce-MyAccount-navigation li.woocommerce-MyAccount-navigation-link--customer-logout a{color:#E30613;border-color:#F3D3D1}
body.woocommerce-account .woocommerce-MyAccount-navigation li.woocommerce-MyAccount-navigation-link--customer-logout a:hover{background:#FDF3F2;border-color:#E30613;color:#E30613}

@media (max-width:640px){
	/* En móvil la fila se desliza en horizontal en vez de apilarse en seis
	   filas de botones, que empujaría el contenido fuera de pantalla. */
	body.woocommerce-account .woocommerce-MyAccount-navigation ul{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;
		scrollbar-width:none;-webkit-overflow-scrolling:touch}
	body.woocommerce-account .woocommerce-MyAccount-navigation ul::-webkit-scrollbar{display:none}
	body.woocommerce-account .woocommerce-MyAccount-navigation li.woocommerce-MyAccount-navigation-link--customer-logout{margin-left:0}
}

body.woocommerce-account .woocommerce-MyAccount-content{background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:28px;box-shadow:0 2px 10px rgba(16,18,22,.04);font-size:15px;line-height:1.65}
body.woocommerce-account .woocommerce-MyAccount-content > p:first-child{margin-top:0}
body.woocommerce-account .woocommerce-MyAccount-content p{margin:0 0 14px;color:#6B7079}
body.woocommerce-account .woocommerce-MyAccount-content p strong{color:#101216;font-weight:700}
body.woocommerce-account .woocommerce-MyAccount-content h2,
body.woocommerce-account .woocommerce-MyAccount-content h3{margin:0 0 14px;font-size:18px;font-weight:800;color:#16181D}
body.woocommerce-account .woocommerce-MyAccount-content fieldset{border:1px solid #E6E8EC;border-radius:12px;padding:20px;margin:24px 0 0}
body.woocommerce-account .woocommerce-MyAccount-content fieldset legend{padding:0 8px;font-size:15px;font-weight:800;color:#16181D}

/* --- ESTADO VACÍO (Pedidos y Descargas sin contenido) --- */
body.woocommerce-account .woocommerce-MyAccount-content .woocommerce-info{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center;background:#F7FAFD;border:1px dashed #C7CBD2;border-radius:14px;padding:44px 28px;margin:0;color:#6B7079;font-size:15px;line-height:1.5}
body.woocommerce-account .woocommerce-MyAccount-content .woocommerce-info::before{content:"";display:block;width:46px;height:46px;border-radius:50%;background:#F4F5F7;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23E30613' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z'/%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M16 10a4 4 0 0 1-8 0'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center;background-size:24px}
body.woocommerce-account .woocommerce-MyAccount-content .woocommerce-info .button{margin-top:2px}

/* --- Tabla de pedidos --- */
body.woocommerce-account table.shop_table{width:100%;border-collapse:separate;border-spacing:0;border:1px solid #E6E8EC;border-radius:12px;overflow:hidden;font-size:14px;margin:0}
body.woocommerce-account table.shop_table th{background:#F5F8FC;padding:13px 14px;text-align:left;font-size:11.5px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em;border-bottom:1px solid #E6E8EC}
body.woocommerce-account table.shop_table td{padding:14px;border-bottom:1px solid #E6E8EC;color:#101216;vertical-align:middle}
body.woocommerce-account table.shop_table tr:last-child td{border-bottom:0}
body.woocommerce-account table.shop_table .button{padding:9px 16px;font-size:13px}

/* --- Direcciones --- */
body.woocommerce-account .woocommerce-Addresses{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:20px 0 0}
body.woocommerce-account .woocommerce-Address{display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border:1px solid #E6E8EC;border-radius:14px;padding:22px}
body.woocommerce-account .woocommerce-Address-title{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px;margin:0;padding:0;border:0}
body.woocommerce-account .woocommerce-Address-title h2,
body.woocommerce-account .woocommerce-Address-title h3{flex:1 1 auto;min-width:0;margin:0;font-size:15.5px;font-weight:800;color:#16181D;line-height:1.35}
body.woocommerce-account .woocommerce-Address-title a.edit{flex:0 0 auto;padding:7px 13px;border:1px solid #C7CBD2;border-radius:8px;background:#fff;font-size:12.5px;font-weight:700;color:#E30613;white-space:nowrap}
body.woocommerce-account .woocommerce-Address-title a.edit:hover{background:#F4F5F7;text-decoration:none}
body.woocommerce-account .woocommerce-Address address{margin:0;font-style:normal;color:#6B7079;line-height:1.7;font-size:14px}

/* --- Móvil --- */
@media (max-width:860px){
	body.woocommerce-account .woocommerce{padding:20px 14px 48px}
	body.woocommerce-account #customer_login{grid-template-columns:1fr;gap:16px}
	body.woocommerce-account #customer_login .u-column1,
	body.woocommerce-account #customer_login .u-column2{padding:22px 18px}
	body.woocommerce-account .woocommerce-MyAccount-navigation{margin:0 0 18px}
	body.woocommerce-account .woocommerce-MyAccount-navigation ul{display:flex;flex-wrap:wrap;gap:6px;padding:6px}
	body.woocommerce-account .woocommerce-MyAccount-navigation li a{padding:10px 13px;font-size:13.5px}
	body.woocommerce-account .woocommerce-MyAccount-content{padding:20px 18px}
	body.woocommerce-account .woocommerce-Addresses{grid-template-columns:1fr}
	body.woocommerce-account table.shop_table thead{display:none}
	body.woocommerce-account table.shop_table tr{display:block;border-bottom:1px solid #E6E8EC;padding:10px 0}
	body.woocommerce-account table.shop_table tr:last-child{border-bottom:0}
	body.woocommerce-account table.shop_table td{display:flex;justify-content:space-between;align-items:center;gap:14px;border:0;padding:7px 14px}
	body.woocommerce-account table.shop_table td::before{content:attr(data-title);font-size:11.5px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em}
}

/* --- Título de página (lo pinta el theme padre: .page-header > h1.entry-title).
       En checkout y carrito se oculta; aquí se alinea con el contenedor de 1280
       y se le pone Poppins, que por defecto no hereda. --- */
body.woocommerce-account .page-header{max-width:1400px;margin:0 auto;padding:26px 24px 0;background:transparent;border:0}
body.woocommerce-account .page-header .entry-title,
body.woocommerce-account h1.entry-title{margin:0;font-family:'Poppins',system-ui,-apple-system,sans-serif;font-size:30px;font-weight:800;line-height:1.2;letter-spacing:-0.02em;color:#16181D}
body.woocommerce-account .woocommerce{padding-top:18px}

/* --- Párrafos sueltos dentro de los formularios de acceso/registro --- */
body.woocommerce-account #customer_login form > p:not(.form-row),
body.woocommerce-account .woocommerce-privacy-policy-text p,
body.woocommerce-account .woocommerce-form-register > p:not(.form-row){margin:0 0 14px;font-size:13.5px;line-height:1.55;color:#6B7079}

/* --- El formulario ocupa el alto de la tarjeta para que el botón quede abajo --- */
body.woocommerce-account #customer_login .u-column1 form,
body.woocommerce-account #customer_login .u-column2 form{flex:1 1 auto}

@media (max-width:860px){
	body.woocommerce-account .page-header{padding:20px 14px 0}
	body.woocommerce-account .page-header .entry-title,
	body.woocommerce-account h1.entry-title{font-size:24px}
	body.woocommerce-account .woocommerce{padding-top:14px}
}

/* --- El theme padre limita .site-main a 1140px (hello-elementor/assets/css/theme.css).
       En la cuenta lo liberamos para que el contenido use los 1280 del resto del sitio
       (header, footer, shop y checkout). El centrado lo hacen .page-header y .woocommerce. --- */
body.woocommerce-account .site-main,
body.woocommerce-account .page-content{max-width:none;width:auto;padding-left:0;padding-right:0}

/* --- Fuera el clearfix de WooCommerce (content:" ";display:table).
       Con .woocommerce en flex se vuelven items del contenedor y el gap
       los separa como si fueran columnas extra → espacios fantasma. --- */
body.woocommerce-account .woocommerce::before,
body.woocommerce-account .woocommerce::after,
body.woocommerce-account .woocommerce-MyAccount-content::before,
body.woocommerce-account .woocommerce-MyAccount-content::after,
body.woocommerce-account .woocommerce-MyAccount-navigation::before,
body.woocommerce-account .woocommerce-MyAccount-navigation::after,
body.woocommerce-account .woocommerce-Addresses::before,
body.woocommerce-account .woocommerce-Addresses::after,
body.woocommerce-account #customer_login::before,
body.woocommerce-account #customer_login::after{content:none!important;display:none!important}

/* ============================================================
   Icono de WhatsApp — SIEMPRE relleno, nunca contorneado.
   En SVG las reglas CSS ganan a los atributos fill= y stroke=
   del propio elemento, asi que los .btn svg{stroke:...} de cada
   seccion dibujaban el logo como contorno grueso. Esta regla,
   con !important, lo deja relleno en cualquier contexto.
   ============================================================ */
/* La clase va DOBLADA a propósito: sube la especificidad a (0,2,1) para ganar
   a los `.bom-XXX-btn svg { stroke: currentColor !important }` de cada seccion,
   que son (0,1,1) + !important y, al ir en <style> dentro del <body>, se
   aplican DESPUES de este fichero. A igual especificidad gana el ultimo. */
svg.bom-wa-ico.bom-wa-ico{fill:currentColor !important;stroke:none !important;stroke-width:0 !important;stroke-linecap:butt !important;stroke-linejoin:miter !important}
svg.bom-wa-ico.bom-wa-ico path{fill:currentColor !important;stroke:none !important;stroke-width:0 !important}

/* ============================================================
   SISTEMA TIPOGRAFICO — INTERLETRADO (2026-07-31)
   ------------------------------------------------------------
   Tomado de la ficha de producto, que ya lo tenia bien resuelto,
   y subido a toda la plantilla.

   El principio es tipografico, no capricho:
   cuanto MAS GRANDE la letra, MAS hay que cerrarla; cuanto mas
   pequena y en mayusculas, MAS hay que airearla.

     TITULAR      >= 26px          letter-spacing: -0.02em
     ETIQUETA     11-15px MAYUS    letter-spacing:  0.06em
                  (eyebrow, badge, label de formulario, th de tabla)
     TEXTO        14-18px          sin definir — hereda

   Antes habia 22 valores distintos conviviendo (-0.01, -0.015,
   0.05, 0.08, 0.12, 0.14, 0.16...). Ahora son dos.

   Si anades una seccion nueva, usa estos dos valores. No inventes
   uno intermedio "porque queda mejor en esta caja": lo que queda
   mejor es que todo el sitio respire igual.
   ============================================================ */

/* ============================================================
   PEDIDO — "pagar pedido" y pagina de gracias
   ------------------------------------------------------------
   Ambas viven dentro de checkout-minimal.php (body.bombeo-checkout-min),
   igual que el checkout: solo logo y "Volver", sin cabecera ni pie.

   Sus plantillas estan en woocommerce/checkout/ (form-pay.php y
   thankyou.php) y REUTILIZAN las clases del checkout —.bt-checkout,
   .bt-card, .bt-summary, .bt-payment—, asi que heredan su diseno.
   Aqui solo va lo que no existe alli.
   ============================================================ */

/* --- Ancho del contenido. En la v1.16.0 se quedo en 720 px y era
       demasiado angosto para una tabla de producto + cantidad + total. --- */
body.bombeo-checkout-min .bt-comin-main{max-width:1400px;margin:0 auto;padding:26px 24px 64px}
body.bombeo-checkout-min .bt-checkout-page{max-width:none;padding:0}
body.bombeo-checkout-min .bt-checkout--pay,
body.bombeo-checkout-min .bt-checkout--gracias{display:flex;flex-direction:column;gap:18px;max-width:1080px;margin:0 auto}

/* --- Aviso de estado. El color ES informacion: verde solo cuando de
       verdad se cobro, ambar cuando falta pagar, rojo cuando no hubo cobro. --- */
.bt-aviso{background:#fff;border:1px solid #E6E8EC;border-left:4px solid #9AA5B5;border-radius:16px;padding:24px 26px;margin:0 auto 20px;max-width:1080px;box-shadow:0 1px 2px rgba(16,42,74,.03)}
.bt-aviso h1{font-size:25px;font-weight:800;color:#16181D;margin:0 0 8px;letter-spacing:-0.02em;line-height:1.22}
.bt-aviso p{font-size:15px;color:#6B7079;margin:0;line-height:1.65}
.bt-aviso strong{color:#16181D;font-weight:700}
.bt-aviso--ok{border-left-color:#1E8A54}
.bt-aviso--ok h1{color:#14663A}
.bt-aviso--pendiente{border-left-color:#E0A82E;background:#FFFDF7}
.bt-aviso--pendiente h1{color:#8A5B00}
.bt-aviso--espera{border-left-color:#E30613}
.bt-aviso--espera h1{color:#0B4C77}
.bt-aviso--error{border-left-color:#E30613;background:#FFFAFA}
.bt-aviso--error h1{color:#B30510}
.bt-aviso--info{border-left-color:#E30613}

/* --- Etiqueta de estado, en la cabecera de la tarjeta --- */
.bt-estado{margin-left:auto;display:inline-flex;align-items:center;padding:5px 12px;border-radius:20px;font-size:11.5px;font-weight:800;letter-spacing:0.05em;text-transform:uppercase;white-space:nowrap}
.bt-estado--ok{background:#E7F6EE;color:#1E8A54}
.bt-estado--pendiente{background:#FDF3DC;color:#8A5B00}
.bt-estado--espera{background:#F4F5F7;color:#0B4C77}
.bt-estado--error{background:#FDECEC;color:#B30510}
.bt-estado--info{background:#E6E8EC;color:#6B7079}

/* --- Los cuatro datos --- */
.bt-datos{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1px;background:#E6E8EC;border:1px solid #E6E8EC;border-radius:12px;overflow:hidden;margin:0;padding:0}
.bt-datos li{background:#FFFFFF;padding:15px 16px;margin:0;display:flex;flex-direction:column;gap:6px}
.bt-datos li span{font-size:11px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#6B7079;line-height:1.3}
.bt-datos li strong{font-size:15px;font-weight:700;color:#101216;line-height:1.35;overflow-wrap:anywhere}

/* --- Botones --- */
.bt-acciones{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0 0}
.bt-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:12px;padding:13px 22px;font-family:inherit;font-size:14px;font-weight:800;letter-spacing:0.04em;text-transform:uppercase;text-decoration:none;cursor:pointer;transition:background .15s ease}
.bt-btn--primario{background:#16181D;color:#fff;box-shadow:0 8px 20px rgba(11,36,64,.22)}
.bt-btn--primario:hover{background:#08080A;color:#fff}
.bt-btn--secundario{background:#fff;color:#16181D;border:1.5px solid #C7CBD2}
.bt-btn--secundario:hover{background:#F4F5F7;color:#16181D}

/* --- Tablas del pedido (resumen propio y el detalle que pinta WooCommerce
       desde el hook woocommerce_thankyou) --- */
body.bombeo-checkout-min table.shop_table{width:100%;border-collapse:separate;border-spacing:0;border:1px solid #E6E8EC;border-radius:12px;overflow:hidden;font-size:14px;margin:0;background:#fff}
body.bombeo-checkout-min table.shop_table th{background:#F5F8FC;padding:12px 14px;text-align:left;font-size:11.5px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em;border-bottom:1px solid #E6E8EC}
body.bombeo-checkout-min table.shop_table td{padding:13px 14px;border-bottom:1px solid #E6E8EC;color:#101216;vertical-align:middle;line-height:1.5}
body.bombeo-checkout-min table.shop_table tfoot th{background:#FFFFFF;font-size:13px;font-weight:700;color:#2C3038;text-transform:none;letter-spacing:0;text-align:left}
body.bombeo-checkout-min table.shop_table tfoot td{background:#FFFFFF;font-weight:700}
body.bombeo-checkout-min table.shop_table tfoot tr:last-child th,
body.bombeo-checkout-min table.shop_table tfoot tr:last-child td{border-bottom:0}
body.bombeo-checkout-min table.shop_table a{color:#E30613;text-decoration:none;font-weight:600}
body.bombeo-checkout-min table.shop_table .product-quantity{color:#6B7079;font-weight:600}

/* El realce crema del TOTAL se acota a la fila que no lleva botones: si no,
   cae sobre la fila "Acciones" y deja dos botones sobre fondo crema. */
body.bombeo-checkout-min table.shop_table tfoot tr:last-child:not(:has(.button)):not(:has(a[class*=btn])) th,
body.bombeo-checkout-min table.shop_table tfoot tr:last-child:not(:has(.button)):not(:has(a[class*=btn])) td{background:#FFF9EE;font-size:16px;font-weight:800;color:#101216}

/* La fila de acciones que mete WooCommerce: botones en linea. */
body.bombeo-checkout-min table.shop_table tfoot td:has(.button){display:flex;flex-wrap:wrap;gap:8px;align-items:center}
body.bombeo-checkout-min table.shop_table tfoot td .button{display:inline-flex;align-items:center;justify-content:center;background:#16181D;color:#fff;border:0;border-radius:10px;padding:10px 18px;margin:0;font-size:13px;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;text-decoration:none;white-space:nowrap}
body.bombeo-checkout-min table.shop_table tfoot td .button:hover{background:#08080A;color:#fff}
body.bombeo-checkout-min table.shop_table tfoot td .button.cancel{background:#fff;color:#16181D;border:1.5px solid #C7CBD2}
body.bombeo-checkout-min table.shop_table tfoot td .button.cancel:hover{background:#F4F5F7;color:#16181D}

/* --- Detalle y direcciones que pinta WooCommerce tras el resumen --- */
body.bombeo-checkout-min .woocommerce-order-details,
body.bombeo-checkout-min .woocommerce-customer-details{background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:22px 24px;margin:0;box-shadow:0 1px 2px rgba(16,42,74,.03)}
body.bombeo-checkout-min .woocommerce-order-details__title,
body.bombeo-checkout-min .woocommerce-column__title{font-size:14px;font-weight:800;color:#2C3038;margin:0 0 16px;text-transform:uppercase;letter-spacing:0.06em}
body.bombeo-checkout-min .woocommerce-columns--addresses,
body.bombeo-checkout-min .col2-set{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:0}
body.bombeo-checkout-min .woocommerce-column,
body.bombeo-checkout-min .col-1,
body.bombeo-checkout-min .col-2{float:none;width:auto;margin:0}
body.bombeo-checkout-min address{margin:0;font-style:normal;color:#6B7079;line-height:1.8;font-size:14px;border:0;padding:0}

/* --- Movil --- */
@media (max-width:860px){
	body.bombeo-checkout-min .bt-comin-main{padding:18px 14px 46px}
	.bt-aviso{padding:20px 18px;border-radius:14px}
	.bt-aviso h1{font-size:20px}
	.bt-datos{grid-template-columns:1fr 1fr}
	.bt-acciones .bt-btn{flex:1 1 100%}
	.bt-estado{margin:8px 0 0;order:3}
	body.bombeo-checkout-min .woocommerce-order-details,
	body.bombeo-checkout-min .woocommerce-customer-details{padding:20px 16px;border-radius:14px}
	body.bombeo-checkout-min .woocommerce-columns--addresses,
	body.bombeo-checkout-min .col2-set{grid-template-columns:1fr}

	/* La tabla pasa a fichas: en 360 px no cabe de otra forma. */
	body.bombeo-checkout-min table.shop_table thead{display:none}
	body.bombeo-checkout-min table.shop_table tr{display:block;border-bottom:1px solid #E6E8EC}
	body.bombeo-checkout-min table.shop_table td,
	body.bombeo-checkout-min table.shop_table tfoot th{display:flex;justify-content:space-between;align-items:center;gap:14px;border:0;padding:9px 14px;text-align:left}
	body.bombeo-checkout-min table.shop_table td::before{content:attr(data-title);flex:0 0 auto;font-size:11.5px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em}
	body.bombeo-checkout-min table.shop_table tfoot td .button{flex:1 1 auto}
}
@media (max-width:420px){ .bt-datos{grid-template-columns:1fr} }

/* ============================================================
   COMPARTIR CARRITO — boton, dialogo y panel de seguimiento
   ------------------------------------------------------------
   Solo lo ven administrador y gestor de la tienda: el marcado ni
   se imprime para los demas (ver mini-cart.php y bombeo-core).
   La logica y la tabla viven en bombeo-core, no aqui — ese enlace
   pasa semanas en el correo de un cliente y no puede depender de
   que el theme siga siendo este.
   ============================================================ */

/* --- El boton en el cajon. Secundario a proposito: "Finalizar compra"
       sigue siendo la accion principal, esta es una herramienta interna. --- */
.bt-mc__btn--compartir{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;margin-top:9px;
	background:#fff;color:#16181D;border:1.5px solid #C7CBD2;border-radius:12px;padding:13px 18px;
	font-family:inherit;font-size:13.5px;font-weight:700;letter-spacing:0.03em;cursor:pointer;transition:background .15s ease,border-color .15s ease}
.bt-mc__btn--compartir:hover{background:#F4F5F7;border-color:#E30613}
.bt-mc__btn--compartir svg{width:16px;height:16px;flex:0 0 auto}

/* --- El dialogo ---
   🔴 EL z-index TIENE QUE GANARLE AL CAJON DEL CARRITO.
   Este dialogo se abre DESDE el cajon (.bt-cart, z-index 2147483000), y estaba
   en 100000: en escritorio no se notaba porque el cajon es estrecho y el
   dialogo asomaba al lado, pero en movil el cajon ocupa la pantalla entera y
   el dialogo quedaba debajo — invisible, aunque estuviera abierto.
   No es hijo del cajon (se imprime en wp_footer, cuelga del body), asi que
   basta con subir el numero. 2147483640 queda por encima tambien del cajon del
   megamenu (2147483600) y por debajo del maximo que admite un entero. */
.bt-comp{position:fixed;inset:0;z-index:2147483640;font-family:'Poppins',system-ui,sans-serif}
.bt-comp[hidden]{display:none}
.bt-comp__fondo{position:absolute;inset:0;background:rgba(16,18,22,.55)}
.bt-comp__caja{position:relative;max-width:460px;margin:12vh auto 0;background:#fff;border-radius:18px;
	padding:34px 32px 30px;box-shadow:0 20px 50px rgba(16,18,22,.28)}
.bt-comp__x{position:absolute;top:12px;right:14px;width:34px;height:34px;border:0;border-radius:50%;
	background:transparent;color:#9CA1AB;font-size:26px;line-height:1;cursor:pointer}
.bt-comp__x:hover{background:#F4F5F7;color:#16181D}
.bt-comp h2{font-size:21px;font-weight:800;color:#16181D;margin:0 0 10px;letter-spacing:-0.02em}
.bt-comp p{font-size:14px;color:#6B7079;line-height:1.6;margin:0 0 18px}
.bt-comp__label{display:block;font-size:11px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 8px}
.bt-comp__dias{display:flex;align-items:center;gap:10px}
.bt-comp__dias input{width:96px;min-height:52px;border:1.5px solid #E6E8EC;border-radius:11px;padding:12px 14px;
	font-family:inherit;font-size:17px;font-weight:700;color:#16181D;text-align:center}
.bt-comp__dias input:focus{border-color:#E30613;outline:0}
.bt-comp__dias span{font-size:14px;color:#6B7079;font-weight:600}
.bt-comp__nota{font-size:12.5px;color:#9CA1AB;margin:12px 0 20px;line-height:1.55}
.bt-comp__btn{display:flex;align-items:center;justify-content:center;width:100%;background:#16181D;color:#fff;
	border:0;border-radius:12px;padding:15px 20px;font-family:inherit;font-size:14.5px;font-weight:800;
	letter-spacing:0.05em;text-transform:uppercase;cursor:pointer;transition:background .15s ease}
.bt-comp__btn:hover{background:#08080A}
.bt-comp__btn:disabled{opacity:.6;cursor:default}

/* Paso "listo" */
.bt-comp__ok{width:56px;height:56px;margin:0 auto 16px;border-radius:50%;background:#E7F6EE;color:#1E8A54;
	display:flex;align-items:center;justify-content:center}
.bt-comp__ok svg{width:28px;height:28px;fill:none;stroke:currentColor}
.bt-comp__paso[data-paso=listo]{text-align:center}
.bt-comp__cad{font-size:13px;color:#9CA1AB;margin:0 0 16px}
.bt-comp__url{display:flex;gap:8px;margin:0 0 14px}
.bt-comp__url input{flex:1 1 auto;min-width:0;border:1.5px solid #E6E8EC;border-radius:11px;padding:13px 14px;
	font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13.5px;color:#16181D;background:#FFFFFF}
.bt-comp__copiar{flex:0 0 auto;background:#16181D;color:#fff;border:0;border-radius:11px;padding:0 18px;
	font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;white-space:nowrap}
.bt-comp__copiar:hover{background:#08080A}
.bt-comp__wa{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;background:#25D366;color:#fff;
	border-radius:12px;padding:14px 18px;font-size:14px;font-weight:800;letter-spacing:0.04em;text-decoration:none;margin:0 0 14px}
.bt-comp__wa:hover{background:#1FB855;color:#fff}
.bt-comp__wa svg{width:18px;height:18px;flex:0 0 auto}
.bt-comp__panel{display:inline-block;font-size:13px;font-weight:600;color:#E30613;text-decoration:none}
.bt-comp__panel:hover{text-decoration:underline}
.bt-comp__err{color:#B30510}

@media (max-width:520px){
	/* 100dvh y no 100vh: en el movil, 100vh cuenta tambien lo que tapa la barra
	   del navegador, asi que la caja sobresale por abajo y el boton de generar
	   se queda fuera de la pantalla. El 100vh se deja delante como respaldo
	   para los navegadores que no entienden dvh. */
	.bt-comp__caja{margin:0;max-width:none;min-height:100vh;min-height:100dvh;border-radius:0;padding:26px 20px}
	.bt-comp__url{flex-direction:column}
	.bt-comp__copiar{padding:14px 18px}
}

/* --- El panel /mi-cuenta/enlaces/ --- */
.bt-enlaces__no{background:#FDECEC;border:1px solid #F5C2C2;border-radius:10px;padding:12px 14px;margin:0 0 18px;font-size:14px;color:#B30510;font-weight:600}
.bt-enlaces__ok{background:#E7F6EE;border:1px solid #BFE5CE;border-radius:10px;padding:12px 14px;margin:0 0 18px;font-size:14px;color:#14663A;font-weight:600}
/* Tarjetas sueltas, NO una rejilla segmentada. Antes el fondo gris del
   contenedor asomaba por las celdas sobrantes: cinco cifras en una rejilla
   de tres dejaban un recuadro vacío que parecía un dato que falta. Con flex
   no hay celdas sobrantes que puedan asomar. */
.bt-enlaces__resumen{list-style:none;display:flex;flex-wrap:wrap;gap:10px;margin:0 0 22px;padding:0;background:none;border:0}
.bt-enlaces__resumen li{flex:1 1 140px;background:#FFFFFF;border:1px solid #E6E8EC;border-radius:12px;
	padding:14px 16px;margin:0;display:flex;flex-direction:column;gap:5px}
.bt-enlaces__resumen li span{font-size:10.5px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em}
.bt-enlaces__resumen li strong{font-size:21px;font-weight:800;color:#16181D;line-height:1}
.bt-enlaces__resumen li.es-ok strong{color:#1E8A54}

/* Red de seguridad: entre 861 y ~1100px las diez columnas no caben ni con
   el menú arriba. Antes que partir las fechas en tres líneas, que deslice. */
.bt-enlaces{overflow-x:auto}
.bt-enlaces__tabla{width:100%;min-width:980px;border-collapse:separate;border-spacing:0;border:1px solid #E6E8EC;border-radius:12px;overflow:hidden;font-size:13.5px}
/* Nada de partir palabras: una fecha en tres renglones era el grueso del
   desorden. Con el menú arriba hay ancho de sobra para no romper nada. */
.bt-enlaces__tabla th, .bt-enlaces__tabla td{white-space:nowrap}
/* El importe alineado a la derecha: son cifras y se comparan en vertical. */
.bt-enlaces__tabla td[data-title="Total"], .bt-enlaces__tabla th:nth-last-child(3){text-align:right}
.bt-enlaces__tabla td[data-title="Total"]{font-weight:700}
/* 🔴 LA COLUMNA CLIENTE, ACOTADA Y A DOS RENGLONES.
   Es la UNICA columna de longitud ilimitada. Con el `nowrap` de arriba, un
   «CORPORACION ANAPOIMA CLUB CAMPESTRE» estiraba la columna hasta reventar los
   980px de la tabla y aparecia scroll horizontal. Y el scroll horizontal de
   una tabla vive AL FINAL: para ver la derecha habia que bajar hasta abajo,
   arrastrar y volver a subir. Inservible.

   Se acota a 210px, pero NO basta con dejar que el texto fluya: en produccion
   hay una razon social de 134 caracteres (UNION COLOMBIANA DE CRIADORES DE
   CEBU LECHERO...). A 210px eso son NUEVE renglones y esa fila se convierte en
   una torre — peor que el problema que venia a resolver.

   Asi que se corta a dos lineas con puntos suspensivos, y el nombre COMPLETO
   viaja en el `title` del span: el comercial pasa el raton y lo lee entero.
   Cortar sin dejar forma de leer el nombre no seria aceptable en un panel de
   trabajo; con el `title` si. */
.bt-enlaces__tabla td[data-title="Cliente"]{white-space:normal;max-width:210px;line-height:1.35}
.bt-enlaces__cli{display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.bt-enlaces__doc{display:block;margin-top:2px;font-size:11.5px;color:#6B7079;white-space:nowrap}
/* Franjas alternas: con diez columnas el ojo pierde el renglón a mitad de fila. */
.bt-enlaces__tabla tbody tr:nth-child(even) td{background:#FFFFFF}
.bt-enlaces__tabla tbody tr:hover td{background:#F4F5F7}
.bt-enlaces__tabla th{background:#F5F8FC;padding:12px 13px;text-align:left;font-size:10.5px;font-weight:700;
	color:#6B7079;text-transform:uppercase;letter-spacing:0.06em;border-bottom:1px solid #E6E8EC}
.bt-enlaces__tabla td{padding:12px 13px;border-bottom:1px solid #E6E8EC;color:#101216;vertical-align:middle}
.bt-enlaces__tabla tr:last-child td{border-bottom:0}
.bt-enlaces__tabla code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;background:#F4F5F7;
	padding:3px 7px;border-radius:6px;color:#16181D}
.bt-enlaces__copiar{margin-left:8px;vertical-align:middle;background:transparent;border:1px solid #C7CBD2;border-radius:7px;
	padding:4px 9px;font-family:inherit;font-size:11.5px;font-weight:700;color:#E30613;cursor:pointer}
.bt-enlaces__copiar:hover{background:#F4F5F7}
.bt-enlaces__anular{font-size:12px;font-weight:700;color:#B30510;text-decoration:none}
.bt-enlaces__anular:hover{text-decoration:underline}

.bt-pill{display:inline-flex;align-items:center;padding:4px 11px;border-radius:20px;font-size:11px;font-weight:800;
	letter-spacing:0.05em;text-transform:uppercase;white-space:nowrap}
.bt-pill--ok{background:#E7F6EE;color:#1E8A54}
.bt-pill--aviso{background:#FDF3DC;color:#8A5B00}
.bt-pill--info{background:#F4F5F7;color:#0B4C77}
.bt-pill--error{background:#FDECEC;color:#B30510}
.bt-pill--neutro{background:#E6E8EC;color:#6B7079}

@media (max-width:860px){
	.bt-enlaces{overflow-x:visible}
	.bt-enlaces__tabla{min-width:0}
	.bt-enlaces__tabla th, .bt-enlaces__tabla td{white-space:normal}
	.bt-enlaces__tabla td[data-title="Total"]{text-align:right}
	.bt-enlaces__tabla thead{display:none}
	.bt-enlaces__tabla tr{display:block;border-bottom:1px solid #E6E8EC;padding:8px 0}
	.bt-enlaces__tabla td{display:flex;justify-content:space-between;align-items:center;gap:12px;border:0;padding:7px 13px}
	.bt-enlaces__tabla td::before{content:attr(data-title);font-size:10.5px;font-weight:700;color:#6B7079;text-transform:uppercase;letter-spacing:0.06em}
	.bt-enlaces__resumen li{flex:1 1 calc(50% - 5px)}
}

/* ============================================================
   SU ASESOR COMERCIAL
   ------------------------------------------------------------
   Sale en la pagina de pago cuando el cliente llega por un enlace
   compartido. El marcado lo pinta bombeo-core (funcion
   bombeo_carritos_bloque_asesor), aqui solo va su aspecto.

   La pantalla de "enlace caducado" NO usa este CSS: es
   autocontenida a proposito —no depende del theme ni de
   WooCommerce— porque tiene que funcionar pase lo que pase, y
   ahi los estilos van incrustados.
   ============================================================ */
.bt-asesor{background:#F4F5F7;border:1px solid #DDE9F5;border-radius:14px;padding:18px 20px;margin:0 0 22px;font-family:'Poppins',sans-serif}
.bt-asesor__tit{margin:0 0 3px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#6B7079}
.bt-asesor__nom{margin:0 0 10px;font-size:17px;font-weight:800;color:#16181D;line-height:1.25}
.bt-asesor__txt{margin:0 0 14px;font-size:13.5px;color:#6B7079;line-height:1.6}
.bt-asesor__wa{display:inline-flex;align-items:center;gap:9px;background:#25D366;color:#fff;text-decoration:none;
	border-radius:11px;padding:11px 20px;font-size:13.5px;font-weight:800;letter-spacing:.02em;transition:background .15s ease}
.bt-asesor__wa:hover{background:#1FB855;color:#fff}
.bt-asesor__wa svg{flex:0 0 auto}
@media (max-width:600px){
	.bt-asesor{padding:16px;border-radius:12px}
	.bt-asesor__wa{width:100%;justify-content:center}
}

/* Campo de WhatsApp del comercial en Mi cuenta -> Detalles de la cuenta.
   Lo pinta bombeo-core; aqui solo su aspecto. */
.bt-wa-campo{margin:0 0 22px;padding:18px 20px;background:#F4F5F7;border:1px solid #DDE9F5;border-radius:12px}
.bt-wa-campo legend{padding:0 0 10px;font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#0B4C77}
.bt-wa-campo__nota{margin:2px 0 0;font-size:12.5px;line-height:1.6;color:#6B7079}
.bt-wa-campo__nota strong{color:#8A5B00}

/* ============================================================
   DESCUENTO COMERCIAL
   ------------------------------------------------------------
   El PANEL solo lo ven admin y comerciales. La LINEA del
   descuento la ve todo el mundo, incluido el cliente: si solo
   viera un precio mas bajo no percibiria el beneficio.
   El marcado lo pinta bombeo-core; aqui solo el aspecto.
   ============================================================ */

/* La linea que ve el cliente */
.bt-dto-linea{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px;
	padding:11px 13px;background:#E7F6EE;border:1px solid #BFE5CE;border-radius:10px;font-family:'Poppins',sans-serif}
.bt-dto-linea__et{font-size:12.5px;font-weight:600;color:#14663A}
.bt-dto-linea__et b{font-weight:800}
.bt-dto-linea__val{font-size:14px;font-weight:800;color:#14663A;white-space:nowrap}

/* Vaciar el carrito: un enlace discreto, no un boton — vaciar no puede
   competir visualmente con «Finalizar compra». Rojo solo al pasar. */
.bt-mc__vaciar{display:flex;width:max-content;align-items:center;gap:6px;margin:0 0 10px auto;padding:4px 2px;
	border:0;background:none;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;color:#9CA1AB;
	transition:color .15s ease}
.bt-mc__vaciar svg{width:14px;height:14px}
/* Los estilos globales de <button> del theme/Woo le metian un FONDO rosado al
   pasar. Aqui no hay boton que pintar: es un enlace de texto — fondo none en
   TODOS los estados, y el hover solo oscurece el texto. */
.bt-mc__vaciar:hover,.bt-mc__vaciar:focus,.bt-mc__vaciar:active{background:none !important;border:0 !important;box-shadow:none !important;color:#16181D}
.bt-mc__vaciar:disabled{opacity:.5;cursor:wait}

/* Precio de LINEA con descuento POR PRODUCTO: lista tachada en rojo, precio
   final en bold y el porcentaje como pildora. Lo emite bombeo-core por el
   filtro woocommerce_cart_item_subtotal; sale igual en el cajon y en la
   pagina de pago. En modo GENERAL este marcado no existe: alli la cuenta la
   enseña el totalizador, no la linea. */
.bt-dto-precio{display:inline-flex;flex-direction:column;align-items:flex-end;gap:2px;line-height:1.25}
.bt-dto-precio del{color:#B32D23;font-weight:600;font-size:.85em;opacity:.85;text-decoration:line-through}
.bt-dto-precio ins{text-decoration:none;font-weight:800;background:none}
.bt-dto-precio em{font-style:normal;font-size:10.5px;font-weight:800;color:#B32D23;background:#FDECEA;padding:1px 7px;border-radius:100px}
.bt-review .bt-dto-precio{align-items:flex-end}
.woocommerce-checkout .bt-dto-linea{max-width:1400px;margin:0 auto 18px;padding:14px 18px}

/* El panel del comercial */
.bt-dto{margin:0 0 12px;padding:13px;background:#FFFDF7;border:1px solid #F0DFB5;border-radius:10px;font-family:'Poppins',sans-serif}
.bt-dto__head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 10px}
.bt-dto__tit{font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#8A5B00}
.bt-dto__quitar{background:none;border:0;padding:0;font-family:inherit;font-size:11.5px;font-weight:700;color:#B30510;cursor:pointer;text-decoration:underline}
.bt-dto__modos{display:flex;gap:6px;margin:0 0 10px}
.bt-dto__modo{flex:1 1 0;background:#fff;border:1.5px solid #E7DCC2;border-radius:8px;padding:8px 6px;
	font-family:inherit;font-size:11.5px;font-weight:700;color:#6B7079;cursor:pointer;transition:all .15s}
.bt-dto__modo:hover{border-color:#E0A82E}
.bt-dto__modo.es-activo{background:#16181D;border-color:#16181D;color:#fff}
.bt-dto__campo{display:flex;align-items:center;gap:6px}
.bt-dto__campo input{flex:0 0 68px;width:68px;min-height:40px;border:1.5px solid #E7DCC2;border-radius:8px;
	padding:8px 10px;font-family:inherit;font-size:15px;font-weight:700;color:#16181D;text-align:center;background:#fff}
.bt-dto__campo input:focus{border-color:#E0A82E;outline:0}
.bt-dto__campo>span{font-size:13px;font-weight:700;color:#8A5B00}
.bt-dto__campo--min input{flex:0 0 56px;width:56px;min-height:32px;padding:5px 7px;font-size:13px}
.bt-dto__aplicar{margin-left:auto;background:#16181D;color:#fff;border:0;border-radius:8px;padding:10px 16px;
	font-family:inherit;font-size:12px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;cursor:pointer}
.bt-dto__aplicar:hover{background:#08080A}
.bt-dto__aplicar:disabled{opacity:.6;cursor:default}
.bt-dto__items{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-direction:column;gap:7px}
.bt-dto__items li{display:flex;align-items:center;gap:8px}
.bt-dto__nom{flex:1 1 auto;min-width:0;font-size:11.5px;color:#6B7079;line-height:1.35;overflow:hidden}
.bt-dto__oferta{flex:0 0 auto;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
	color:#8A5B00;background:#FDF3DC;border-radius:10px;padding:4px 9px;white-space:nowrap}
.bt-dto__cuerpo[hidden]{display:none}
.bt-dto__cuerpo--producto .bt-dto__aplicar{margin-left:0;width:100%}
.bt-dto__resumen{margin:10px 0 0;padding-top:9px;border-top:1px solid #F0DFB5;font-size:11.5px;color:#6B7079;line-height:1.5}
.bt-dto__resumen b{color:#14663A;font-weight:800}
.bt-dto__resumen s{color:#9AA5B5}

/* Descuento detallado en el resumen del pago.
   El subtotal pasa a llamarse "Precio de lista" cuando hay descuento, porque
   es lo que es: el antes. Y el neto va destacado, que es lo que se paga. */
.bt-review__dto th{color:#14663A !important}
.bt-review__dto td{color:#14663A !important;font-weight:800}
.bt-review__pct{display:inline-block;margin-left:7px;padding:2px 8px;border-radius:10px;background:#E7F6EE;
	color:#14663A;font-size:11px;font-weight:800;letter-spacing:.02em}
.bt-review__neto th,
.bt-review__neto td{font-weight:800 !important;color:#16181D !important}
.bt-review__neto th{border-top:1px solid #E6E8EC !important}
.bt-review__neto td{border-top:1px solid #E6E8EC !important}

/* El precio de lista, cuando hay descuento: rojo y tachado.
   Solo cuando lo hay — sin descuento no hay nada que tachar y sale normal. */
.bt-review__lista th{color:#B30510 !important}
.bt-review__lista td,
.bt-review__lista td s,
.bt-review__lista td .woocommerce-Price-amount{color:#B30510 !important;text-decoration:line-through !important;font-weight:600 !important}
.bt-review__lista td s{text-decoration:line-through}

/* La cuenta completa en el cajón: lista tachada arriba, descuento debajo.
   Antes solo salía la resta, y como el subtotal ya venía descontado parecía
   que se restaba dos veces. */
.bt-dto-linea{flex-direction:column;gap:5px;align-items:stretch}
.bt-dto-linea__fila{display:flex;align-items:center;justify-content:space-between;gap:12px}
.bt-dto-linea__lista{color:#B30510;font-size:12.5px;font-weight:600;text-decoration:line-through}

/* ============================================================
   RUT — el campo de subida en datos de facturación
   El marcado lo pinta bombeo-core; aquí solo su aspecto.
   ============================================================ */
.bt-rut{margin:16px 0 0;padding:16px 18px;background:#FFFFFF;border:1px solid #E6E8EC;border-radius:12px;font-family:'Poppins',sans-serif}
.bt-rut__head{display:flex;align-items:flex-start;gap:11px;margin:0 0 13px}
.bt-rut__ico{flex:0 0 auto;width:34px;height:34px;border-radius:9px;background:#F4F5F7;color:#E30613;display:flex;align-items:center;justify-content:center}
.bt-rut__ico svg{width:17px;height:17px}
.bt-rut__tit{display:block;font-size:13.5px;font-weight:800;color:#2C3038;line-height:1.3}
.bt-rut__op{display:block;font-size:11.5px;color:#9CA1AB;line-height:1.4;margin-top:2px}
.bt-rut__zona[hidden],.bt-rut__hecho[hidden]{display:none}
.bt-rut__zona{display:flex;align-items:center;gap:11px;flex-wrap:wrap}
.bt-rut__zona input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
.bt-rut__btn{display:inline-flex;align-items:center;background:#fff;color:#16181D;border:1.5px solid #C7CBD2;border-radius:9px;
	padding:10px 18px;font-size:13px;font-weight:700;cursor:pointer;transition:all .15s}
.bt-rut__btn:hover{background:#F4F5F7;border-color:#E30613}
.bt-rut__zona input[type=file]:focus + .bt-rut__btn{border-color:#E30613;box-shadow:0 0 0 3px rgba(227,6,19,.15)}
.bt-rut__ayuda{font-size:11.5px;color:#9CA1AB}
.bt-rut__hecho{display:flex;align-items:center;gap:10px;padding:11px 13px;background:#E7F6EE;border:1px solid #BFE5CE;border-radius:9px}
.bt-rut__hecho svg{width:18px;height:18px;flex:0 0 auto;stroke:#1E8A54;fill:none}
.bt-rut__nombre{flex:1 1 auto;min-width:0;font-size:13px;font-weight:700;color:#14663A;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bt-rut__quitar{flex:0 0 auto;background:none;border:0;padding:0;font-family:inherit;font-size:12px;font-weight:700;color:#B30510;cursor:pointer;text-decoration:underline}
.bt-rut__err{margin:10px 0 0;font-size:12.5px;color:#B30510;font-weight:600}
.bt-rut__err[hidden]{display:none}
.bt-rut__nota{margin:11px 0 0;padding-top:10px;border-top:1px solid #E6E8EC;font-size:11.5px;color:#9CA1AB;line-height:1.55}
.bt-rut__nota strong{color:#14663A;font-weight:700}

/* El RUT en Mi cuenta → Detalles de la cuenta. */
.bt-rut-cuenta{margin:0 0 22px;padding:18px 20px;background:#FFFFFF;border:1px solid #E6E8EC;border-radius:12px}
.bt-rut-cuenta legend{padding:0 0 12px;font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#2C3038}
.bt-rut-cuenta__tiene{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#fff;border:1px solid #E6E8EC;border-radius:9px;margin:0 0 8px}
.bt-rut-cuenta__tiene svg{width:18px;height:18px;flex:0 0 auto;stroke:#E30613;fill:none}
.bt-rut-cuenta__nom{flex:1 1 auto;min-width:0;font-size:13.5px;font-weight:700;color:#2C3038;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bt-rut-cuenta__meta{flex:0 0 auto;font-size:11.5px;color:#9CA1AB}
.bt-rut-cuenta__ok{margin:0 0 12px;font-size:12.5px;color:#14663A;font-weight:600}
.bt-rut-cuenta__no{margin:0 0 12px;font-size:12.5px;color:#6B7079;line-height:1.55}
.bt-rut-cuenta .bt-rut{margin:0;padding:0;background:none;border:0}
.bt-rut-cuenta .bt-rut__nota{margin-top:12px}
.bt-rut__guardado{margin:9px 0 0;font-size:11.5px;color:#0B4C77;line-height:1.5}
.bt-rut-pedido{margin:14px 0 0;padding:11px 14px;background:#F4F5F7;border-radius:9px;font-size:13.5px;color:#2C3038}
.bt-rut-pedido a{color:#E30613;font-weight:700}
.bt-rut-pedido span{color:#9CA1AB;font-size:12px}

/* Tipo de persona: dos opciones grandes, no un desplegable escondido.
   Es la primera decisión del formulario y condiciona el resto. */
.bt-tipo > label:first-child{display:block;font-size:11px;font-weight:700;color:#6B7079;margin:0 0 9px;text-transform:uppercase;letter-spacing:.06em}
.bt-tipo .woocommerce-input-wrapper{display:flex;gap:10px}
.bt-tipo input[type=radio]{position:absolute;opacity:0;width:1px;height:1px}
.bt-tipo label.radio{flex:1 1 0;display:flex;align-items:center;justify-content:center;gap:8px;min-height:52px;margin:0;
	background:#fff;border:1.5px solid #E6E8EC;border-radius:11px;padding:12px 14px;
	font-size:14.5px;font-weight:600;color:#6B7079;cursor:pointer;transition:all .15s}
.bt-tipo label.radio:hover{border-color:#E30613}
.bt-tipo input[type=radio]:checked + label.radio,
.bt-tipo label.radio:has(input:checked){background:#16181D;border-color:#16181D;color:#fff}
.bt-solo-empresa[hidden]{display:none !important}

/* El RUT es obligatorio para empresa: se marca como tal. */
.bt-rut__req{display:inline-block;margin-left:7px;padding:2px 8px;border-radius:10px;background:#FDECEC;
	color:#B30510;font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;vertical-align:middle}
.bt-rut--falta{border-color:#F5C2C2;background:#FFFAFA}

/* =========================================================================
   SHORTCODES DE PRODUCTO — la lógica vive en bombeo-core (includes/contenido/); aquí SOLO el estilo
   [bombeo_producto formato="card|barra|mini"] · [bombeo_comparativa] · [bombeo_destacado]
   Namespace .bsc-* — funcionan en cualquier entrada o página.
   ========================================================================= */
.bsc-card,.bsc-barra,.bsc-tabla,.bsc-destacado{--navy:#101216;--ambar:#F5A623;--tinta:#31435A;--linea:#E6E8EC;--suave:#F4F5F7}
.bsc-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:#16181D;color:#fff!important;font-weight:800;font-size:13.5px;letter-spacing:.04em;text-transform:uppercase;text-decoration:none!important;padding:12px 22px;border-radius:12px;box-shadow:0 8px 20px rgba(11,36,64,.22);transition:background .15s ease,transform .12s ease;white-space:nowrap}
.bsc-btn:hover{background:#08080A;color:#fff;transform:translateY(-1px)}
.bsc-precio{font-weight:900;color:#101216;font-size:18px;white-space:nowrap}
.bsc-precio--grande{font-size:22px}
.bsc-precio small{display:block;font-size:12px;font-weight:600;color:#9CA1AB;white-space:normal}
.bsc-precio .woocommerce-Price-amount{font-weight:inherit}
.bsc-estrellas{display:block;color:#F5A623;font-size:16px;letter-spacing:1px;margin:2px 0 4px}
.bsc-estrellas span{color:#8DA0B6;font-size:13px;letter-spacing:0;margin-left:4px}
.bsc-chips{display:flex;flex-wrap:wrap;gap:7px;margin:10px 0}
.bsc-chips span{background:#F4F5F7;border:1px solid #E6E8EC;border-radius:8px;padding:5px 10px;font-size:12.5px;color:#31435A;line-height:1.3}
.bsc-chips b{color:#101216}
.bsc-etiqueta,.bsc-tabla__badge{display:inline-block;background:#EAF2FB;color:#101216;font-size:11px;font-weight:800;padding:2px 8px;border-radius:6px;vertical-align:middle}
.bsc-aviso{background:#FDF4F3;border:1px solid #F4D6D2;color:#B30510;padding:10px 14px;border-radius:8px;font-size:14px}

/* card — ficha completa */
.bsc-card{display:grid;grid-template-columns:220px 1fr;gap:22px;border:1px solid #E6E8EC;border-radius:16px;padding:22px;margin:28px 0;background:#fff;box-shadow:0 3px 16px rgba(16,18,22,.05);position:relative}
.bsc-card__rank{position:absolute;top:-13px;left:22px;background:#F5A623;color:#101216;font-weight:900;font-size:13px;padding:5px 13px;border-radius:999px;box-shadow:0 3px 8px rgba(245,166,35,.35)}
.bsc-card__media{display:block;align-self:start;text-align:center;background:#F4F5F7;border-radius:14px;padding:18px}
.bsc-card__media img{width:100%;max-width:190px;height:auto;border-radius:8px;mix-blend-mode:multiply}
.bsc-card__tipo{font-size:12.5px;font-weight:800;color:#F5A623;text-transform:uppercase;letter-spacing:.4px}
.bsc-card__nom{font-size:19px;font-weight:800;color:#101216;margin:4px 0 2px!important;line-height:1.25;padding:0!important}
.bsc-card__nom a{color:inherit!important;text-decoration:none!important}
.bsc-card__nota{font-size:15px;line-height:1.55;color:#31435A;margin:8px 0 14px!important}
.bsc-card__foot{display:flex;flex-wrap:wrap;align-items:center;gap:14px 18px}

/* barra — fila compacta */
.bsc-barra{display:flex;align-items:center;gap:16px;border:1px solid #E6E8EC;border-radius:14px;padding:12px 16px;margin:16px 0;background:#fff}
.bsc-barra__img{flex:0 0 72px;width:72px;height:72px;background:#F4F5F7;border-radius:10px;display:flex;align-items:center;justify-content:center;overflow:hidden}
.bsc-barra__img img{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply}
.bsc-barra__info{flex:1 1 auto;min-width:0}
.bsc-barra__nom{display:inline-block;font-weight:800;color:#101216!important;text-decoration:none!important;font-size:16px;line-height:1.25}
.bsc-barra__tipo{display:block;font-size:12px;color:#9CA1AB;margin-top:2px}
.bsc-barra .bsc-chips{margin:6px 0 0}
.bsc-barra__cta{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.bsc-barra .bsc-btn{padding:10px 16px;font-size:12.5px}

/* mini — enlace en línea */
.bsc-mini{display:inline;font-weight:700;color:#E30613!important;text-decoration:underline;text-underline-offset:2px}
.bsc-mini em{font-style:normal;color:#101216;font-weight:800}

/* comparativa */
.bsc-tabla-wrap{overflow-x:auto;margin:26px 0;border:1px solid #E6E8EC;border-radius:14px}
.bsc-tabla{width:100%;border-collapse:collapse;min-width:640px;font-size:14.5px;margin:0}
.bsc-tabla thead th{background:#101216;color:#fff;font-size:12px;text-transform:uppercase;letter-spacing:.4px;padding:13px 14px;text-align:left;white-space:nowrap;border:0}
.bsc-tabla td{padding:13px 14px;border:0;border-top:1px solid #E6E8EC;vertical-align:middle}
.bsc-tabla tbody tr:nth-child(even){background:#F4F5F7}
.bsc-tabla__prod a{font-weight:700;color:#101216!important;text-decoration:none!important}
.bsc-tabla__precio{font-weight:800;color:#12855B;white-space:nowrap}

/* destacado */
.bsc-destacado{background:linear-gradient(180deg,#FFFBF2,#FFF7E8);border:1px solid #F6E2B8;border-left:5px solid #F5A623;border-radius:14px;padding:18px 22px;margin:24px 0;font-size:16px;line-height:1.7;color:#31435A}
.bsc-destacado strong{color:#101216}

@media (max-width:760px){
  .bsc-card{grid-template-columns:1fr;padding:18px}
  .bsc-card__media img{max-width:170px}
  .bsc-barra{flex-wrap:wrap}
  .bsc-barra__cta{flex-direction:row;align-items:center;justify-content:space-between;width:100%}
}
/* media estrella: glifo gris con la mitad izquierda pintada en ámbar */
.bsc-estrellas__media{position:relative;display:inline-block;font-style:normal;color:#D8DEE6}
.bsc-estrellas__media::before{content:"★";position:absolute;left:0;top:0;width:50%;overflow:hidden;color:#F5A623}

/* ============================================================
   SELECTOR DE BOMBAS  (.bsel-)
   ============================================================
   La logica vive en bombeo-core/includes/selector/. Aqui el aspecto.
   ============================================================ */

/* El ancho del sitio, no el de lectura. page.php envuelve toda pagina en
   .bt-pag (1080) y .bt-pag__wrap (780), medidas pensadas para un texto legal
   largo. Una tabla de resultados con grafica no cabe ahi. El plugin marca el
   <body> con .bombeo-selector para que esto pueda aplicarse. */
body.bombeo-selector .bt-pag{max-width:1400px;padding:0 24px 64px}
body.bombeo-selector .bt-pag__migas{max-width:none;margin:20px 0 0}
body.bombeo-selector .bt-pag__wrap{max-width:none}
/* El cuerpo de la pagina va a 1280 porque la grafica lo necesita, pero un
   parrafo de 1280px de ancho no se lee: el ojo pierde la linea al volver, y
   una tabla de conversiones estirada a 1280 separa tanto las columnas que hay
   que seguir el renglon con el dedo.
   Se limita el TEXTO —hijos directos de .bt-pag__body— y no el contenedor,
   porque lo que pinta el shortcode es un .bsel y necesita los 1280 enteros
   para la grafica. Por eso la lista es de elementos y no `> *`. */
body.bombeo-selector .bt-pag__body > p,
body.bombeo-selector .bt-pag__body > h2,
body.bombeo-selector .bt-pag__body > h3,
body.bombeo-selector .bt-pag__body > ul,
body.bombeo-selector .bt-pag__body > ol,
body.bombeo-selector .bt-pag__body > figure{max-width:84ch}

.bsel{font-family:'Poppins',system-ui,-apple-system,sans-serif;color:#31435A}

/* --- Formulario --- */
.bsel__form{background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:22px 24px;margin:0 0 24px;
  box-shadow:0 2px 10px rgba(16,18,22,.04)}
/* Un solo renglon: campos y boton en la misma linea, alineados por abajo para
   que el boton quede a la altura de los recuadros y no de las etiquetas. */
.bsel__campos{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px;margin:0}
.bsel__campo{flex:1 1 158px;min-width:0}
/* Caudal y presion son numeros cortos: no necesitan tanto sitio como un menu. */
.bsel__campo:nth-child(1),.bsel__campo:nth-child(2){flex:0 1 165px}
.bsel__campo label{display:block;font-size:12.5px;font-weight:700;color:#101216;margin:0 0 7px}
.bsel__campo select,.bsel__unidad input{width:100%;min-height:46px;border:1.5px solid #E6E8EC;border-radius:10px;
  padding:10px 13px;font-family:inherit;font-size:15px;color:#101216;background:#fff}
.bsel__campo select:focus,.bsel__unidad input:focus{outline:none;border-color:#E30613;box-shadow:0 0 0 3px rgba(227,6,19,.12)}
.bsel__unidad{position:relative}
.bsel__unidad input{padding-right:54px}
.bsel__unidad span{position:absolute;right:13px;top:50%;transform:translateY(-50%);font-size:12px;font-weight:700;
  color:#9CA1AB;pointer-events:none;letter-spacing:.04em}
.bsel__btn{flex:0 0 auto;min-height:46px;background:#F5A623;border:1px solid #F5A623;color:#101216;
  font-family:inherit;font-size:15px;font-weight:800;padding:0 26px;border-radius:10px;cursor:pointer;
  transition:background .15s ease;white-space:nowrap}
.bsel__btn:hover{background:#e0961c;border-color:#e0961c}
.bsel__vacio{background:#F4F7FB;border:1px dashed #D5DFEB;border-radius:12px;padding:22px;text-align:center;
  color:#9CA1AB;font-size:15px;margin:0}

/* --- El panel de la grafica --- */
.bsel__panel{background:#fff;border:1px solid #E6E8EC;border-radius:16px;padding:22px 24px;margin:0 0 30px;
  box-shadow:0 2px 10px rgba(16,18,22,.04);scroll-margin-top:20px}
.bsel__panel-cab{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin:0 0 14px}
.bsel__panel-rot{font-size:10.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:#9CA1AB;margin:0 0 5px}
.bsel__panel-nom{font-size:16px;font-weight:700;color:#101216;line-height:1.35;margin:0;max-width:56ch}
.bsel__panel-pedido{font-size:13.5px;color:#6B7079;margin:0}
.bsel__panel-pedido b{color:#B30510;font-weight:700}

.bsel__grafica svg{display:block;width:100%;height:auto;max-width:100%;overflow:visible}
/* Rejilla en dos niveles: la fina deja leer un valor intermedio sin contar
   cuadros, y es lo que quita al dibujo el aspecto plano. */
.bsel__reja{stroke:#E4EAF2;stroke-width:1}
.bsel__reja--fina{stroke:#F1F5F9;stroke-width:1}
.bsel__eje{font-size:11.5px;fill:#8F9EB0;font-family:inherit;font-variant-numeric:tabular-nums}
.bsel__eje-rot{font-size:10.5px;fill:#9CA1AB;font-weight:800;letter-spacing:.1em;font-family:inherit}
/* Zona de trabajo: del 70 % al 120 % del caudal nominal. */
/* Relleno plano y muy suave. El degradado y la banda verde llenaban de color
   una grafica tecnica: el color aqui solo debe marcar lo que hay que mirar. */
.bsel__area{fill:rgba(227,6,19,.07)}
.bsel__linea{fill:none;stroke:#E30613;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
/* La cruz del punto pedido va en rojo: es el requisito, no la bomba. */
.bsel__guia{stroke:#B30510;stroke-width:1.4;stroke-dasharray:4 4;opacity:.7}
.bsel__pedido{fill:#B30510;stroke:#fff;stroke-width:2.5}
.bsel__pedido-rot{font-size:11px;fill:#B30510;font-weight:700;font-family:inherit}
.bsel__p{stroke:#fff;stroke-width:2.5}
.bsel__p--max,.bsel__p--min{fill:#6B7079}
.bsel__p--opt{fill:#F5A623}
.bsel__rotulo{font-size:10.5px;font-weight:800;fill:#9CA1AB;letter-spacing:.06em;text-transform:uppercase;font-family:inherit}
.bsel__rotulo-val{font-size:11.5px;font-weight:700;fill:#101216;font-family:inherit;font-variant-numeric:tabular-nums}
/* El veredicto: lo primero que hay que saber al mirar la grafica. */
.bsel__veredicto{font-size:12px;font-weight:800;font-family:inherit;letter-spacing:.03em}
.bsel__veredicto.es-si{fill:#1E8A54}
.bsel__veredicto.es-no{fill:#B30510}

/* Las tres cajas van en color SOLIDO, sin borde: son el resumen de la grafica
   y tienen que leerse como tres bloques, no como tres fichas timidas.
   El optimo lleva el navy de marca porque es el unico dato REAL del catalogo;
   maximo y minimo son estimados y por eso van en gris. */
.bsel__tres{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:16px 0 0}
.bsel__tres-pt{border:0;border-radius:10px;padding:13px 15px;background:#DFE6EF}
.bsel__tres-pt--opt{background:#101216}
.bsel__tres-rot{font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:#64748B;margin:0 0 5px}
.bsel__tres-pt--opt .bsel__tres-rot{color:#9FC4E8}
.bsel__tres-val{font-size:14.5px;color:#16181D;margin:0;font-variant-numeric:tabular-nums}
.bsel__tres-val b{font-weight:800}
.bsel__tres-pt--opt .bsel__tres-val{color:#fff}
.bsel__tres-sub{font-size:11px;color:#9CA1AB;margin:3px 0 0}
.bsel__tres-pt--opt .bsel__tres-sub{color:#8FB4DC}
.bsel__aviso{font-size:12px;line-height:1.55;color:#8A5B00;background:#FDF3DC;border:1px solid #EBD49A;
  border-radius:10px;padding:11px 14px;margin:14px 0 0}
/* La curva puede venir de dos sitios y el aviso no puede decir lo mismo en los dos:
   amarillo cuando se estima, verde cuando son numeros del fabricante. */
.bsel__aviso--real{color:#1E6B3A;background:#EEF8F1;border-color:#B6DEC4}


/* --- Grupos --- */
/* Sin filete lateral: separa el TITULO, que es lo que de verdad divide.
   Una linea a la izquierda solo desplazaba el contenido. */
.bsel__grupo{margin:0 0 34px}
.bsel__grupo-tit{display:flex;align-items:center;gap:10px;font-size:15px;font-weight:800;color:#101216;
  margin:0 0 4px;padding-bottom:9px;border-bottom:2px solid #E6E8EC;letter-spacing:-.01em}
.bsel__grupo--exacta .bsel__grupo-tit{border-bottom-color:#1E8A54}
.bsel__grupo--arriba .bsel__grupo-tit{border-bottom-color:#E30613}
.bsel__grupo--abajo .bsel__grupo-tit{border-bottom-color:#C9A227}
.bsel__grupo-tit span{font-size:11.5px;font-weight:700;background:#EDF1F6;color:#6B7079;border-radius:999px;padding:2px 9px}
.bsel__grupo-txt{font-size:13px;color:#9CA1AB;margin:9px 0 14px;max-width:66ch}

/* --- Barra de filtros --- */
.bsel__filtros{background:#fff;border:1px solid #E6E8EC;border-radius:12px;padding:14px 18px;margin:0 0 26px;
  display:flex;flex-wrap:wrap;gap:18px 30px;align-items:flex-start}
.bsel__filtro{display:flex;align-items:center;gap:11px;flex-wrap:wrap;min-width:0}
.bsel__filtro-rot{font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:#9AA8B8;white-space:nowrap}
.bsel__chips{display:flex;flex-wrap:wrap;gap:6px}
.bsel__chip{background:#F4F7FB;border:1px solid #E2E9F2;color:#6B7079;font-family:inherit;font-size:12.5px;
  font-weight:600;border-radius:999px;padding:6px 13px;cursor:pointer;white-space:nowrap;
  transition:background .12s ease,border-color .12s ease,color .12s ease}
.bsel__chip i{font-style:normal;font-size:10.5px;font-weight:700;opacity:.62;margin-left:3px}
.bsel__chip:hover{border-color:#C7CBD2;color:#101216}
.bsel__chip.es-on{background:#101216;border-color:#101216;color:#fff}
.bsel__chip.es-on i{opacity:.75}
.bsel__filtros-nada{width:100%;margin:4px 0 0;font-size:13px;color:#B30510}

/* --- LISTA EN BARRAS ---
   Cada bomba es un renglon. Las cifras quedan alineadas en columna con las de
   arriba y las de abajo, asi que comparar es recorrer la vista, no subir y
   bajar entre tarjetas. */
.bsel__lista{display:flex;flex-direction:column;gap:9px}
.bsel__fila{display:grid;grid-template-columns:78px 1fr auto;gap:16px;align-items:center;
  background:#fff;border:1px solid #E6E8EC;border-radius:12px;padding:12px 16px;
  transition:border-color .15s ease,box-shadow .15s ease}
.bsel__fila.es-activa{border-color:#E30613;box-shadow:0 0 0 3px rgba(227,6,19,.12)}
.bsel__fila-img{width:78px;height:78px;border:1px solid #EEF2F7;border-radius:9px;background:#F4F5F7;
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.bsel__fila-img img{width:100%;height:100%;object-fit:contain;display:block}
.bsel__fila-sinimg{color:#C6D2E0}
.bsel__fila-sinimg svg{width:26px;height:26px}
.bsel__fila-cuerpo{min-width:0}
.bsel__fila-nom{font-size:13.5px;font-weight:700;color:#101216;line-height:1.4;margin:0 0 9px}

/* Los datos relevantes, bajo el nombre y en columna. */
.bsel__datos{display:flex;flex-wrap:wrap;gap:6px}
.bsel__dato{display:inline-flex;align-items:baseline;gap:5px;font-size:11.5px;color:#6B7079;
  background:#F6F9FC;border:1px solid #EAF0F6;border-radius:7px;padding:4px 9px}
.bsel__dato i{font-style:normal;font-size:9.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#9AA8B8}
.bsel__dato b{color:#101216;font-weight:700;font-variant-numeric:tabular-nums}
.bsel__dato em{font-style:normal;font-size:10.5px;font-weight:700;border-radius:5px;padding:1px 5px;font-variant-numeric:tabular-nums}
/* El desvio se colorea: justo, holgado o corto. Se lee sin interpretar el signo. */
.bsel__dato em.es-justa{background:#E7F6EE;color:#1E8A54}
.bsel__dato em.es-holgada{background:#F4F5F7;color:#E30613}
.bsel__dato em.es-corta{background:#FDECEC;color:#B30510}

.bsel__fila-acc{display:flex;flex-direction:column;align-items:flex-end;gap:7px;text-align:right}
.bsel__precio{font-size:14.5px;font-weight:700;color:#101216;margin:0;white-space:nowrap}
.bsel__precio del{font-weight:400;color:#9AA8B8;font-size:12px}
.bsel__ver{background:#F4F5F7;border:1px solid #CBE0F2;color:#E30613;font-family:inherit;font-size:12px;
  font-weight:700;border-radius:8px;padding:7px 15px;cursor:pointer;white-space:nowrap}
.bsel__ver:hover{background:#E30613;border-color:#E30613;color:#fff}
.bsel__fila.es-activa .bsel__ver{background:#E30613;border-color:#E30613;color:#fff}
.bsel__ficha{font-size:11.5px;font-weight:700;color:#9CA1AB;text-decoration:none;white-space:nowrap}
.bsel__ficha:hover{color:#E30613;text-decoration:underline}

@media (max-width:760px){
  .bsel__fila{grid-template-columns:62px 1fr;gap:12px;row-gap:11px}
  .bsel__fila-img{width:62px;height:62px}
  .bsel__fila-acc{grid-column:1 / -1;flex-direction:row;align-items:center;justify-content:space-between;
    text-align:left;border-top:1px solid #F0F4F8;padding-top:10px}
}
@media (max-width:640px){
  .bsel__form,.bsel__panel{padding:18px}
  .bsel__campos{gap:13px}
  .bsel__campo,.bsel__campo:nth-child(1),.bsel__campo:nth-child(2){flex:1 1 100%}
  .bsel__btn{flex:1 1 100%}
  .bsel__tres{grid-template-columns:1fr}
}

/* ============================================================
   CARD DE PRODUCTO AUTOMEX (.atx-pc)
   Tarjeta crema (amarillito sucio), imagen en tile blanco,
   precio grande sin decimales, "Desde"+IVA en una linea,
   botones siempre rojos. Sin linea roja superior.
   ============================================================ */
.atx-pc{display:flex;flex-direction:column;position:relative;height:100%;background:#EEF1F4;border:1px solid #E1E5EA;border-radius:16px;overflow:hidden;font-family:'Poppins',system-ui,-apple-system,sans-serif;transition:box-shadow .22s ease,border-color .22s ease,transform .22s ease}
.atx-pc *{box-sizing:border-box}
.atx-pc:hover{border-color:#D5DAE1;box-shadow:0 14px 34px rgba(16,18,22,.14);transform:translateY(-3px)}

.atx-pc__img{display:block;position:relative;aspect-ratio:1/1;margin:14px 14px 4px;background:#fff;border:1px solid #E6E8EC;border-radius:12px;overflow:hidden}
.atx-pc__img img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:16px;transition:transform .3s ease}
.atx-pc:hover .atx-pc__img img{transform:scale(1.045)}
.atx-pc__ph{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#C3CCD8;font-size:11px}

.atx-pc__body{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:8px;padding:12px 16px 18px;flex:1 1 auto}
.atx-pc__brand{font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#E30613;line-height:1}
.atx-pc__name{font-size:13.5px;font-weight:600;line-height:1.4;color:#101216;text-decoration:none;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.atx-pc__name:hover{color:#E30613}

.atx-pc__rating{display:flex;align-items:center;gap:6px}
.atx-pc__stars{position:relative;display:inline-block;height:13px;line-height:13px;font-size:13px;color:#D5DAE1;font-family:Arial,sans-serif;white-space:nowrap}
.atx-pc__stars::before{content:"\2605\2605\2605\2605\2605"}
.atx-pc__stars-fill{position:absolute;top:0;left:0;height:100%;overflow:hidden;white-space:nowrap;color:#E8A317}
.atx-pc__stars-fill::before{content:"\2605\2605\2605\2605\2605"}
.atx-pc__count{font-size:11px;color:#8A9099}

.atx-pc__spacer{flex:1 1 auto;min-height:6px;width:100%}

.atx-pc__meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px}
.atx-pc__meta .price-desde,.atx-pc__iva{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8A9099;line-height:1;margin:0}
.atx-pc__price{display:block;font-size:24px;font-weight:800;color:#101216;line-height:1.1;letter-spacing:-.01em;margin-top:3px}
.atx-pc__price .woocommerce-Price-amount{font-weight:800;color:#101216}
.atx-pc__price del{font-size:14px;font-weight:600;color:#9CA1AB;margin-right:7px}
.atx-pc__price del .woocommerce-Price-amount{font-weight:600;color:#9CA1AB}
.atx-pc__price ins{text-decoration:none}

.atx-pc__btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:14px;height:44px;border-radius:11px;background:#E30613;color:#fff;font-size:13.5px;font-weight:600;text-decoration:none;border:1px solid #E30613;cursor:pointer;transition:background .18s ease,border-color .18s ease}
.atx-pc__btn svg{width:18px;height:18px;stroke:currentColor;fill:none;flex:0 0 auto}
.atx-pc__btn:hover{background:#B30510;border-color:#B30510;color:#fff}
.atx-pc__btn.added{background:#101216;border-color:#101216}
.atx-pc a.added_to_cart{display:block;width:100%;margin-top:8px;text-align:center;font-size:12px;font-weight:600;color:#E30613;text-decoration:none}
.atx-pc a.added_to_cart:hover{text-decoration:underline}

/* "Desde" en la ficha: inline, pegado al precio grande */
.bt-fp-price .price-desde{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#8A9099;margin-right:8px}

@media (max-width:767px){
  .atx-pc__body{padding:10px 13px 15px;gap:7px}
  .atx-pc__price{font-size:21px}
  .atx-pc__btn{height:42px;font-size:13px}
}

/* --- Rejilla tienda/categoria Automex: menos gap, misma altura, titulo 3 lineas --- */
.atx-pc__name{min-height:4.2em}  /* reserva 3 lineas -> todas las cards igualan altura */
.bt-shop ul.products{display:grid !important;grid-template-columns:repeat(2,minmax(0,1fr)) !important;gap:12px !important;margin:0 !important;padding:0 !important;list-style:none !important}
@media(min-width:768px){.bt-shop ul.products{grid-template-columns:repeat(4,minmax(0,1fr)) !important}}
.bt-shop ul.products li.product{display:flex !important;flex-direction:column !important;width:auto !important;margin:0 !important;padding:0 !important;float:none !important;list-style:none}
.bt-shop ul.products li.product::before,.bt-shop ul.products::before,.bt-shop ul.products::after{content:none !important;display:none !important}

/* IVA incluido en rojo + bold (solo el IVA; "Desde" se queda gris) */
.atx-pc__iva{color:#E30613;font-weight:800}

/* ============================================================
   NEUTRALIZAR EL ROSA DE HELLO ELEMENTOR (assets/css/reset.css)
   Hello Elementor pinta de rosa #c36 (#cc3366) TODOS los <button>
   y <a>: borde + texto en base y FONDO en hover/focus. Aquí se
   neutraliza para que ese rosa no aparezca nunca; los botones y
   enlaces con estilo propio siguen mandando por especificidad.
   ============================================================ */
a{color:inherit}
[type=button],[type=submit],button{border-color:#D5DAE1;color:inherit}
[type=button]:hover,[type=button]:focus,[type=submit]:hover,[type=submit]:focus,button:hover,button:focus{background-color:transparent;color:inherit;text-decoration:none}

/* Fondo suave en tienda/categoría/ficha/checkout/cuenta: un gris mas claro
   que el de las cards (#EEF1F4) para que las cards y la tarjeta de compra
   resalten. No afecta la home (no lleva la clase .woocommerce). */
body.woocommerce{background:#F5F7F9}

/* Hello Elementor (reset.css) mete un RECUADRO BLANCO de 4px + outline negro
   en :focus-visible de inputs/botones/enlaces/selects (se ve feo en el
   buscador oscuro). Lo reemplazamos por un anillo rojo sutil y accesible,
   sin el recuadro blanco. El buscador lleva outline:none propio, así que
   solo le queda su borde rojo de .atx-mb-search:focus-within. */
[tabindex]:not([tabindex="-1"]):focus-visible,a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{box-shadow:none;outline:2px solid #E30613;outline-offset:2px}

/* Mega-menú reorganizado: franja superior (Nosotros/Casos) + botón "Todas las categorías" */
.atx-tb-nav{color:#C7CBD2;font-size:13px;font-weight:600;text-decoration:none;white-space:nowrap;transition:color .15s ease}
.atx-tb-nav:hover{color:#fff}
.atx-nav-all .atx-nav-burg3{display:inline-flex;align-items:center;margin-right:6px;vertical-align:middle}
.atx-nav-all .atx-nav-burg3 svg{width:16px;height:16px}

/* Submenús del nav — modernos y amplios. Solo "Todas las categorías" abre el mega. */
.atx-nav-li.atx-has-sub{position:relative!important}
.atx-has-sub>.atx-nav-link{cursor:pointer}
.atx-sub{position:absolute;top:calc(100% + 7px);left:0;min-width:300px;background:#fff;border:1px solid #ECEEF1;border-radius:16px;box-shadow:0 28px 64px -14px rgba(16,18,22,.32),0 6px 16px rgba(16,18,22,.08);padding:20px 22px;z-index:99992;display:none}
.atx-sub--right{left:auto;right:0}
.atx-has-sub:hover>.atx-sub,.atx-has-sub:focus-within>.atx-sub{display:block;animation:atxSubIn .17s cubic-bezier(.4,0,.2,1)}
@keyframes atxSubIn{from{opacity:0;transform:translateY(-7px)}to{opacity:1;transform:translateY(0)}}
.atx-sub a{position:relative;display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;color:#2C3038;font-size:14px;font-weight:500;text-decoration:none;line-height:1.35;transition:background .14s ease,color .14s ease}
.atx-sub a::before{content:"";width:5px;height:5px;border-radius:50%;background:#D5DAE1;flex:0 0 auto;transition:background .14s ease,transform .14s ease}
.atx-sub a:hover{background:#FDECEC;color:#E30613}
.atx-sub a:hover::before{background:#E30613;transform:scale(1.5)}
/* «Muy pronto»: ítems del submenú sin página todavía. No son enlace (sin href) y se ven apagados. */
.atx-sub .atx-sub-soon{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;color:#9AA1AC;font-size:14px;font-weight:500;line-height:1.35;cursor:default}
.atx-sub .atx-sub-soon::before{content:"";width:5px;height:5px;border-radius:50%;background:#E3E6EB;flex:0 0 auto}
.atx-sub .atx-sub-soon em{margin-left:auto;font-style:normal;font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#E30613;background:#FDECEC;padding:2px 8px;border-radius:999px;white-space:nowrap}
.atx-sub-grid{display:grid;gap:3px 34px}
.atx-sub-grid--2{grid-template-columns:repeat(2,minmax(260px,1fr))}
.atx-sub-grid--3{grid-template-columns:repeat(3,minmax(248px,1fr))}
.atx-sub-col{display:flex;flex-direction:column;gap:2px;min-width:0}
.atx-sub-grid .atx-sub-col:not(:first-child){border-left:1px solid #EEF1F4;padding-left:26px}
.atx-sub-group{font-size:11px;font-weight:800;letter-spacing:.11em;text-transform:uppercase;color:#9CA1AB;padding:2px 14px 10px}
@media (max-width:1024px){.atx-sub{display:none!important}}

/* Nav: "Todas las categorías" a la IZQUIERDA, el resto a la DERECHA */
.atx-nav-bar .atx-nav-items{justify-content:flex-start!important}
.atx-nav-all + .atx-nav-li{margin-left:auto!important}
