/* Maquiproyect WooCommerce — estilos scoped exclusivamente a WooCommerce.
   No se usan selectores globales (button{}, a{}, h1{}...): todo cuelga de
   .mq-woo, .mq-* o de las clases nativas de WooCommerce (woocommerce, 
   single-product, products, etc.) para no afectar a Home/Header/Footer. */

.woocommerce, .mq-woo {
	/* Tokens capturados del sitio real (ver DESIGN.md "Maquiproyect —
	   WooCommerce"): --ast-global-color-0 es el naranja de marca que ya
	   configura Astra (WooCommerce > Personalizar o Apariencia >
	   Personalizar); si el cliente lo cambia algún día, este módulo lo
	   sigue automáticamente en vez de quedarse con un naranja inventado. */
	--mq-ink: #1a1a1a;
	--mq-ink-soft: #5a5a5a;
	--mq-bg: #ffffff;
	--mq-bg-soft: #f4f8fd;
	--mq-border: #e2e6ea;
	--mq-accent: var(--ast-global-color-0, #ff5e14);
	--mq-accent-2: var(--ast-global-color-8, #ff702d);
	--mq-accent-ink: #ffffff;
	--mq-whatsapp: #1fa855;
	--mq-whatsapp-ink: #ffffff;
	--mq-radius: 8px;
	--mq-font: 'Montserrat', sans-serif;
	font-family: var(--mq-font);
}

/* Todo este módulo es mobile-first: las reglas base están pensadas para
   pantallas pequeñas y se amplían con min-width. Cualquier componente
   nuevo (hero, accesos rápidos, barra de filtros, banner) debe apilarse en
   una sola columna en móvil/tablet y no depender del ratón (hover) para
   funcionar: siempre hay un estado accesible por toque/teclado. */

/* ---------- Botones ---------- */
.mq-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .5em;
	padding: .75em 1.25em;
	border-radius: var(--mq-radius);
	border: 1px solid transparent;
	font-weight: 600;
	font-size: .95rem;
	text-decoration: none;
	line-height: 1.2;
	cursor: pointer;
	transition: background-color .15s ease, border-color .15s ease, transform .05s ease;
}
.mq-btn:active { transform: translateY(1px); }
/* !important + display:block por el mismo motivo que el resto de iconos de
   este archivo (ver .mq-rental-search__icon svg): sin forzarlo, algunos
   navegadores moviles pueden calcular un tamano "auto" mucho mayor para un
   <svg> sin width/height propios y romper la forma del boton. */
.mq-btn svg { width: 1.05em !important; height: 1.05em !important; flex: 0 0 auto; display: block; }
.mq-btn { overflow: hidden; }
.mq-btn--primary { background: var(--mq-ink); color: #fff; }
.mq-btn--primary:hover { background: #000; color: #fff; }
.mq-btn--outline { background: transparent; border-color: var(--mq-border); color: var(--mq-ink); }
.mq-btn--outline:hover { border-color: var(--mq-ink); color: var(--mq-ink); }
/* WhatsApp ya no se distingue por color (verde): todo el sitio usa un unico
   acento naranja de marca y el icono de WhatsApp aporta la afordancia. Ver
   DESIGN.md — decisión explícita del cliente (13/08/2026). */
.mq-btn--whatsapp { background: var(--mq-accent); color: var(--mq-accent-ink); }
.mq-btn--whatsapp:hover { background: var(--mq-accent-2); color: var(--mq-accent-ink); }
.mq-btn--large { padding: 1em 1.5em; font-size: 1.05rem; width: 100%; }
.mq-btn--block { width: 100%; }

/* ---------- Landing de tienda (grid de 5 categorias) ---------- */
.mq-landing-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 16px;
	margin: 0 0 32px;
}
@media (min-width: 600px) {
	.mq-landing-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
	.mq-landing-grid { grid-template-columns: repeat(3, 1fr); }
}
.mq-landing-card {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--mq-border);
	border-radius: var(--mq-radius);
	overflow: hidden;
	text-decoration: none;
	color: var(--mq-ink);
	background: var(--mq-bg);
	transition: border-color .15s ease, box-shadow .15s ease;
	min-height: 44px;
}
.mq-landing-card:hover, .mq-landing-card:focus-visible {
	border-color: var(--mq-ink);
	box-shadow: 0 2px 10px rgba(0,0,0,.08);
}
.mq-landing-card__media {
	height: 160px;
	background-color: var(--mq-bg-soft);
	background-size: cover;
	background-position: center;
}
.mq-landing-card__body { padding: 16px; display: flex; flex-direction: column; gap: 6px; }
.mq-landing-card__title { font-size: 1.1rem; font-weight: 700; color: var(--mq-ink); }
.mq-landing-card__text { font-size: .9rem; color: var(--mq-ink-soft); }
.mq-landing-card__count { font-size: .78rem; color: var(--mq-ink-soft); text-transform: uppercase; letter-spacing: .04em; }
.mq-landing-card__cta { margin-top: 8px; font-weight: 700; color: var(--mq-accent); }

/* ---------- Hero de alquiler ---------- */
/* Buscador + accesos rápidos a la izquierda, fotos reales del catálogo a la
   derecha (composición asimétrica, dial "variance" moderado). El H1 y la
   descripción de categoría los pinta WooCommerce/Astra de forma nativa
   justo antes de este bloque: aquí NUNCA se repite un <h1> ni un subtítulo
   propio para no duplicar el encabezado. */
.mq-rental-hero { margin: 0 0 28px; padding: 0; border-bottom: none; }
/* Segundo tono del H1 nativo ("Alquiler" ya viene coloreado en acento por
   el propio tema): el sufijo "de maquinaria" se aniade via PHP
   (mq_woo_rental_page_title) solo en esta categoria, en el color de texto
   principal para el efecto de titular en dos tonos del mockup aprobado. */
.woocommerce-products-header__title.page-title .mq-rental-hero__title-suffix,
h1.page-title .mq-rental-hero__title-suffix {
	color: var(--mq-ink);
}
body.term-alquiler .woocommerce-products-header__title.page-title,
body.term-alquiler h1.page-title {
	margin-bottom: .3em;
}
body.term-alquiler .term-description {
	max-width: 56ch;
	margin-top: 0;
}
.mq-rental-hero__grid {
	display: block;
	padding: 20px 0 28px;
	border-bottom: 1px solid var(--mq-border);
}
.mq-rental-hero__main { max-width: 640px; }

/* Buscador como una unica tarjeta (input + boton dentro del mismo
   contenedor con sombra), en vez de una caja de texto y un boton sueltos
   uno junto al otro — asi se lee como un solo componente, no dos. */
.mq-rental-search {
	display: flex;
	gap: 0;
	align-items: stretch;
	max-width: 640px;
	position: relative;
	background: var(--mq-bg);
	border: 1px solid var(--mq-border);
	border-radius: 999px;
	box-shadow: 0 6px 18px rgba(26,26,26,.06);
	overflow: hidden;
}
.mq-rental-search__icon {
	position: absolute; left: 20px; top: 50%; transform: translateY(-50%);
	width: 18px; height: 18px; color: var(--mq-ink-soft); pointer-events: none;
	/* overflow:hidden es una red de seguridad: si el <svg> interno llegara a
	   calcular un tamano mayor (ver regla .mq-rental-search__icon svg mas
	   abajo — algunos navegadores moviles, sobre todo Safari/iOS, resuelven
	   el tamano "auto" de un <svg> sin width/height propios de forma
	   distinta a Chrome de escritorio y pueden ampliarlo al tamano por
	   defecto del user agent en vez de encogerlo al viewBox), queda
	   recortado a este contenedor de 18x18 en vez de invadir la pagina. */
	overflow: hidden;
}
/* Tamano del SVG forzado de forma explicita (no solo en el contenedor): sin
   esto, un <svg viewBox="0 0 24 24"> sin atributos width/height propios
   puede calcular su tamano "auto" de forma distinta segun el navegador —
   en movil (sobre todo Safari/iOS) hemos visto el icono de la lupa
   ocupando cientos de pixeles en vez de los 18px esperados, rompiendo todo
   el layout del buscador. Verificado y corregido el 14/08/2026. */
.mq-rental-search__icon svg { width: 18px !important; height: 18px !important; display: block; }
.mq-rental-search__input {
	flex: 1 1 auto;
	padding: .95em 1em .95em 3rem;
	/* Astra/WooCommerce aplican su propio reset a input[type=search] con mayor
	   especificidad, que pisaba solo el padding-left (48px -> 16px) y dejaba el
	   icono de la lupa encima del texto de ejemplo. Mismo patron de bug que
	   .mq-filter-select (mas abajo en este archivo): forzamos aqui el valor
	   real con !important. Verificado en vivo el 14/08/2026. */
	padding-left: 3rem !important;
	border: none;
	border-radius: 0;
	font-size: .95rem;
	min-height: 48px;
	width: 100%;
	background: transparent;
}
.mq-rental-search__input:focus-visible { outline: none; }
.mq-rental-search:focus-within { border-color: var(--mq-accent); box-shadow: 0 6px 18px rgba(255,94,20,.12); }
.mq-rental-search .mq-btn {
	flex: 0 0 auto;
	border-radius: 0;
	padding: .95em 1.6em;
	min-height: 48px;
}

/* ------------------------------------------------------------------ */
/* Feedback de carga: barra superior + spinner en botones.             */
/* Nada de librerias externas (nprogress, etc.) para no anadir peso;    */
/* es CSS/JS propio, minimo, que se activa/desactiva solo mientras dura */
/* la accion real (navegacion, peticion AJAX o construccion del enlace  */
/* de WhatsApp). Ver mqProgress en mq-woo.js.                          */
/* ------------------------------------------------------------------ */
#mq-progress-bar {
	position: fixed;
	top: 0; left: 0;
	height: 3px;
	width: 0%;
	background: linear-gradient(90deg, var(--mq-accent), #ffb37a);
	box-shadow: 0 0 8px rgba(255,94,20,.55);
	/* Por encima incluso del popup de reserva (z-index 999999), para que se */
	/* vea tanto en navegaciones de pagina completa como con un modal abierto. */
	z-index: 1000001;
	opacity: 0;
	transition: width .25s ease, opacity .3s ease .15s;
	pointer-events: none;
}
#mq-progress-bar.is-active { opacity: 1; transition: width .25s ease, opacity .15s ease; }

.mq-btn.is-loading {
	position: relative;
	color: transparent !important;
	pointer-events: none;
}
.mq-btn.is-loading svg { visibility: hidden; }
.mq-btn.is-loading::after {
	content: '';
	position: absolute; left: 50%; top: 50%;
	width: 18px; height: 18px;
	margin: -9px 0 0 -9px;
	border: 2px solid rgba(255,255,255,.5);
	border-top-color: #fff;
	border-radius: 50%;
	animation: mq-spin .6s linear infinite;
}
.mq-btn--outline.is-loading::after { border-color: rgba(26,26,26,.2); border-top-color: var(--mq-ink); }
@keyframes mq-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
	#mq-progress-bar { transition: none; }
	.mq-btn.is-loading::after { animation-duration: 1.1s; }
}
/* El boton "Buscar" NUNCA cambia de border-radius entre escritorio y movil
   (se queda siempre en 0, igual que en la regla base de .mq-rental-search
   .mq-btn mas arriba): el cliente pidio expresamente que todos los botones
   mantengan la misma forma en cualquier dispositivo. En movil el propio
   contenedor .mq-rental-search pasa a apilarse en columna y su
   border-radius + overflow:hidden ya redondean visualmente la esquina
   inferior del boton por recorte, sin necesidad de fijarle un
   border-radius distinto al de escritorio. */
@media (max-width: 480px) {
	.mq-rental-search { flex-direction: column; align-items: stretch; border-radius: var(--mq-radius); }
}

/* Accesos rápidos: chips con icono, envuelven en varias filas en móvil sin
   scroll horizontal oculto (todo el contenido queda visible y alcanzable
   por toque). */
.mq-quick-access { margin-top: 18px; }
.mq-quick-access__label {
	display: block; font-size: .78rem; font-weight: 700; text-transform: uppercase;
	letter-spacing: .04em; color: var(--mq-ink-soft); margin-bottom: 10px;
}
.mq-quick-access__row { display: flex; flex-wrap: wrap; gap: 8px; }
.mq-quick-access__item {
	display: inline-flex; align-items: center; gap: 7px;
	padding: .55em 1em .55em .75em;
	border: 1px solid var(--mq-border); border-radius: 999px;
	font-size: .85rem; color: var(--mq-ink); text-decoration: none; background: var(--mq-bg);
	min-height: 40px;
	transition: border-color .15s ease, background-color .15s ease, color .15s ease;
}
.mq-quick-access__item:hover, .mq-quick-access__item:focus-visible { border-color: var(--mq-accent); color: var(--mq-accent); }
.mq-quick-access__item.is-active { background: var(--mq-accent); border-color: var(--mq-accent); color: var(--mq-accent-ink); }
.mq-quick-access__item.is-active .mq-quick-access__icon { color: inherit; }
.mq-quick-access__item--clear { border-style: dashed; color: var(--mq-ink-soft); }
.mq-quick-access__icon { width: 16px; height: 16px; color: var(--mq-accent); flex: 0 0 auto; overflow: hidden; }
/* Mismo motivo que .mq-rental-search__icon svg (mas arriba): tamano del
   SVG forzado de forma explicita para que nunca dependa del calculo "auto"
   del navegador, que en movil puede dispararse muy por encima del icono
   16x16 esperado. */
.mq-quick-access__icon svg { width: 16px !important; height: 16px !important; display: block; }
@media (max-width: 480px) {
	.mq-quick-access__row { gap: 6px; }
	.mq-quick-access__item { font-size: .8rem; padding: .5em .85em .5em .65em; }
}

.mq-chip-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.mq-chip {
	display: inline-flex;
	align-items: center;
	padding: .5em 1em;
	min-height: 40px;
	border: 1px solid var(--mq-border);
	border-radius: 999px;
	font-size: .88rem;
	color: var(--mq-ink);
	text-decoration: none;
	background: var(--mq-bg);
}
.mq-chip.is-active { background: var(--mq-ink); color: #fff; border-color: var(--mq-ink); }
.mq-chip--static { cursor: default; }

/* ---------- Barra de resultados + filtros (Alquiler) ---------- */
/* En escritorio: contador+pills a la izquierda, selects+orden a la
   derecha, todo en una fila. En tablet se apila en dos bloques; en móvil
   cada grupo pasa a ocupar el ancho completo y los selects se listan en
   una columna para que sigan siendo cómodos con el dedo (min-height 44px
   en todos los controles). */
.mq-filter-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	margin: 0 0 20px;
	padding-bottom: 16px;
	border-bottom: 1px solid var(--mq-border);
}
.mq-filter-bar__left {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}
.mq-filter-bar__count { font-size: .85rem; color: var(--mq-ink-soft); margin-right: 4px; }
.mq-filter-pill {
	display: inline-flex; align-items: center; gap: 4px;
	padding: .4em .9em;
	min-height: 32px;
	border: 1px solid var(--mq-border);
	border-radius: 999px;
	font-size: .82rem;
	color: var(--mq-ink);
	text-decoration: none;
	background: var(--mq-bg-soft);
}
.mq-filter-pill--static { background: var(--mq-ink); color: #fff; border-color: var(--mq-ink); cursor: default; }
.mq-filter-pill--toggle.is-active { background: rgba(255, 94, 20, .1); border-color: var(--mq-accent); color: var(--mq-accent); }
.mq-filter-pill--toggle:hover { border-color: var(--mq-accent); }
.mq-filter-bar__clear { font-size: .82rem; color: var(--mq-ink-soft); text-decoration: underline; padding: .4em 0; }

.mq-filter-bar__right {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}
.mq-filter-select-form {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
}
.mq-filter-select,
.mq-filter-bar__right .woocommerce-ordering select {
	/* Astra/WooCommerce traen un reset global de formularios que pone
	   select{display:block;width:100%}; sin ganar esa especificidad aqui,
	   cada <select> ocupaba todo el ancho del contenedor y la barra entera
	   se veia apilada en una columna de cajas enormes en vez de una fila
	   compacta (bug real detectado en verificacion visual, 13/08/2026). */
	display: inline-block !important;
	width: auto !important;
	flex: 0 0 auto;
	appearance: none;
	-webkit-appearance: none;
	padding: .55em 2.1em .55em .9em;
	min-height: 40px;
	border: 1px solid var(--mq-border);
	border-radius: var(--mq-radius);
	font-size: .85rem;
	font-family: var(--mq-font);
	color: var(--mq-ink);
	background-color: var(--mq-bg);
	background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a5a5a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
	background-repeat: no-repeat;
	background-position: right .65em center;
	background-size: 16px;
	cursor: pointer;
	max-width: 100%;
}
.mq-filter-select:hover,
.mq-filter-bar__right .woocommerce-ordering select:hover { border-color: var(--mq-ink); }
.mq-filter-bar__right .woocommerce-ordering {
	margin: 0;
	display: inline-flex !important;
	width: auto !important;
	flex: 0 0 auto;
	align-items: center;
}
.mq-filter-bar__right .woocommerce-ordering .screen-reader-text { position: absolute; }
@media (max-width: 480px) {
	.mq-filter-select,
	.mq-filter-bar__right .woocommerce-ordering select,
	.mq-filter-bar__right .woocommerce-ordering {
		width: 100% !important;
	}
}

@media (max-width: 900px) {
	.mq-filter-bar { flex-direction: column; align-items: stretch; }
	.mq-filter-bar__right { width: 100%; }
	.mq-filter-select-form { width: 100%; }
}
@media (max-width: 480px) {
	.mq-filter-bar__left { gap: 6px; }
	.mq-filter-select-form { flex-direction: column; }
	.mq-filter-select,
	.mq-filter-bar__right .woocommerce-ordering select { width: 100%; }
	.mq-filter-bar__right .woocommerce-ordering { width: 100%; }
}

/* ---------- Grid de productos (Alquiler): hasta 4 columnas ---------- */
/* Ajuste solo de CSS, solo en la categoría Alquiler (body.term-alquiler);
   no toca el ajuste global de columnas de Astra/Customizer y no afecta a
   Nueva, Segunda mano, Recambios ni Herramientas. Mobile-first: 1 columna
   por defecto, 2 en tablet, 3-4 en escritorio. */
body.term-alquiler ul.products {
	display: grid !important;
	grid-template-columns: repeat(1, 1fr) !important;
	gap: 24px !important;
}
@media (min-width: 560px) {
	body.term-alquiler ul.products { grid-template-columns: repeat(2, 1fr) !important; }
}
@media (min-width: 900px) {
	body.term-alquiler ul.products { grid-template-columns: repeat(3, 1fr) !important; }
}
@media (min-width: 1200px) {
	body.term-alquiler ul.products { grid-template-columns: repeat(4, 1fr) !important; }
}
body.term-alquiler ul.products li.product {
	width: 100% !important;
	margin: 0 !important;
}

/* ---------- Banner final: "no sé qué máquina necesito" ---------- */
.mq-help-banner {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 18px;
	margin: 32px 0 0;
	padding: 22px 24px;
	background: var(--mq-bg-soft);
	border-radius: var(--mq-radius);
}
.mq-help-banner__icon {
	flex: 0 0 auto;
	display: flex; align-items: center; justify-content: center;
	width: 48px; height: 48px;
	border-radius: 50%;
	background: var(--mq-bg);
	color: var(--mq-accent);
	overflow: hidden;
}
.mq-help-banner__icon svg { width: 24px !important; height: 24px !important; display: block; }
.mq-help-banner__text { flex: 1 1 260px; display: flex; flex-direction: column; gap: 2px; }
.mq-help-banner__text strong { font-size: 1.02rem; color: var(--mq-ink); }
.mq-help-banner__text span { font-size: .88rem; color: var(--mq-ink-soft); }
.mq-help-banner__cta { flex: 0 0 auto; white-space: nowrap; }
@media (max-width: 640px) {
	.mq-help-banner { flex-direction: column; align-items: flex-start; text-align: left; padding: 20px; }
	.mq-help-banner__cta { width: 100%; justify-content: center; }
}

/* ---------- Badges ---------- */
.mq-badges { position: absolute; top: 10px; left: 10px; display: flex; gap: 6px; z-index: 2; flex-wrap: wrap; }
.mq-product-card { position: relative; }
.mq-badge {
	display: inline-block;
	padding: .3em .65em;
	border-radius: 4px;
	font-size: .72rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .03em;
	background: var(--mq-ink);
	color: #fff;
}
.mq-badge--alquiler { background: var(--mq-accent); }
.mq-badge--nueva { background: #1f6f43; }
.mq-badge--segunda-mano { background: #52605c; }
.mq-badge--video { background: rgba(0,0,0,.72); }

.mq-single-badges { margin-bottom: 8px; }
.mq-card-meta { display: block; font-size: .82rem; color: var(--mq-ink-soft); margin: 2px 0 4px; }
.mq-card-cta { margin-right: 6px; margin-top: 6px; }
.mq-card-cta--secondary { font-size: .82rem; padding: .5em .9em; }

/* Precio con mas peso dentro de la tarjeta (Astra ya lo pone en negrita; aqui
   solo se refuerza con el color de marca para que destaque en el grid, sin
   tocar el estilo global de precios de WooCommerce/Astra). */
.mq-product-card .price { color: var(--mq-accent); font-size: 1.05rem; }

/* Elevacion sutil al pasar el raton: transform + sombra tintada (nunca negra
   pura), sin anadir un segundo borde que compita con la tarjeta de Astra.
   En touch (sin hover fino) se omite para no dejar tarjetas "elevadas" tras
   un tap. */
@media (prefers-reduced-motion: no-preference) and (hover: hover) and (pointer: fine) {
	.mq-product-card { transition: transform .18s ease, box-shadow .18s ease; }
	.mq-product-card:hover, .mq-product-card:focus-within {
		transform: translateY(-3px);
		box-shadow: 0 14px 28px rgba(26,26,26,.1);
	}
}

.mq-single-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }

/* ---------- CTA de ficha de producto ---------- */
.mq-single-cta { margin: 18px 0; padding-top: 14px; border-top: 1px solid var(--mq-border); max-width: 480px; }
.mq-single-cta__microcopy { font-size: .85rem; color: var(--mq-ink-soft); margin: 8px 0 0; }
.mq-link-toggle {
	background: none; border: none; padding: 10px 0; margin-top: 10px;
	color: var(--mq-ink); text-decoration: underline; cursor: pointer; font-size: .9rem;
	min-height: 44px;
}
.mq-rental-form { margin-top: 10px; padding: 14px; background: var(--mq-bg-soft); border-radius: var(--mq-radius); display: flex; flex-direction: column; gap: 10px; }
.mq-rental-form__row { display: flex; gap: 10px; flex-wrap: wrap; }
.mq-rental-form label { display: flex; flex-direction: column; gap: 4px; font-size: .85rem; color: var(--mq-ink-soft); flex: 1 1 160px; }
.mq-rental-form input, .mq-rental-form textarea {
	padding: .65em .75em; border: 1px solid var(--mq-border); border-radius: var(--mq-radius); font-size: .95rem; min-height: 44px;
}
.mq-rental-form textarea { min-height: 60px; }

/* ---------- Video ---------- */
.mq-video-frame { position: relative; max-width: 640px; border-radius: var(--mq-radius); overflow: hidden; cursor: pointer; background: #000; aspect-ratio: 16/9; }
.mq-video-frame img { width: 100%; height: 100%; object-fit: cover; display: block; opacity: .85; }
.mq-video-frame__play {
	position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
	font-size: 2.2rem; color: #fff; pointer-events: none; text-shadow: 0 2px 8px rgba(0,0,0,.5);
}
.mq-video-frame__button {
	position: absolute; inset: 0; width: 100%; height: 100%; background: transparent; border: 0; cursor: pointer;
}
.mq-video-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* ---------- Estado vacío ---------- */
.mq-empty-state { padding: 32px 16px; text-align: center; max-width: 520px; margin: 0 auto; }
.mq-empty-state__title { font-size: 1.2rem; font-weight: 700; margin: 0 0 8px; }
.mq-empty-state__text { color: var(--mq-ink-soft); margin: 0 0 8px; }
.mq-empty-state .mq-btn { margin-top: 12px; }

/* ---------- Resultados / carga ---------- */
.mq-results-count { font-size: .85rem; color: var(--mq-ink-soft); margin: 0 0 12px; }
.mq-product-grid.is-loading { opacity: .5; transition: opacity .15s ease; }

/* ---------- CTA sticky móvil ---------- */
.mq-sticky-cta {
	position: fixed; left: 0; right: 0; bottom: 0; z-index: 999;
	background: #fff; border-top: 1px solid var(--mq-border);
	padding: 10px 12px calc(10px + env(safe-area-inset-bottom));
	display: none;
}
@media (max-width: 782px) {
	.mq-sticky-cta { display: block; }
	body.single-product { padding-bottom: 64px; }
	/* CookieYes (cookie-law-info) fija su icono de reapertura de
	   consentimiento (.cky-btn-revisit-wrapper.cky-revisit-bottom-left,
	   45x45px, left:~15px, z-index muy por encima del nuestro) en la esquina
	   inferior izquierda -- confirmado en vivo -- justo donde empezaba
	   nuestro boton de WhatsApp a pantalla completa, tapandolo. No tocamos
	   la configuracion de CookieYes: solo dejamos ese hueco libre en
	   nuestra propia barra. */
	.mq-sticky-cta { padding-left: 70px; }
}

/* ---------- Modal de vídeo ---------- */
.mq-modal-overlay {
	position: fixed; inset: 0; background: rgba(0,0,0,.8);
	/* Por encima de cualquier cabecera/menu sticky del tema (Astra) y de la
	   barra de admin de WordPress (z-index: 99999): el popup nunca debe
	   quedar detras de la navegacion. */
	z-index: 999999;
	display: flex; align-items: center; justify-content: center; padding: 24px;
}
.mq-modal-box { position: relative; width: 100%; max-width: 900px; aspect-ratio: 16/9; background: #000; }
.mq-modal-box iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.mq-modal-close {
	position: absolute; top: -40px; right: 0; background: transparent; border: 1px solid #fff; color: #fff;
	border-radius: 999px; width: 36px; height: 36px; cursor: pointer; font-size: 1rem;
}

/* ---------- Modal de reserva ("Ver máquina" en Alquiler) ---------- */
.mq-reserve-modal-overlay { padding: 16px; align-items: flex-start; overflow-y: auto; }
.mq-reserve-modal {
	aspect-ratio: auto;
	background: var(--mq-bg);
	color: var(--mq-ink);
	max-width: 900px;
	width: 100%;
	margin: 24px auto;
	border-radius: var(--mq-radius);
	padding: 28px;
	max-height: calc(100vh - 48px);
	overflow-y: auto;
	box-sizing: border-box;
}
.mq-reserve-modal .mq-modal-close {
	position: absolute; top: 16px; right: 16px; border: none; background: transparent; color: var(--mq-ink-soft);
	width: 32px; height: 32px; font-size: 1.1rem; z-index: 2;
}
.mq-reserve-modal .mq-modal-close:hover { color: var(--mq-ink); }
.mq-reserve-title { margin: 0; font-size: 1.25rem; text-transform: uppercase; letter-spacing: .02em; }
.mq-reserve-subtitle { margin: 0 0 20px; color: var(--mq-ink-soft); font-size: .88rem; }

/* ---------- Cabecera del popup: imagen real + nombre + meta + precio ---------- */
.mq-reserve-header { display: flex; gap: 16px; align-items: flex-start; margin: 0 32px 18px 0; }
.mq-reserve-header__media {
	flex: 0 0 110px; width: 110px; height: 110px;
	border-radius: var(--mq-radius); overflow: hidden; background: var(--mq-bg-soft);
}
.mq-reserve-header__img { width: 100%; height: 100%; object-fit: contain; padding: 8px; box-sizing: border-box; }
.mq-reserve-header__info { flex: 1 1 auto; min-width: 0; padding-top: 2px; }
.mq-reserve-header__badge {
	display: inline-block; padding: .25em .75em; border-radius: 999px;
	background: var(--mq-accent); color: #fff; font-size: .68rem; font-weight: 700;
	text-transform: uppercase; letter-spacing: .04em; margin-bottom: 6px;
}
.mq-reserve-header .mq-reserve-title { font-size: 1.1rem; text-transform: none; letter-spacing: normal; line-height: 1.25; margin-bottom: 4px; }
.mq-reserve-header__meta { margin: 0 0 4px; font-size: .84rem; color: var(--mq-ink-soft); }
.mq-reserve-header__price { margin: 0; font-size: 1.05rem; font-weight: 700; color: var(--mq-accent); }
.mq-reserve-header__price span { font-size: .74rem; font-weight: 400; color: var(--mq-ink-soft); }
@media (max-width: 480px) {
	.mq-reserve-header { gap: 12px; }
	.mq-reserve-header__media { flex-basis: 76px; width: 76px; height: 76px; }
}

/* ---------- Pestañas: Especificaciones / Vídeo / Reservar ---------- */
.mq-reserve-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--mq-border); margin: 0 0 18px; overflow-x: auto; }
.mq-reserve-tab {
	background: none; border: none; border-bottom: 2px solid transparent;
	padding: .7em .2em; margin-right: 20px; font-size: .88rem; font-weight: 600;
	color: var(--mq-ink-soft); cursor: pointer; min-height: 40px; white-space: nowrap;
}
.mq-reserve-tab:hover { color: var(--mq-ink); }
.mq-reserve-tab.is-active { color: var(--mq-accent); border-bottom-color: var(--mq-accent); }
.mq-reserve-tab[hidden] { display: none; }
.mq-reserve-tabpanel[hidden] { display: none; }
.mq-reserve-loading { color: var(--mq-ink-soft); font-size: .9rem; }

/* Especificaciones: HTML real de la descripcion del producto, con tipografia
   propia (los <h2>/<h3>/<ul> vienen del contenido real escrito en WooCommerce,
   nunca generados aqui). */
.mq-reserve-specs-content { font-size: .92rem; }
.mq-reserve-specs-content h1, .mq-reserve-specs-content h2, .mq-reserve-specs-content h3, .mq-reserve-specs-content h4 {
	font-size: .98rem; font-weight: 700; color: var(--mq-ink); margin: 1.3em 0 .5em;
}
.mq-reserve-specs-content > :first-child, .mq-reserve-specs-content h1:first-child, .mq-reserve-specs-content h2:first-child { margin-top: 0; }
.mq-reserve-specs-content p { margin: 0 0 .8em; color: var(--mq-ink-soft); line-height: 1.55; }
.mq-reserve-specs-content ul { margin: 0 0 1em; padding-left: 1.2em; color: var(--mq-ink-soft); }
.mq-reserve-specs-content li { margin-bottom: .4em; line-height: 1.45; }
.mq-reserve-specs-content strong { color: var(--mq-ink); }
.mq-reserve-specs-content hr { border: none; border-top: 1px solid var(--mq-border); margin: 1.1em 0; }
.mq-reserve-specs-content a { color: var(--mq-accent); }
.mq-reserve-specs-links { margin: 0 0 16px; }
.mq-reserve-specs-links hr { display: none; }
.mq-reserve-specs-links a {
	display: inline-flex; align-items: center; gap: 6px;
	padding: .5em .9em; margin: 0 8px 8px 0;
	border: 1px solid var(--mq-border); border-radius: 999px;
	font-size: .82rem; color: var(--mq-ink); text-decoration: none; font-weight: 600;
}
.mq-reserve-specs-links a:hover { border-color: var(--mq-accent); color: var(--mq-accent); }

/* Video: mismo criterio que el resto del sitio, iframe insertado solo al
   activar la pestana (sin autoplay oculto). */
.mq-reserve-video { position: relative; aspect-ratio: 16/9; background: #000; border-radius: var(--mq-radius); overflow: hidden; }
.mq-reserve-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.mq-reserve-body { display: grid; grid-template-columns: 1fr; gap: 24px; }
@media (min-width: 720px) {
	.mq-reserve-body { grid-template-columns: 260px 1fr; }
}

.mq-reserve-calendar { border: 1px solid var(--mq-border); border-radius: var(--mq-radius); padding: 12px; background: var(--mq-bg-soft); }
.mq-cal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.mq-cal-title { font-weight: 700; text-transform: capitalize; font-size: .92rem; }
.mq-cal-nav { background: transparent; border: 1px solid var(--mq-border); border-radius: 4px; width: 32px; height: 32px; cursor: pointer; font-size: 1rem; line-height: 1; color: var(--mq-ink); }
.mq-cal-nav:hover { border-color: var(--mq-ink); }
.mq-cal-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; font-size: .7rem; text-transform: uppercase; color: var(--mq-ink-soft); text-align: center; margin-bottom: 4px; }
.mq-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.mq-cal-day, .mq-cal-day--empty {
	aspect-ratio: 1; display: flex; align-items: center; justify-content: center;
	font-size: .8rem; border: none; background: transparent; border-radius: 4px; cursor: pointer; color: var(--mq-ink);
	min-height: 34px; padding: 0;
}
.mq-cal-day:hover:not(:disabled) { background: rgba(255, 94, 20, .12); }
.mq-cal-day.is-disabled { color: #c3c9c6; cursor: not-allowed; }
.mq-cal-day.is-in-range { background: rgba(255, 94, 20, .16); border-radius: 0; }
.mq-cal-day.is-start, .mq-cal-day.is-end { background: var(--mq-accent); color: #fff; font-weight: 700; }

.mq-reserve-summary { display: flex; gap: 14px; margin-top: 14px; flex-wrap: wrap; }
.mq-reserve-summary__item { display: flex; flex-direction: column; gap: 2px; }
.mq-reserve-summary__item span { font-size: .66rem; text-transform: uppercase; letter-spacing: .04em; color: var(--mq-ink-soft); }
.mq-reserve-summary__item strong { font-size: 1.05rem; }
.mq-reserve-summary__item--total strong { color: var(--mq-accent); }

.mq-reserve-form { display: flex; flex-direction: column; gap: 14px; }
.mq-reserve-form__grid { display: grid; grid-template-columns: 1fr; gap: 14px; }
@media (min-width: 480px) {
	.mq-reserve-form__grid { grid-template-columns: 1fr 1fr; }
}
.mq-reserve-form label, .mq-reserve-form__full { display: flex; flex-direction: column; gap: 5px; font-size: .82rem; color: var(--mq-ink-soft); }
.mq-reserve-form input, .mq-reserve-form textarea {
	padding: .65em .75em; border: 1px solid var(--mq-border); border-radius: var(--mq-radius); font-size: .95rem; min-height: 44px; color: var(--mq-ink); background: var(--mq-bg);
	width: 100%;
	box-sizing: border-box;
}
.mq-reserve-form textarea { min-height: 70px; resize: vertical; }
.mq-reserve-form input.is-invalid, .mq-reserve-form textarea.is-invalid { border-color: #c0392b; }
.mq-reserve-submit { margin-top: 4px; }
.mq-reserve-disclaimer { font-size: .76rem; color: var(--mq-ink-soft); margin: 0; }

/* ---------- Responsive ajustes generales ---------- */
@media (max-width: 480px) {
	.mq-reserve-modal { padding: 20px; }
	.mq-reserve-title { font-size: 1.1rem; }
}

/* ---------- Scroll infinito (Shop y archivos de categoria) ---------- */
/* La paginacion nativa de WooCommerce se deja en el DOM (no se borra: es
   el respaldo real sin JavaScript) y solo se oculta visualmente cuando el
   scroll infinito toma el control. */
.mq-pagination--hidden { display: none !important; }

.mq-infinite-sentinel {
	height: 1px;
	margin: 0;
}
.mq-infinite-sentinel.is-loading {
	height: auto;
	padding: 2rem 0;
	text-align: center;
}
.mq-infinite-sentinel.is-loading::after {
	content: '';
	display: inline-block;
	width: 22px;
	height: 22px;
	border: 2px solid rgba(26,26,26,.15);
	border-top-color: var(--mq-accent);
	border-radius: 50%;
	animation: mq-spin .6s linear infinite;
}
.mq-infinite-end {
	text-align: center;
	padding: 1.5rem 0 .5rem;
	color: var(--mq-ink-soft);
	font-size: .9rem;
}
@media (prefers-reduced-motion: reduce) {
	.mq-infinite-sentinel.is-loading::after { animation-duration: 1.1s; }
}

/* ---------- Alineacion de tarjetas de producto (misma altura siempre) ----------
   .mq-product-card ya existe (la anade woocommerce_post_class en
   product-card.php) en TODAS las tarjetas de producto del sitio, no solo en
   Alquiler. El grid (ul.products, sea CSS grid o flex segun la pagina) ya
   estira los items a la misma altura por comportamiento por defecto de
   align-items:stretch; aqui forzamos que el CONTENIDO de la tarjeta tambien
   se reparta en columna y que el/los CTA (que WooCommerce imprime como
   hermanos de <a>, fuera del enlace) queden siempre pegados al fondo,
   independientemente de cuantas lineas ocupe el titulo. */
ul.products { align-items: stretch; }

.mq-product-card {
	display: flex !important;
	flex-direction: column !important;
	height: 100%;
}
/* Solo el enlace-contenedor de WooCommerce (variante "estandar", la que
   carga nuestro scroll infinito) debe crecer para ocupar el espacio
   disponible. IMPORTANTE: no se puede usar ".mq-product-card > a" a
   secas -- en esa variante nuestros propios botones CTA (.mq-card-cta)
   TAMBIEN son <a> hijos directos de la tarjeta, y heredaban
   flex:1 1 auto sin querer, creciendo para rellenar el hueco vertical
   sobrante de la fila y quedando mas altos que los botones de otras
   tarjetas -- esto es lo que causaba botones "mas grandes que otros"
   pese a tener el mismo texto y el mismo CSS. Confirmado en vivo
   inspeccionando las reglas CSS realmente aplicadas. */
.mq-product-card > a.woocommerce-loop-product__link {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}
.mq-product-card .woocommerce-loop-product__title {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: 2.6em;
}
.mq-product-card img {
	aspect-ratio: 4 / 3;
	object-fit: cover;
	width: 100%;
	height: auto;
}
/* Los botones CTA (Ver maquina / Alquilar ahora / Consultar) se imprimen
   como hermanos del <a>, no dentro de el; margin-top:auto en el primero los
   ancla siempre al fondo de la tarjeta, sin importar la altura del bloque
   titulo+precio+meta que vaya antes. */
/* ---------- Simetria estricta de los botones CTA de las tarjetas ----------
   Confirmado en vivo (getBoundingClientRect en las 19 tarjetas de
   Alquiler): con el mismo texto y el mismo CSS, la altura real variaba
   entre tarjetas (43px / 48px / 51px / 52px) segun que variante de
   marcado generaba cada una (la tarjeta "moderna" de Astra en la carga
   inicial del listado vs. la tarjeta estandar de WooCommerce que carga
   nuestro propio scroll infinito -- ver comentario mas abajo sobre
   .astra-shop-thumbnail-wrap). En vez de depender de una altura
   calculada a partir del contenido (fragil ante diferencias de
   contexto/DOM entre ambas variantes), forzamos una altura fija e
   identica en todos los casos, y evitamos que el texto pueda envolver a
   una segunda linea. El margin-top:auto empuja siempre el PRIMER boton
   hacia el fondo de la tarjeta (sea cual sea el elemento que lo precede,
   un <a> o un <div>); el segundo boton recupera una separacion fija
   respecto al primero. */
.mq-product-card > .mq-card-cta {
	/* min-height:auto es el valor por defecto de todo flex item y, si el
	   contenido del boton (en algunos contextos/DOM) "pide" mas alto que
	   48px, ese minimo automatico GANA sobre un height:48px explicito por
	   especificacion CSS (used height = max(height, min-height auto)).
	   Confirmado en vivo: con solo height:48px !important, unos botones
	   quedaban en 48px y otros en 51-57px pese a tener el mismo texto y el
	   mismo CSS. Fijando tambien min-height a 48px se elimina ese minimo
	   automatico y la altura queda identica siempre. */
	height: 48px !important;
	min-height: 48px !important;
	white-space: nowrap;
	margin-top: auto;
}
.mq-product-card > .mq-card-cta ~ .mq-card-cta {
	margin-top: 6px;
}

/* ---------- Unificar el orden de las tarjetas de producto ----------
   Confirmado en vivo: la tarjeta "moderna" que Astra pinta en la carga
   inicial del listado envuelve la imagen y el resumen en dos divs
   independientes (.astra-shop-thumbnail-wrap / .astra-shop-summary-wrap,
   con el titulo y el precio DENTRO de summary-wrap) y ese summary-wrap
   queda, en el HTML, DESPUES de nuestros botones CTA -- por eso el
   titulo/precio se veian debajo de "Alquilar ahora"/"Consultar". Las
   tarjetas que carga nuestro propio scroll infinito (mq-includes/search.php)
   usan el marcado estandar de WooCommerce (todo dentro de un unico <a>)
   y ya salen en el orden correcto. En vez de depender de a que prioridad
   exacta engancha Astra sus hooks (fragil ante actualizaciones del tema),
   forzamos el mismo orden visual en ambos casos con flexbox: imagen ->
   titulo/precio -> botones. */
.mq-product-card > .astra-shop-thumbnail-wrap { order: 1; }
.mq-product-card > .astra-shop-summary-wrap { order: 2; }
.mq-product-card > .mq-card-cta { order: 3; }
/* La etiqueta de categoria propia de Astra (texto "Alquiler" plano sobre
   el titulo) duplica nuestra insignia de color ya visible sobre la
   imagen y no existe en absoluto en las tarjetas cargadas por scroll
   infinito: se oculta para que el aspecto sea identico siempre. */
.mq-product-card .ast-woo-product-category {
	/* !important necesario: la regla de Astra (woocommerce-grid.min.css)
	   ".woocommerce-page ul.products li.product .ast-woo-product-category"
	   tiene mas especificidad (4 clases + 2 etiquetas) que la nuestra y gana
	   por especificidad aunque la nuestra cargue despues -- confirmado en
	   vivo inspeccionando las reglas CSS realmente aplicadas. */
	display: none !important;
}

/* ---------- Galeria de logos de marcas en /tienda/ ----------
   Bloque nativo de Gutenberg (wp:gallery, columns:7) incrustado en el
   contenido de la pagina Tienda -- no es un plugin ni un carrusel. Con
   columns-7 fijo, WordPress calcula un ancho fijo por imagen que no se
   adapta bien en pantallas estrechas (se ve recortado/apretado). Aqui se
   sustituye por un flex-wrap con anchos por punto de corte, acotado solo a
   la pagina Tienda (.woocommerce-shop, clase de body real confirmada en
   vivo) para no afectar a otras galerias del sitio. */
.woocommerce-shop .wp-block-gallery .blocks-gallery-grid {
	display: flex !important;
	flex-wrap: wrap !important;
	justify-content: center;
	gap: 20px !important;
}
.woocommerce-shop .wp-block-gallery.columns-7 .blocks-gallery-item {
	width: calc(50% - 20px) !important;
	margin: 0 !important;
}
@media (min-width: 480px) {
	.woocommerce-shop .wp-block-gallery.columns-7 .blocks-gallery-item { width: calc(33.333% - 20px) !important; }
}
@media (min-width: 700px) {
	.woocommerce-shop .wp-block-gallery.columns-7 .blocks-gallery-item { width: calc(20% - 20px) !important; }
}
@media (min-width: 1024px) {
	.woocommerce-shop .wp-block-gallery.columns-7 .blocks-gallery-item { width: calc(100% / 7 - 20px) !important; }
}
.woocommerce-shop .wp-block-gallery img {
	width: 100%;
	height: auto;
	object-fit: contain;
	max-height: 90px;
}

/* ---------- Zonas tactiles minimas en movil (WCAG ~44x44px) ----------
   .mq-btn ya cumple (min-height:48px). Los chips de filtro y el enlace
   "limpiar filtros" se quedaban algo cortos solo en movil; en escritorio
   se dejan como estaban para no perder densidad visual. */
@media (max-width: 782px) {
	.mq-chip { min-height: 44px; padding: .6em 1.1em; }
	.mq-filter-bar__clear { min-height: 44px; display: inline-flex; align-items: center; }
}
