@charset "UTF-8";
/* ==========================================================================
   AMIFER · hoja de estilos del sitio
   --------------------------------------------------------------------------
   Un solo archivo, sin build. El orden importa y es este:

     1. Fuentes          Poppins y Lato servidas por nosotros
     2. Tokens           color, tipografia y espacio del manual de marca
     3. Base             reset corto y ajustes de documento
     4. Utilidades       envoltura, rotulo, cifra, revela
     5. Cabezal          barra fija, menu de escritorio y panel movil
     6. Hero y escala    la escala de potencia
     7. Catalogo         filtros y tarjetas de maquina
     8. Ficha tecnica    solapas y tablas
     9. Bloques          motivos, marcas, contacto, cierre, pie
    10. Barra movil      acciones fijas abajo en telefono
    11. Movimiento       apariciones y prefers-reduced-motion

   Regla de oro: ningun color se escribe suelto, todo sale de un token. El
   sitio es solo tema claro a proposito (ver CLAUDE.md) -- esto no es para
   soportar un tema oscuro, es para poder cambiar la paleta entera en un
   solo lugar sin salir a cazar hexadecimales sueltos por los componentes.
   ========================================================================== */

/* 1. FUENTES ============================================================== */

@font-face{font-family:'Poppins';font-style:normal;font-weight:600;font-display:swap;src:url('../fuentes/poppins-600.woff2') format('woff2')}
@font-face{font-family:'Poppins';font-style:normal;font-weight:700;font-display:swap;src:url('../fuentes/poppins-700.woff2') format('woff2')}
@font-face{font-family:'Poppins';font-style:normal;font-weight:800;font-display:swap;src:url('../fuentes/poppins-800.woff2') format('woff2')}
@font-face{font-family:'Lato';font-style:normal;font-weight:400;font-display:swap;src:url('../fuentes/lato-400.woff2') format('woff2')}
@font-face{font-family:'Lato';font-style:normal;font-weight:700;font-display:swap;src:url('../fuentes/lato-700.woff2') format('woff2')}


/* 2. TOKENS =============================================================== */

/* El sitio se apoya en TRES niveles de superficie, y de ahi sale casi todo el
   ritmo visual:

     --fondo        la pagina
     --superficie   las tarjetas, un escalon por encima de la pagina
     --noche        las bandas azules (cabezal, hero, cierre)

   Los tres tienen que verse distintos SIEMPRE. En el tema oscuro viejo
   --fondo y --noche eran los dos #001B36: cada seccion terminaba contra otra
   del mismo color exacto, los limites desaparecian y el sitio entero se leia
   como una sola mancha azul. Por eso ahora en oscuro la pagina es casi negra
   y la banda es un azul MAS claro que la pagina: la banda sigue destacando,
   que es todo su proposito. */

:root{
  /* El sitio es claro siempre. Esto NO es decorativo: le avisa al navegador
     que pinte lo suyo -- barras de scroll, inputs, selectores de fecha, el
     relleno automatico de contraseñas -- con la paleta clara. Sin esta linea,
     en un telefono con el sistema en oscuro los campos del formulario de
     contacto salen con fondo oscuro y texto claro puestos por el navegador,
     adentro de una tarjeta blanca. */
  color-scheme:light;

  --display:'Poppins','Segoe UI',Arial,sans-serif;
  --texto:'Lato','Segoe UI',Arial,sans-serif;

  /* Superficies y tinta */
  --fondo:#F4F8FC;
  --superficie:#FFFFFF;
  --superficie-alt:#EDF4FB;
  --tinta:#0A1E33;
  --tinta-media:#3B5876;
  /* Antes #6E849E: 3.85:1 sobre --superficie, no pasa WCAG AA (min 4.5:1)
     en ninguno de los ~10 usos (etiquetas, placeholders, texto secundario),
     todos por debajo del piso de "texto grande". Este tono da 5.06:1. */
  --tinta-suave:#5B7186;
  --borde:#E1EAF4;
  --borde-vivo:#BFD6EE;

  /* Marca */
  --marca:#003A79;
  --marca-viva:#0A5290;
  --sobre-marca:#FFFFFF;      /* texto encima de --marca */

  /* Tres alturas de sombra. Sin esto las tarjetas quedan pegadas al fondo y
     la pagina se ve plana por mas que los colores esten bien. */
  --sombra:0 1px 2px rgba(0,27,54,.04),0 2px 8px -2px rgba(0,27,54,.08);
  --sombra-media:0 2px 4px rgba(0,27,54,.05),0 10px 24px -8px rgba(0,27,54,.16);
  --sombra-alta:0 4px 8px rgba(0,27,54,.06),0 22px 48px -16px rgba(0,27,54,.28);

  /* WhatsApp: el unico verde del sitio, y solo para la accion de contacto.
     No es el #25D366 de la marca -- ese da 1.98:1 con texto blanco, no pasa
     WCAG AA (hace falta 4.5:1). Este tono da 4.8:1 con --sobre-marca, lo
     bastante oscuro para pasar sin dejar de leerse como "verde WhatsApp". */
  --verde:#16833F;
  --verde-hover:#126B33;

  /* La banda azul oscura: cabezal, hero y cierre */
  --noche:#001B36;
  --noche-alt:#002F5E;
  --noche-tinta:#FFFFFF;
  --noche-suave:#A9BCD6;
  --noche-borde:rgba(169,188,214,.22);
  --noche-borde-vivo:rgba(169,188,214,.5);

  /* Placa de las fotos de catalogo.
     Las fotos (tools/recortar-fondo.mjs) salen sin fondo -- el archivo es
     transparente, la placa la pone este token -- asi que ya no hace falta
     que se mantenga clara: eso era para tapar el fondo blanco que traian
     pegado del folleto, y ese fondo ya no existe. Cambiarla es solo probar
     un valor nuevo aca.

     Sigue siendo un degradado y no un gris plano porque le da algo de
     profundidad, como un fondo de estudio real. Es tambien la placa que va
     sobre las bandas azules (hero y ficha). */
  --placa:linear-gradient(160deg,#FFFFFF 0%,#E8F1FA 100%);

  /* Escena generica detras de la maquina del hero (home y ficha): una foto
     real de campo arado (recorte de tools/_fondos-hero/, el mismo banco de
     fondos generados con IA para el hero -- ver tools/README.md), no un
     render por tractor -- ese enfoque (una escena generada por unidad) ya
     se probo y se saco, ver historial de escala.php. El tractor en si sigue
     siendo el recorte transparente de siempre por encima -- esto solo
     reemplaza --placa como fondo de esa placa, nunca se mezcla con la
     maquina.

     Este valor es solo el respaldo: fondo_hero() (sitio_helper.php) elige
     al azar entre hero-campo.webp, hero-campo-2.webp y hero-campo-3.webp en
     cada carga de pagina y la vista pisa la variable con un style inline en
     .ficha-hero__foto, asi cada visita ve una de las tres. Tres fotos y no
     una sola por lo mismo que --escena-campo no es una por tractor: da
     sensacion de variedad sin el peso de generar y mantener 15.

     Solo la usa .ficha-hero__foto -- .pieza__foto (tarjetas del catalogo) y
     .galeria (clientes) siguen con --placa lisa. */
  --escena-campo:url('../images/hero-campo.webp');

  --radio:14px;
  --radio-chico:10px;
  --ancho:1180px;
  --canal:clamp(18px,5vw,52px);
  --toque:44px;               /* area minima de toque */
  --cabezal-alto:64px;
  --barra-movil-alto:0px;     /* lo sube la media query cuando aparece */

  /* Movimiento: las dos curvas distinguen una entrada editorial de una
     respuesta corta. Nunca se animan propiedades que recalculen el layout. */
  --entra:cubic-bezier(.22,1,.36,1);
  --respuesta:cubic-bezier(.2,.8,.2,1);
  --duracion-rapida:180ms;
  --duracion-media:420ms;
}

/* NO HAY TEMA OSCURO.
   ---------------------------------------------------------------------------
   El sitio es claro siempre, decidido con el cliente: la marca es azul sobre
   blanco y asi esta el manual, los folletos y las fotos del catalogo (que
   traen el fondo blanco pegado). Mantener una segunda paleta significaba
   revisar cada pantalla dos veces, y de ahi salio el peor bug que tuvo el
   diseño: en oscuro --fondo y --noche quedaron los dos #001B36, o sea que
   .seccion y .seccion.noche pintaban el mismo color exacto, se borraban los
   limites entre secciones y el sitio entero se leia como una mancha plana.

   Si algun dia se vuelve a querer tema oscuro, va en un solo lugar: otro
   bloque que redefina estos mismos tokens. NO agregar colores sueltos dentro
   de los componentes. */


/* 3. BASE ================================================================= */

*,*::before,*::after{box-sizing:border-box}

html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}

body{
  margin:0;
  background:var(--fondo);
  color:var(--tinta);
  font-family:var(--texto);
  font-size:17px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
  padding-bottom:var(--barra-movil-alto);
}
body.sin-scroll{overflow:hidden}
body.cargando{overflow:hidden}

h1,h2,h3,h4{font-family:var(--display);font-weight:700;line-height:1.08;letter-spacing:-.02em;text-wrap:balance;margin:0}
p{margin:0}
figure{margin:0}   /* el margen que trae el navegador descoloca el carrusel */
img{max-width:100%;display:block}
a{color:var(--marca);text-underline-offset:3px}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
svg{flex:none}

:focus-visible{outline:2px solid var(--marca-viva);outline-offset:3px;border-radius:var(--radio)}
.noche :focus-visible,.cabezal :focus-visible{outline-color:var(--noche-tinta)}

/* Que el ancla no quede tapada por el cabezal fijo */
:target{scroll-margin-top:calc(var(--cabezal-alto) + 16px)}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}


/* 4. UTILIDADES =========================================================== */

.envoltura{width:100%;max-width:var(--ancho);margin-inline:auto;padding-inline:var(--canal)}

.rotulo{
  font-family:var(--display);font-weight:700;
  font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--tinta-suave);
}
.noche .rotulo{color:var(--noche-suave)}

.cifra{font-variant-numeric:tabular-nums;font-feature-settings:'tnum' 1}

.solo-lectores{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}
/* Salto de teclado: invisible hasta que recibe foco */
.saltar{
  position:absolute;left:8px;top:-60px;z-index:200;
  background:var(--noche-tinta);color:var(--noche);
  padding:10px 16px;border-radius:var(--radio);
  font-family:var(--display);font-weight:700;font-size:.85rem;text-decoration:none;
  transition:top .2s ease;
}
.saltar:focus{top:8px}

/* La banda azul. Lleva un degradado muy suave y no un color plano: a pantalla
   completa un azul liso de 900 px de alto se ve muerto, y este medio tono de
   diferencia alcanza para que respire sin que se note el truco. */
.noche{
  background:var(--noche);
  background-image:linear-gradient(170deg,var(--noche-alt) 0%,var(--noche) 55%);
  color:var(--noche-tinta);
}

/* Carga y navegacion ------------------------------------------------------
   Las dos cortinas usan la misma geometria: una presentacion tranquila al
   entrar y un corte veloz al cambiar de pagina. Asi la espera no parece un
   fallo tecnico ni se introduce una libreria de transiciones. */
.cortina-carga,.cortina-ruta{display:none}
html.js .cortina-carga,html.js .cortina-ruta{
  position:fixed;inset:0;z-index:200;display:grid;place-items:center;
  background:var(--noche);background-image:linear-gradient(170deg,var(--noche-alt) 0%,var(--noche) 55%);
  color:var(--noche-tinta);
}
.cortina-carga{transition:opacity var(--duracion-media) var(--entra),visibility 0s linear var(--duracion-media)}
.cortina-carga__marca{width:min(128px,30vw);position:relative;z-index:1}
.cortina-carga__marca img{width:100%;height:auto}
.cortina-carga__marca span{display:block;height:2px;background:var(--noche-borde);margin-top:22px;overflow:hidden}
.cortina-carga__marca span::after{content:'';display:block;width:55%;height:100%;background:var(--noche-tinta);animation:progreso-carga 1s var(--entra) infinite alternate}
.cortina-carga.lista{opacity:0;visibility:hidden;pointer-events:none}
.cortina-ruta{visibility:hidden;clip-path:inset(0 0 100% 0);transition:clip-path var(--duracion-media) var(--entra),visibility 0s linear var(--duracion-media)}
.cortina-ruta.activa{visibility:visible;clip-path:inset(0 0 0 0);transition:clip-path var(--duracion-media) var(--entra),visibility 0s}
.cortina-ruta__marca{position:relative;z-index:1;width:min(128px,30vw);height:auto}
@keyframes progreso-carga{from{transform:translateX(-90%)}to{transform:translateX(180%)}}

/* Esqueletos: cada variante guarda la proporcion del contenido que aparece.
   La animacion es una respiracion tenue, no un shimmer llamativo. */
.esqueleto{display:block;position:relative;overflow:hidden;background:var(--superficie-alt);border-radius:var(--radio-chico)}
.esqueleto::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);transform:translateX(-100%);animation:recorre-esqueleto 1.8s ease-in-out infinite}
.esqueleto--texto{height:.8em;width:var(--ancho-esqueleto,100%)}
.esqueleto--imagen{aspect-ratio:4/3}
.esqueleto--tarjeta{min-height:330px}
.esqueleto--hero{min-height:clamp(350px,50vw,570px);border-radius:var(--radio)}
.esqueleto--linea-tiempo{height:86px;border-radius:0}
.esqueleto--evento{height:120px}
.esqueleto--ficha{height:280px}
.noche .esqueleto{background:rgba(255,255,255,.12)}
.noche .esqueleto::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.12),transparent)}
@keyframes recorre-esqueleto{to{transform:translateX(100%)}}

/* Boton verde de WhatsApp */
.wa{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:var(--toque);
  background:var(--verde);color:var(--sobre-marca);
  font-family:var(--display);font-weight:700;font-size:.88rem;
  padding:11px 18px;border-radius:var(--radio);text-decoration:none;
  transition:background .2s ease,transform .2s ease;
  white-space:nowrap;
}
.wa:hover{background:var(--verde-hover);transform:translateY(-1px)}
.wa svg{width:18px;height:18px;fill:currentColor}
.wa--chico{min-height:38px;padding:8px 14px;font-size:.8rem}

/* Boton secundario, borde fino */
.boton-linea{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:var(--toque);
  font-family:var(--display);font-weight:600;font-size:.84rem;
  color:var(--marca);text-decoration:none;
  border:1px solid var(--borde-vivo);border-radius:var(--radio);
  padding:10px 16px;
  transition:border-color .2s ease,background .2s ease,color .2s ease;
}
.boton-linea svg{width:18px;height:18px}
.boton-linea:hover{border-color:var(--marca);background:var(--superficie-alt)}
.noche .boton-linea{color:var(--noche-tinta);border-color:var(--noche-borde-vivo)}
.noche .boton-linea:hover{background:rgba(255,255,255,.06);border-color:var(--noche-tinta)}


/* 5. CABEZAL ============================================================== */

.cabezal{
  position:sticky;top:0;z-index:60;
  background:var(--noche);
  border-bottom:1px solid var(--noche-borde);
}
.cabezal__fila{
  display:flex;align-items:center;gap:clamp(14px,3vw,38px);
  min-height:var(--cabezal-alto);
  padding-block:10px;
}

/* El isologo original. No lleva texto al lado: el nombre y "IMPORTADORES" ya
   estan dibujados adentro del logo.

   El minimo de 132 px sale del manual de marca: por debajo de 120 px de ancho
   "IMPORTADORES" deja de leerse. Y el manual tambien pide aire alrededor, de
   ahi el padding-right en vez de pegarlo al menu. */
.marca-logo{
  display:flex;align-items:center;
  min-height:var(--toque);
  text-decoration:none;
  margin-right:auto;padding-right:12px;
}
.marca-logo img{width:clamp(132px,16vw,164px);height:auto}

.menu{display:flex;gap:clamp(14px,2.2vw,30px)}
.menu a{
  color:var(--noche-suave);text-decoration:none;
  font-family:var(--display);font-weight:600;font-size:.82rem;
  padding-block:6px;position:relative;
}
.menu a::after{
  content:'';position:absolute;left:0;right:0;bottom:0;height:1px;
  background:var(--noche-tinta);transform:scaleX(0);transform-origin:left;
  transition:transform .3s cubic-bezier(.22,1,.36,1);
}
.menu a:hover,.menu a[aria-current="page"]{color:var(--noche-tinta)}
.menu a[aria-current="page"]::after,.menu a:hover::after{transform:scaleX(1)}

/* Hamburguesa: solo en telefono y tablet chica */
.hamburguesa{
  display:none;
  width:var(--toque);height:var(--toque);
  align-items:center;justify-content:center;
  color:var(--noche-tinta);
}
.hamburguesa svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}

/* Panel de navegacion en telefono */
.panel-menu{
  position:fixed;inset:0;z-index:70;
  background:var(--noche);
  display:flex;flex-direction:column;
  padding:0 var(--canal) calc(24px + env(safe-area-inset-bottom));
  overflow-y:auto;
  opacity:0;visibility:hidden;transform:translateY(-8px);
  /* visibility conmuta de golpe, no se interpola: al cerrar espera a que
     termine el desvanecido, y al abrir cambia ya. Si se la deja dentro de la
     transicion normal, el panel sigue invisible durante los 280 ms y no
     acepta foco -- quien navega con teclado abre el menu y queda afuera. */
  transition:opacity .28s ease,transform .28s ease,visibility 0s linear .28s;
}
.panel-menu[data-abierto="si"]{
  opacity:1;visibility:visible;transform:none;
  transition:opacity .28s ease,transform .28s ease,visibility 0s;
}
.panel-menu__fila{display:flex;align-items:center;min-height:var(--cabezal-alto);padding-block:10px}
.panel-menu__cerrar{margin-left:auto;width:var(--toque);height:var(--toque);display:flex;align-items:center;justify-content:center;color:var(--noche-tinta)}
.panel-menu__cerrar svg{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none;stroke-linecap:round}
.panel-menu nav{display:flex;flex-direction:column;margin-top:14px}
.panel-menu nav a{
  font-family:var(--display);font-weight:700;
  font-size:1.5rem;letter-spacing:-.02em;
  color:var(--noche-tinta);text-decoration:none;
  padding-block:14px;border-bottom:1px solid var(--noche-borde);
}
.panel-menu nav a[aria-current="page"]{color:var(--noche-suave)}
.panel-menu__datos{margin-top:auto;padding-top:28px;display:grid;gap:2px;color:var(--noche-suave);font-size:.92rem}
.panel-menu__datos a:not(.wa){
  color:var(--noche-tinta);text-decoration:none;font-weight:700;
  min-height:var(--toque);display:flex;align-items:center;
}
.panel-menu .wa{margin-top:20px}

@media (max-width:880px){
  .menu{display:none}
  .hamburguesa{display:flex}
  .cabezal .wa{display:none}   /* en telefono la accion vive en la barra de abajo */
}
@media (min-width:881px){
  .panel-menu{display:none}
}


/* 6. HERO Y ESCALA ======================================================== */

.hero{
  position:relative;
  padding-top:clamp(20px,4vw,44px);overflow:hidden;
}
.hero>.envoltura{position:relative;z-index:2}

/* Tractor a trazos (IA, ver comentario en escala.php): reemplaza a la rueda
   decorativa en este rincon puntual -- las fichas de tractor.php siguen
   usando hero-rueda.php tal cual. Es una imagen con fondo navy propio, no
   un SVG transparente como la rueda, asi que la mascara radial es la que
   hace que se lea como parte del fondo del hero y no como un recorte
   pegado encima -- sin ella se veria el borde rectangular de la foto. */
.hero-tractor-trazos{
  position:absolute;z-index:0;
  bottom:0;left:clamp(-40px,-4vw,-10px);
  width:clamp(360px,45vw,600px);height:auto;
  opacity:.85;
  pointer-events:none;user-select:none;
  -webkit-mask-image:radial-gradient(120% 120% at 20% 85%,#000 45%,rgba(0,0,0,0) 88%);
  mask-image:radial-gradient(120% 120% at 20% 85%,#000 45%,rgba(0,0,0,0) 88%);
}
/* Entre 901 y ~1300px .elegido pasa a dos filas (ver comentario en
   .elegido__cifra): el hero queda mas bajo de contenido pero el ancho
   todavia reserva columna completa para el intro, asi que a este tamano
   de imagen (pensado para el hero angosto de escritorio grande) le sobra
   alto y termina tapando el rotulo de "Escala de potencia". Achicarla en
   este tramo intermedio es mas simple que perseguir la altura real del
   contenido con JS. */
@media (max-width:1560px){
  .hero-tractor-trazos{ width:clamp(160px,18vw,300px); }
}
@media (max-width:900px){
  .hero-tractor-trazos{ width:clamp(200px,44vw,300px); }
}

/* Segunda columna: la foto real del tractor elegido (misma placa que la
   ficha, .ficha-hero__foto) mas la marca de agua tipografica con marca y
   modelo (.ficha-hero__hp, reusada tal cual -- mismo recurso que la ficha
   y que el hero de Empresa). Antes esto era un fondo a pantalla completa
   horneado con IA por tractor (Gemini, a partir del recorte real); ahora es
   la foto real del catalogo, la misma que ya se usa en /catalogo y en la
   ficha de cada modelo. */
.hero__grilla{
  display:grid;
  grid-template-columns:minmax(0,.86fr) minmax(0,1.14fr);
  grid-template-areas:
    "intro foto"
    "elegido foto";
  gap:0 clamp(24px,5vw,64px);
  align-items:end;
}
.hero__intro{grid-area:intro;min-width:0}
.hero__elegido{grid-area:elegido;min-width:0}
.hero__grilla .ficha-hero__foto{grid-area:foto;align-self:center;margin-top:clamp(20px,4vw,44px)}
.hero__grilla .ficha-hero__foto img{transition:opacity .25s ease}
/* #heroMarca es hijo directo de .hero (hermano de .envoltura), no de
   .hero__grilla -- el top tiene que igualar el padding-top de .hero, no el
   de .ficha-hero__hp base, o el adorno asoma solo arriba del titulo. */
.hero>.ficha-hero__hp{top:clamp(20px,4vw,44px)}
/* Titulo deliberadamente mas chico que .elegido__cifra: la maquina elegida
   (foto + HP + modelo) es el centro visual del hero, este es el texto de
   apoyo que lo entrega, no el que compite por la mirada. */
.hero__titulo{max-width:15ch;font-size:clamp(1.8rem,2.6vw,2.6rem);font-weight:800;letter-spacing:-.045em;margin:8px 0 10px}
.hero__bajada{color:var(--noche-suave);max-width:40ch;font-size:.9rem}

/* Placa de datos de la maquina elegida */
.elegido{margin-top:clamp(14px,2.5vw,28px);display:flex;align-items:flex-end;gap:clamp(12px,2vw,24px);flex-wrap:wrap;padding-top:14px;border-top:1px solid var(--noche-borde)}
.elegido__hp{display:flex;align-items:baseline;gap:10px;line-height:.78}
.elegido__cifra{
  font-family:var(--display);font-weight:800;
  /* El tope (6.2rem) esta calculado para que "130" (el HP de 3 cifras mas
     ancho de la escala) mas .elegido__datos (min-width abajo) mas el gap de
     arriba sigan entrando en una sola fila -- pasarse de esto hace que
     .elegido se envuelva en dos filas SOLO para los tractores de 3 cifras
     (100/110/120/130 HP) y la altura del hero salta al elegirlos. Si se
     vuelve a agrandar esta cifra, hay que volver a probar la escala completa
     con la maquina de 130 HP elegida antes de dar por bueno el cambio. */
  font-size:clamp(3.4rem,8vw,6.2rem);
  letter-spacing:-.055em;
  background:linear-gradient(180deg,#FFFFFF 30%,var(--noche-suave));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.elegido__unidad{font-family:var(--display);font-weight:700;font-size:1.2rem;color:var(--noche-suave)}
.elegido__datos{padding-bottom:6px;min-width:170px}
.elegido__modelo{font-family:var(--display);font-weight:700;font-size:1.16rem;letter-spacing:-.01em}
.elegido__serie{color:var(--noche-suave);font-size:.88rem;margin-top:2px}
.elegido__uso{
  display:inline-block;margin-top:8px;
  border:1px solid var(--noche-borde-vivo);border-radius:var(--radio);
  padding:4px 10px;font-family:var(--display);font-weight:600;font-size:.7rem;
  letter-spacing:.08em;text-transform:uppercase;
}
.elegido__acciones{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px;width:100%}
.boton-sobre{display:inline-flex;align-items:center;justify-content:center;min-height:var(--toque);padding:10px 16px;background:var(--noche-tinta);color:var(--noche);border:1px solid var(--noche-tinta);font-family:var(--display);font-size:.84rem;font-weight:700;text-decoration:none;transition:transform var(--duracion-rapida) var(--respuesta),background var(--duracion-rapida) var(--respuesta)}
.boton-sobre:hover{background:transparent;color:var(--noche-tinta);transform:translateY(-1px)}

/* Cambio suave de un modelo a otro */
.muta{transition:opacity .22s ease,transform .22s ease}
.muta.saliendo{opacity:0;transform:translateY(6px)}

/* --- El instrumento --- */
.escala{margin-top:clamp(16px,3vw,32px);padding-bottom:clamp(16px,2.5vw,28px)}
.escala__cabecera{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:10px}
.escala__ayuda{color:var(--noche-suave);font-size:.78rem}
.escala__controles{display:flex;align-items:center;gap:14px}

/* Flechas anterior/siguiente: la escala ya se podia arrastrar o tocar un
   punto, pero nada avisaba que era interactiva -- un boton "anterior/
   siguiente" es el control mas obvio que existe para recorrerla. */
.escala__flechas{display:flex;gap:6px}
.escala__flecha{
  display:inline-flex;align-items:center;justify-content:center;
  width:36px;height:36px;flex:none;border-radius:50%;
  border:1px solid var(--noche-borde-vivo);background:transparent;color:var(--noche-suave);
  cursor:pointer;transition:background .2s ease,color .2s ease,border-color .2s ease;
}
.escala__flecha svg{width:16px;height:16px}
.escala__flecha:hover{background:var(--noche-tinta);color:var(--noche);border-color:var(--noche-tinta)}
.escala__flecha:disabled{opacity:.3;cursor:default;pointer-events:none}
@media (max-width:520px){.escala__ayuda{display:none}}

.escala__riel{position:relative;height:84px;touch-action:pan-y}
.escala__linea{position:absolute;left:0;right:0;bottom:28px;height:2px;background:rgba(169,188,214,.26)}
.escala__cursor{
  position:absolute;left:0;bottom:28px;height:2px;
  background:var(--noche-tinta);width:0;
  transition:width .42s cubic-bezier(.22,1,.36,1);
}
.tick{
  position:absolute;bottom:28px;left:var(--pos);
  transform:translateX(-50%);
  width:26px;height:46px;
  display:flex;align-items:flex-end;justify-content:center;padding:0;
}
.tick::before{
  content:'';width:2px;height:15px;background:rgba(169,188,214,.75);
  transition:height .3s cubic-bezier(.22,1,.36,1),background .2s ease;
}
.tick:hover::before{height:26px;background:var(--noche-tinta)}
.tick[aria-checked="true"]::before{height:38px;background:var(--noche-tinta)}
.tick[aria-checked="true"]::after{
  content:'';position:absolute;bottom:43px;left:50%;transform:translateX(-50%);
  width:8px;height:8px;background:var(--noche-tinta);border-radius:50%;
}
.escala__marca{
  position:absolute;bottom:0;left:var(--pos);transform:translateX(-50%);
  font-family:var(--display);font-weight:600;font-size:.72rem;
  color:var(--noche-suave);white-space:nowrap;transition:color .2s ease;
}
.escala__marca.activa{color:var(--noche-tinta)}

@media (max-width:900px){
  .hero{padding-top:12px}
  .hero>.ficha-hero__hp{top:12px}
  .elegido__acciones{margin-top:8px}

  /* En telefono el orden visual no es el del escritorio (foto/HP primero, el
     titulo al final). Antes la escala iba justo despues del titulo para que
     "el eje del sitio" quedara a mano sin scrollear -- pero eso empujaba la
     foto y la placa de datos (el tractor de verdad, el HP, el boton de
     WhatsApp) a mas de una pantalla de distancia, y el primer tramo del hero
     terminaba siendo puro texto. La escala pasa a ultima: la foto y la placa
     ya estan a la vista apenas se pasa el titulo, y elegir otra maquina no
     depende de llegar hasta la escala -- #heroSec ya escucha swipe horizontal
     en toda su superficie (ver sitio.js), asi que deslizar sobre la foto
     tambien cambia de tractor. La escala queda al final como el instrumento
     de precision (saltar a un HP puntual), no como el unico modo de moverse.
     .hero__grilla pasa a display:contents para que sus tres hijos (intro,
     foto, elegido) se acomoden como items directos del mismo flex que ya
     envuelve a .escala, y ahi "order" decide el orden real. */
  .hero>.envoltura{display:flex;flex-direction:column}
  .hero__grilla{display:contents}
  .hero__intro{order:1;margin-top:0}
  .hero__grilla .ficha-hero__foto{order:2;margin-top:16px;margin-bottom:16px}
  .hero__elegido{order:3}
  .escala{order:4;margin-top:24px;padding-bottom:12px;border-top:1px solid var(--noche-borde);padding-top:20px}
  .elegido{margin-top:10px;padding-top:10px;gap:14px}
  .escala__marca.saltea{display:none}
  .elegido__acciones>*{flex:1}
}


/* 7. CATALOGO ============================================================= */

.seccion{padding-block:clamp(48px,8vw,110px)}
/* Franja con tinte azul claro. Es lo que le da ritmo a la pagina: blanco,
   tinte, banda azul, blanco. Sin esto son diez secciones seguidas del mismo
   color y el ojo no encuentra donde termina una y empieza la otra. */
.seccion--tinte{background:var(--superficie-alt)}
.seccion__intro{max-width:60ch;margin-bottom:clamp(26px,4vw,48px)}
.seccion__titulo{font-size:clamp(1.7rem,4vw,2.7rem);font-weight:800;letter-spacing:-.03em;margin:12px 0 14px}
.seccion__texto{color:var(--tinta-media);font-size:1.02rem}
.noche .seccion__texto{color:var(--noche-suave)}

/* La portada abre con una composicion calibrada; las dos secciones siguientes
   responden con cambio de escala, no con otra fila de tarjetas identicas. */
.home-surtido .seccion__intro{max-width:52ch;border-left:3px solid var(--marca);padding-left:clamp(16px,3vw,28px)}
.home-surtido .seccion__titulo{max-width:11ch}

/* Filete corto arriba del rotulo: un detalle chico que le da terminacion a
   cada encabezado y ata la seccion al azul de la marca. */
.seccion__intro .rotulo{display:flex;align-items:center;gap:10px}
.seccion__intro .rotulo::before{
  content:'';width:26px;height:3px;border-radius:2px;
  background:var(--marca);flex:none;
}
.noche .seccion__intro .rotulo::before{background:var(--noche-suave)}

/* Los filtros se desplazan de costado en telefono en vez de amontonarse */
.filtros{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}
.filtro{
  display:inline-flex;align-items:center;gap:6px;min-height:var(--toque);
  border:1px solid var(--borde-vivo);border-radius:var(--radio);
  padding:9px 16px;
  font-family:var(--display);font-weight:600;font-size:.82rem;
  color:var(--tinta-media);background:var(--superficie);
  transition:background .2s ease,color .2s ease,border-color .2s ease;
}
.filtro:hover{border-color:var(--marca);color:var(--marca)}
.filtro[aria-pressed="true"]{background:var(--marca);border-color:var(--marca);color:var(--sobre-marca)}
.filtro__n{opacity:.6;font-variant-numeric:tabular-nums}

/* minmax(min(290px,100%),1fr) y no minmax(290px,1fr): en un telefono angosto
   de verdad (320px de ancho, todavia se venden) 290px mas el padding de la
   envoltura no entra, y una columna que no puede achicarse desborda la
   pagina entera de costado. min(290px,100%) le pone un techo: por debajo de
   290px de contenedor, la columna ocupa el 100% en vez de insistir. */
.grilla{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(290px,100%),1fr));gap:clamp(16px,2vw,26px)}

.pieza{
  position:relative;
  display:flex;flex-direction:column;
  background:var(--superficie);
  border:1px solid var(--borde);border-radius:var(--radio);
  box-shadow:var(--sombra);
  overflow:hidden;
  transition:opacity .35s ease,transform .35s cubic-bezier(.22,1,.36,1),
             border-color .25s ease,box-shadow .35s ease;
}
/* La tarjeta se levanta al pasar por encima. Es la unica señal de "esto se
   toca" que tiene la grilla en escritorio. */
.pieza:hover{
  border-color:var(--borde-vivo);
  transform:translateY(-4px);
  box-shadow:var(--sombra-alta);
}
.pieza:focus-within{border-color:var(--marca);box-shadow:var(--sombra-alta)}
.pieza[hidden]{display:none}
.pieza.entrando{opacity:0;transform:translateY(10px)}

.pieza__foto{
  position:relative;aspect-ratio:4/3;
  background:var(--placa);
  border-bottom:1px solid var(--borde);
  overflow:hidden;
}
/* padding y no imagen a sangre: las fotos vienen recortadas del folleto
   (tools/recortar-fotos.mjs) y necesitan un poco de aire para no chocar
   contra el filo de la tarjeta. */
.pieza__foto img{
  width:100%;height:100%;object-fit:contain;
  padding:10px 12px;
  transition:transform .6s cubic-bezier(.22,1,.36,1);
}
.pieza:hover .pieza__foto img{transform:scale(1.05)}

/* Esqueleto mientras la foto todavia no bajo (loading="lazy"): ver la regla
   compartida .pieza__esqueleto,.galeria__esqueleto junto a .galeria en este
   mismo archivo -- sitio.js le suma "lista" apenas el <img> termina de cargar. */

/* La potencia es el dato con el que la gente compara, asi que va grande y
   pegada a la foto, no perdida en la lista de specs. */
.pieza__hp{
  position:absolute;left:12px;top:12px;
  display:inline-flex;align-items:baseline;gap:3px;
  background:var(--noche);color:var(--noche-tinta);
  border-radius:999px;
  font-family:var(--display);font-weight:700;font-size:.8rem;
  padding:5px 13px;
  box-shadow:0 2px 10px -2px rgba(0,27,54,.5);
}

.pieza__cuerpo{padding:18px 18px 20px;display:flex;flex-direction:column;gap:9px;flex:1}
.pieza__modelo{font-family:var(--display);font-weight:700;font-size:1.1rem;letter-spacing:-.015em}
.pieza__modelo a{color:inherit;text-decoration:none}
/* El link cubre la tarjeta entera: en telefono nadie apunta al titulo de
   17 px, se toca la tarjeta en cualquier lado. Los botones de abajo quedan
   por encima porque tienen position propia. */
.pieza__modelo a::after{content:'';position:absolute;inset:0;z-index:1}
.pieza__modelo a:hover{color:var(--marca)}
.pieza__serie{color:var(--tinta-suave);font-size:.82rem;margin-top:-6px}
.pieza__resumen{color:var(--tinta-media);font-size:.91rem;line-height:1.55}

.pieza__specs{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--borde);
  border:1px solid var(--borde);border-radius:var(--radio-chico);
  overflow:hidden;
  margin-top:auto;
}
.pieza__spec{background:var(--superficie);padding:10px 12px}
.pieza__spec dt{font-family:var(--display);font-weight:600;font-size:.62rem;letter-spacing:.13em;text-transform:uppercase;color:var(--tinta-suave)}
.pieza__spec dd{margin:2px 0 0;font-size:.88rem;font-weight:700;font-variant-numeric:tabular-nums}

.pieza__acciones{display:flex;gap:8px;padding-top:4px;position:relative;z-index:2}
.pieza__acciones>*{flex:1}

.vacio{
  grid-column:1/-1;text-align:center;padding:48px 20px;
  color:var(--tinta-suave);border:1px dashed var(--borde-vivo);border-radius:var(--radio);
}

/* Buscador + orden: mismo alto de toque y borde que .filtro, para que la
   fila entera se lea como un solo grupo de controles. */
.catalogo-controles{display:flex;gap:8px;flex-wrap:wrap;margin:-10px 0 24px}
.catalogo-buscador,.catalogo-orden{
  min-height:var(--toque);
  border:1px solid var(--borde-vivo);border-radius:var(--radio);
  padding:9px 14px;
  font-family:var(--texto);font-size:.9rem;color:var(--tinta);
  background:var(--superficie);
}
.catalogo-buscador{flex:1 1 240px}
.catalogo-buscador:focus,.catalogo-orden:focus{outline:none;border-color:var(--marca-viva)}
.catalogo-orden{flex:0 1 220px}

/* Tandas de mas abajo: el mismo esqueleto de tarjeta ya definido en la
   seccion 4, asi la carga progresiva se ve igual que cualquier otro estado
   "todavia no bajo" del sitio. Se oculta con [hidden] mientras no hace
   falta -- filtrando, buscando, con otro orden o ya sin tandas por revelar. */
.mas-tarjetas{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(290px,100%),1fr));gap:clamp(16px,2vw,26px);margin-top:clamp(16px,2vw,26px)}
.mas-tarjetas[hidden]{display:none}
.mas-tarjetas .esqueleto--tarjeta{border-radius:var(--radio)}

/* Checkbox de comparar: esquina libre de la foto, opuesta a .pieza__hp. El
   checkbox nativo se esconde -- el rotulo entero es el area de toque, con el
   mismo criterio de z-index que .pieza__acciones para no disparar el link de
   toda la tarjeta (.pieza__modelo a::after). */
.pieza__comparar{
  position:absolute;right:10px;top:10px;z-index:2;
  display:inline-flex;align-items:center;gap:5px;
  background:rgba(255,255,255,.92);color:var(--tinta-media);
  border-radius:999px;padding:5px 11px 5px 8px;
  font-family:var(--display);font-weight:600;font-size:.72rem;
  box-shadow:0 2px 10px -2px rgba(0,27,54,.3);
  cursor:pointer;user-select:none;
}
.pieza__comparar input{width:15px;height:15px;accent-color:var(--marca);margin:0}
.pieza__comparar:has(input:checked){background:var(--marca);color:var(--sobre-marca)}

/* Barra flotante del comparador. En telefono se corre arriba de
   .tr-barra-movil (seccion 10) para no taparla ni quedar tapada. */
.barra-comparar{
  position:fixed;left:0;right:0;bottom:0;z-index:56;
  display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;
  padding:12px var(--canal);
  background:var(--noche);border-top:1px solid var(--noche-borde);
  box-shadow:var(--sombra-alta);
}
.barra-comparar[hidden]{display:none}
.barra-comparar__cuenta{color:var(--noche-tinta);font-family:var(--display);font-weight:600;font-size:.88rem;margin-right:auto}
.barra-comparar__aviso{flex-basis:100%;color:var(--noche-suave);font-size:.82rem}
.barra-comparar__acciones{display:flex;gap:8px}
.barra-comparar .boton-linea{color:var(--noche-tinta);border-color:var(--noche-borde-vivo)}
.barra-comparar .wa:disabled{opacity:.5;pointer-events:none}

@media (max-width:880px){
  .barra-comparar{bottom:var(--barra-movil-alto,70px);padding:10px var(--canal)}
}

/* Dialogo del comparador: mismo <dialog> nativo que .visor, con una tabla en
   vez de una foto. La tabla se envuelve en un contenedor con scroll propio
   para que 3 o 4 columnas no rompan el ancho en telefono. */
.dialogo-comparar{
  border:0;padding:clamp(18px,3vw,28px);border-radius:var(--radio);
  max-width:min(94vw,900px);max-height:88vh;overflow:auto;
  background:var(--superficie);box-shadow:var(--sombra-alta);
}
.dialogo-comparar::backdrop{background:rgba(0,27,54,.7)}
.dialogo-comparar__titulo{
  display:flex;align-items:center;gap:9px;
  font-family:var(--display);font-size:1.1rem;margin-bottom:16px;
}
.dialogo-comparar__titulo svg{width:20px;height:20px}

.tabla-comparar{overflow-x:auto}
.tabla-comparar__fila{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(140px,1fr);gap:10px;padding:10px 0;border-bottom:1px solid var(--borde)}
.tabla-comparar__fila:last-child{border-bottom:0}
.tabla-comparar__etiqueta{
  position:sticky;left:0;background:var(--superficie);
  font-family:var(--display);font-weight:600;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;
  color:var(--tinta-suave);display:flex;align-items:center;min-width:90px;
}
.tabla-comparar__valor{font-size:.92rem;font-weight:600}
.tabla-comparar__fila--titulo .tabla-comparar__valor{font-size:1rem;font-family:var(--display)}
.tabla-comparar__fila--titulo span{display:block;font-size:.78rem;font-weight:400;color:var(--tinta-suave)}
.tabla-comparar__fila--acciones .tabla-comparar__valor{display:flex;flex-direction:column;gap:6px}


/* 7b. FICHA DE UNA MAQUINA ================================================ */

/* La banda azul se extiende bastante mas abajo del contenido a proposito:
   ese aire de sobra es donde .ficha-panel se mete por encima (margin-top
   negativo, ver 8.), asi el hero y la ficha tecnica se leen como una sola
   pieza en vez de dos secciones apiladas con una costura en el medio. */
.ficha-hero{
  position:relative;overflow:hidden;
  padding-block:clamp(20px,3vw,32px) clamp(100px,14vw,180px);
}

/* Marca y modelo gigantes de fondo: mismo adorno tipografico que el "404" de
   la pagina de error y el "AMIFER S.A." del hero de Empresa (.pagina-hero--
   marca) -- texto transparente clip-eado en degrade, no un dato que se lea
   aparte (el mismo modelo ya esta en el titulo, al lado). Antes decia el HP
   solo, que cabia holgado a un tamaño enorme; el texto de marca+modelo es
   mucho mas largo, asi que va con letra bastante mas chica y en una sola
   linea que se recorta por overflow:hidden del hero -- se lee entera en
   pantallas anchas y se corta en los telefonos, y esta bien que sea asi:
   es decoracion, no informacion.

   El top va igual al padding-top de .ficha-hero (mismo clamp) a proposito:
   si el adorno arranca mas arriba que el contenido real, en telefono queda
   un pedazo asomando solo, sin nada que lo tape, y se lee como un glitch en
   vez de una decoracion de fondo. */
.ficha-hero__hp{
  position:absolute;top:clamp(20px,3vw,32px);right:clamp(-20px,-1vw,10px);
  font-family:var(--display);font-weight:800;line-height:.8;white-space:nowrap;
  font-size:clamp(2.4rem,7vw,5.5rem);letter-spacing:-.04em;
  color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.08);
  background:linear-gradient(180deg,rgba(255,255,255,.1),rgba(255,255,255,0));
  -webkit-background-clip:text;background-clip:text;
  pointer-events:none;user-select:none;z-index:0;
}

.ficha-hero>.envoltura{position:relative;z-index:1}

/* Rueda decorativa: la unica pieza animada del hero. Reemplaza la idea
   original (un video en loop de una rueda) por un SVG que gira solo, mismo
   efecto de "algo siempre se mueve" sin el peso de un archivo de video en
   la seccion que carga primero. Mismo tratamiento visual que .ficha-hero__hp
   (trazo blanco muy tenue sobre la banda azul) y va del lado opuesto para no
   pisarla -- .ficha-hero__hp esta arriba a la derecha, la rueda abajo a la
   izquierda, las dos por detras de .envoltura (z-index:0). Gira muy lento
   (50s por vuelta) para que sea textura de fondo y no algo que distraiga del
   texto o la maquina. */
.hero-rueda{
  position:absolute;z-index:0;
  bottom:clamp(-160px,-16vw,-70px);left:clamp(-120px,-12vw,-50px);
  width:clamp(260px,32vw,440px);height:auto;
  pointer-events:none;user-select:none;
  animation:hero-girar 50s linear infinite;
}
@keyframes hero-girar{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){
  .hero-rueda{animation:none}
}

.miga{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  font-size:.8rem;color:var(--noche-suave);
  margin-bottom:clamp(20px,4vw,40px);
}
.miga a{color:var(--noche-suave);text-decoration:none}
.miga a:hover{color:var(--noche-tinta);text-decoration:underline}
.miga [aria-current]{color:var(--noche-tinta)}

.ficha-hero__grilla{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(24px,5vw,60px);align-items:center;
}
/* La serie y la barra de potencia/motor van en la misma linea a proposito:
   son los dos datos que definen el modelo de un vistazo, antes de leer una
   sola palabra del resumen. */
.ficha-hero__meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}
.ficha-hero__meta .rotulo{margin:0}
.ficha-hero__chips{display:flex;flex-wrap:wrap;gap:8px}
.ficha-hero__chip{
  display:inline-flex;align-items:center;
  padding:4px 12px;border:1px solid var(--noche-borde);border-radius:999px;
  font-family:var(--display);font-weight:700;font-size:.72rem;letter-spacing:.02em;
  color:var(--noche-suave);white-space:nowrap;
}
.ficha-hero__chip--hp{background:var(--marca);border-color:var(--marca);color:var(--sobre-marca)}
.ficha-hero__titulo{font-size:clamp(2rem,5.4vw,3.4rem);font-weight:800;letter-spacing:-.035em;margin:10px 0 6px}
.ficha-hero__sub{color:var(--noche-suave);font-size:1.02rem}
.ficha-hero__resumen{margin-top:16px;max-width:52ch;color:var(--noche-suave)}

.destacados{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));
  gap:1px;background:var(--noche-borde);
  border:1px solid var(--noche-borde);
  margin:clamp(20px,3vw,30px) 0 0;
}
.destacado{background:var(--noche);padding:12px 14px}
.destacado dt{font-family:var(--display);font-weight:600;font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--noche-suave)}
.destacado dd{margin:4px 0 0;font-family:var(--display);font-weight:700;font-size:1rem}

.ficha-hero__acciones{display:flex;flex-wrap:wrap;gap:10px;margin-top:clamp(20px,3vw,28px)}
.ficha-hero__acciones svg{width:18px;height:18px}

/* Las fotos del catalogo (tools/recortar-fondo.mjs) salen sin fondo, asi que
   lo que se vea detras de la maquina lo pone este bloque entero: la foto de
   campo de --escena-campo, recortada en 4/3 (mismo alto/ancho que la placa)
   para que "cover" la llene sin recortar de mas ni distorsionar. */
.ficha-hero__foto{
  position:relative;
  margin:0;
  background:var(--escena-campo) center / cover no-repeat, var(--placa);
  border:1px solid rgba(255,255,255,.16);
  border-radius:var(--radio);
  box-shadow:0 24px 60px -24px rgba(0,0,0,.6);
  aspect-ratio:4/3;
  overflow:hidden;
}
/* Video de campo (solo en la ficha de cada tractor, tools/comprimir-video-hero.mjs
   -- la home sigue con la foto fija de --escena-campo, no imprime este tag).
   Va primero en el marcado a proposito: sin z-index propio, un elemento
   position:absolute con z-index:auto pinta en el mismo nivel que uno
   position:relative con z-index:auto, y ahi gana el orden del DOM -- puesto
   antes que .ficha-hero__resplandor y la foto, queda debajo de las dos sin
   tener que forzar z-index en ningun lado. La foto de --escena-campo sigue
   puesta en el fondo de la figure (linea de arriba): es lo que se ve un
   instante antes de que cargue el poster, y lo unico que se ve si
   prefers-reduced-motion apaga el video. */
.ficha-hero__video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
@media (prefers-reduced-motion:reduce){
  .ficha-hero__video{display:none}
}

/* Resplandor de marca detras de la maquina: la foto ya no trae fondo propio,
   asi que sin esto la placa se ve un poco desnuda en un bloque tan grande.
   Radial y no un color plano, para que lea como luz de estudio. */
.ficha-hero__resplandor{
  position:absolute;inset:-10%;
  background:radial-gradient(closest-side,rgba(10,82,144,.16),rgba(10,82,144,0) 72%);
  pointer-events:none;
}
.ficha-hero__foto img{position:relative;width:100%;height:100%;object-fit:contain;padding:14px}

.aplicaciones{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1px;
  background:var(--noche-borde);border:1px solid var(--noche-borde);
}
.aplicaciones li{
  background:var(--noche);padding:16px 18px;
  font-family:var(--display);font-weight:600;font-size:.95rem;
}

@media (max-width:860px){
  .ficha-hero__grilla{grid-template-columns:minmax(0,1fr)}
  .ficha-hero__foto{order:-1;margin-inline:calc(var(--canal) * -1);border-inline:0}
  /* min-width:0 y no solo flex-basis:100%: un boton .wa trae white-space:nowrap
     de fabrica, y "Consultar precio y disponibilidad" sin envolver mide mas
     que un telefono angosto. Sin min-width:0 un item flex nunca encoge por
     debajo del ancho de su contenido -- por mas flex-basis:100% que tenga --
     y el boton se salia de la pantalla de costado. */
  .ficha-hero__acciones>*{flex:1 1 100%;min-width:0;white-space:normal;text-align:center}
}


/* 8. FICHA TECNICA ======================================================== */

/* Sin el padding-top de .seccion, que si no le pelea al margin-top negativo
   de .ficha-panel: uno empuja la tarjeta para abajo y el otro para arriba,
   y cuanto suba por encima del hero termina dependiendo del punto donde
   ambos clamp() se crucen en vez de ser siempre el mismo salto. */
#especificaciones{padding-top:0}

/* La tarjeta que junta el hero con la ficha tecnica: sube por encima del
   final de la banda azul (margin-top negativo) asi las dos secciones se
   leen como una sola pieza, con la banda de arriba como marco. La sombra
   alta es la que vende el efecto de "tarjeta flotando sobre el hero". */
.ficha-panel{
  position:relative;z-index:2;
  margin-top:clamp(-140px,-11vw,-92px);
  background:var(--superficie);
  border-radius:var(--radio);
  box-shadow:var(--sombra-alta);
  overflow:hidden;
}
.ficha-panel--simple{padding:clamp(28px,4vw,44px)}
.ficha-panel--simple .seccion__texto{max-width:60ch;margin-top:10px}
.ficha-panel--simple .ficha-hero__acciones{margin-top:clamp(20px,3vw,28px)}

.ficha-panel__cabecera{
  padding:clamp(24px,4vw,40px) clamp(24px,4vw,40px) clamp(20px,3vw,28px);
}
.ficha-panel__titulo{font-size:clamp(1.5rem,3vw,2rem);font-weight:800;letter-spacing:-.03em;margin:8px 0 0}

/* Variante clara de .destacados para vivir en la tarjeta blanca en vez de
   sobre la banda azul: misma estructura de grilla, otra paleta. Ademas vive
   ahora en la tercera columna de .ficha (ver .ficha__destacados), no en la
   cabecera: apilada en una sola columna angosta en vez de chips en fila. */
.destacados--panel{
  background:var(--borde);border-color:var(--borde);
  grid-template-columns:1fr;
  margin:0;
}
.destacados--panel .destacado{background:var(--superficie-alt)}
.destacados--panel dt{color:var(--tinta-suave)}
.destacados--panel dd{color:var(--tinta)}

/* Adentro de la tarjeta la ficha no necesita su propio marco: ya esta el de
   .ficha-panel. Sin esto quedaba una tarjeta dentro de la tarjeta. */
.ficha-panel .ficha{border:0;border-radius:0;box-shadow:none;border-top:1px solid var(--borde)}

/* Tres columnas: el nav de grupos (motor, transmision...), la tabla del
   grupo activo, y a la derecha los mismos datos "en numeros" (potencia,
   motor, transmision, peso) que antes iban arriba en la cabecera -- ahora
   siempre visibles al lado de la tabla en vez de haber que scrollear para
   volver a verlos. */
.ficha{
  display:grid;grid-template-columns:minmax(0,200px) minmax(0,1fr) minmax(180px,230px);
  border:1px solid var(--borde);border-radius:var(--radio);
  background:var(--superficie);box-shadow:var(--sombra);overflow:hidden;
}
.ficha__indice{border-right:1px solid var(--borde);background:var(--superficie-alt);padding:8px}
.ficha__destacados{
  border-left:1px solid var(--borde);background:var(--superficie-alt);
  padding:clamp(16px,3vw,24px);
}
.ficha__destacados .rotulo{margin:0 0 12px}
.ficha__solapa{
  display:block;width:100%;text-align:left;min-height:var(--toque);
  padding:11px 13px;border-radius:var(--radio);
  font-family:var(--display);font-weight:600;font-size:.84rem;
  color:var(--tinta-media);white-space:nowrap;
  transition:background .2s ease,color .2s ease;
}
.ficha__solapa:hover{background:var(--superficie);color:var(--tinta)}
.ficha__solapa[aria-selected="true"]{background:var(--marca);color:var(--sobre-marca)}

.ficha__panel{padding:clamp(16px,3vw,32px)}
.ficha__panel[hidden]{display:none}
.ficha__tabla{width:100%;border-collapse:collapse;font-size:.93rem}
.ficha__tabla tr{border-bottom:1px solid var(--borde)}
.ficha__tabla tr:last-child{border-bottom:0}
.ficha__tabla th{
  text-align:left;font-family:var(--display);font-weight:600;font-size:.78rem;
  color:var(--tinta-suave);padding:11px 14px 11px 0;width:46%;
}
.ficha__tabla td{padding:11px 0;font-weight:700;font-variant-numeric:tabular-nums;text-align:right}

@media (max-width:760px){
  .ficha{grid-template-columns:1fr}
  .ficha__indice{
    border-right:0;border-bottom:1px solid var(--borde);
    display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;
  }
  .ficha__indice::-webkit-scrollbar{display:none}
  .ficha__solapa{width:auto}
  /* En pantalla angosta la etiqueta va arriba y el valor abajo: si no, el
     dato largo empuja al nombre del campo y la fila se rompe. */
  .ficha__tabla th,.ficha__tabla td{display:block;width:auto;text-align:left;padding:0}
  .ficha__tabla th{padding-top:12px}
  .ficha__tabla td{padding-bottom:12px;font-size:1rem}
  .ficha__destacados{border-left:0;border-top:1px solid var(--borde)}
  .destacados--panel{grid-template-columns:repeat(auto-fit,minmax(104px,1fr))}
}


/* 8b. PAGINAS INTERNAS ==================================================== */
/* Empresa, Contacto y Clientes: encabezado corto, sin foto de relleno. La
   antigua portada con imagen de banco costaba medio mega y no decia nada. */

.pagina-hero{padding-block:clamp(28px,5vw,52px) clamp(32px,6vw,64px)}
.pagina-hero__titulo{font-size:clamp(2rem,5.4vw,3.4rem);font-weight:800;letter-spacing:-.035em;margin:12px 0 14px}
.pagina-hero__bajada{color:var(--noche-suave);max-width:58ch;font-size:1.04rem}

/* Variante con foto real de fondo (la usa Empresa, con la foto del taller de
   1982). Mismo criterio que el hero de la home: degrade mas oscuro donde va
   el texto. */
.pagina-hero--foto{position:relative;background-size:cover;background-position:center 35%}
/* La foto de 1982 ya es una imagen vieja y palida de por si: el degrade
   anterior llegaba a azul solido y se la comia entera, sobre todo en
   telefono. Se aclara bastante -- solo lo justo para que el texto siga
   legible -- y el text-shadow de abajo hace el resto del trabajo de
   contraste sin tapar la foto con una capa opaca. */
.pagina-hero--foto::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(100deg,rgba(0,27,54,.82) 0%,rgba(0,27,54,.5) 42%,rgba(0,27,54,.22) 100%);
}
.pagina-hero--foto>.envoltura{position:relative;z-index:1}
.pagina-hero--foto .pagina-hero__titulo,
.pagina-hero--foto .pagina-hero__bajada,
.pagina-hero--foto .pagina-hero__pie{text-shadow:0 2px 14px rgba(0,10,22,.6)}
@media (max-width:760px){
  .pagina-hero--foto::before{background:linear-gradient(180deg,rgba(0,27,54,.62) 0%,rgba(0,27,54,.3) 55%,rgba(0,27,54,.58) 100%)}
}

/* Variante sin foto: la marca como adorno tipografico gigante, mismo
   recurso que el "404" de la pagina de error y el numero de HP de la
   ficha de tractor (.ficha-hero__hp) -- texto transparente clip-eado en
   degrade, nunca el dato principal, recortado por overflow:hidden asi no
   empuja el layout. El texto sale de data-marca-fondo para no repetir la
   regla si se reusa en otra pagina.

   El top va igual al padding-top de .pagina-hero (mismo clamp): si el
   adorno arranca mas arriba que el rotulo/titulo real, en telefono queda un
   pedazo asomando solo debajo del cabezal, sin nada que lo tape -- ver el
   mismo ajuste en .ficha-hero__hp. */
.pagina-hero--marca{position:relative;overflow:hidden}
.pagina-hero--marca::before{
  content:attr(data-marca-fondo);
  position:absolute;top:clamp(28px,5vw,52px);right:clamp(-40px,-2vw,-10px);
  font-family:var(--display);font-weight:800;line-height:.8;white-space:nowrap;
  font-size:clamp(3.2rem,10vw,7.5rem);letter-spacing:-.04em;
  color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.08);
  background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,0));
  -webkit-background-clip:text;background-clip:text;
  pointer-events:none;user-select:none;z-index:0;
}
.pagina-hero--marca>.envoltura{position:relative;z-index:1}

/* Pagina 404: antes era standalone (ni header ni menu), porque el 404 "de
   fabrica" de CodeIgniter se dispara antes de que exista un controlador
   real y no puede usar el layout (ver controllers/Errors.php). Con el
   404_override apuntando a un controlador propio, esta pagina ya lleva el
   cabezal y el pie de siempre; esta seccion es solo el bloque central. */
.pagina-perdida{
  min-height:calc(100svh - var(--cabezal-alto) - 340px);
  display:grid;place-items:center;position:relative;overflow:hidden;
}
.pagina-perdida::before{
  content:'404';position:absolute;right:-.06em;bottom:-.2em;
  font:800 clamp(9rem,26vw,26rem)/.8 var(--display);letter-spacing:-.08em;
  color:rgba(255,255,255,.06);pointer-events:none;user-select:none;
}
.pagina-perdida__caja{width:min(100%,660px);position:relative;z-index:1}
.pagina-perdida h1{font-size:clamp(2.2rem,6vw,4.4rem);margin:12px 0 18px;max-width:11ch}
.pagina-perdida p:not(.rotulo){color:var(--noche-suave);font-size:clamp(1rem,2vw,1.15rem);max-width:45ch}
.pagina-perdida__acciones{display:flex;flex-wrap:wrap;gap:10px;margin-top:32px}

/* --- Historia: es una secuencia real, por eso lleva años --- */

/* La foto real de 1982 (restaurada de la original, que estaba muy velada)
   acompaña la linea de tiempo entera, no solo su primer hito: va sticky al
   lado, como una foto real prendida con un marco, en vez de forzarla como
   banner de la pagina entera o perderla arriba del todo a los dos hitos. */
.historia-grilla{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,360px);
  gap:clamp(24px,4vw,52px);align-items:start;
}
@media (max-width:860px){.historia-grilla{grid-template-columns:minmax(0,1fr)}}

.historia__fotos-sticky{
  position:sticky;top:calc(var(--cabezal-alto) + 24px);
}
@media (max-width:860px){
  .historia__fotos-sticky{position:static}
}

.historia__foto{
  margin:0;background:var(--superficie);padding:14px 14px 36px;
  border-radius:3px;transform:rotate(2deg);
  box-shadow:0 24px 55px -18px rgba(0,0,0,.35);
}
.historia__foto img{display:block;width:100%;height:auto;border-radius:1px}
.historia__foto figcaption{
  margin-top:12px;text-align:center;
  font-family:var(--display);font-style:italic;font-size:.78rem;color:var(--tinta-media);
}
@media (max-width:860px){
  .historia__foto{max-width:300px;margin:0 auto clamp(24px,4vw,32px)}
}

/* La foto de hoy va debajo de la de 1982, en el mismo riel: mismo marco tipo
   polaroid, rotada para el otro lado, asi las dos leen como fotos reales
   pegadas en la pared y no como un par simetrico. */
.historia__foto--hoy{
  transform:rotate(-1.5deg);
  margin-top:clamp(28px,4vw,40px);
}
@media (max-width:860px){
  .historia__foto--hoy{margin:clamp(20px,4vw,28px) auto 0}
}

.historia{display:grid;gap:0;margin-top:clamp(20px,3vw,32px)}
.hito{
  display:grid;grid-template-columns:96px minmax(0,1fr);
  gap:clamp(14px,3vw,32px);
  padding:clamp(18px,3vw,26px) 0;
  border-top:1px solid var(--borde);
}
.hito:last-child{border-bottom:1px solid var(--borde)}
.hito__anio{
  font-family:var(--display);font-weight:800;font-size:clamp(1.3rem,3vw,1.9rem);
  color:var(--marca);letter-spacing:-.02em;font-variant-numeric:tabular-nums;
  line-height:1.1;
}
.hito h3{font-size:1.08rem;margin-bottom:6px}
.hito p{color:var(--tinta-media);font-size:.98rem;max-width:62ch}
@media (max-width:600px){
  .hito{grid-template-columns:minmax(0,1fr);gap:4px}
}

.firma-fundador{
  margin-top:clamp(26px,4vw,40px);padding-top:20px;
  border-top:2px solid var(--tinta);
}
.firma-fundador b{font-family:var(--display);font-weight:700;font-size:1.05rem;display:block}
.firma-fundador span{color:var(--tinta-suave);font-size:.9rem}

/* --- Formulario --- */
.contacto-grilla{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(24px,4vw,52px);align-items:start}
@media (max-width:820px){.contacto-grilla{grid-template-columns:minmax(0,1fr)}}

/* El formulario es mas corto que la columna de datos + mapa: sin esto,
   scrolleas la mitad de la pagina viendo un formulario ya lleno y aire
   vacio al lado. Sticky lo mantiene a la vista mientras baja el resto. */
.contacto-grilla__fijo{position:sticky;top:calc(var(--cabezal-alto) + 24px)}
@media (max-width:820px){.contacto-grilla__fijo{position:static}}

.formulario{
  background:var(--superficie);border:1px solid var(--borde);border-radius:var(--radio);
  box-shadow:var(--sombra);padding:clamp(20px,3.5vw,36px);
  display:grid;gap:16px;
}
.campo{display:grid;gap:6px}
.campo label{font-family:var(--display);font-weight:600;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--tinta-suave)}
.campo input,.campo textarea{
  font:inherit;font-size:1rem;
  color:var(--tinta);background:var(--superficie-alt);
  border:1px solid var(--borde-vivo);border-radius:var(--radio);
  padding:12px 14px;min-height:var(--toque);width:100%;
  transition:border-color .2s ease,background .2s ease;
}
.campo textarea{min-height:130px;resize:vertical}
.campo input:focus,.campo textarea:focus{outline:none;border-color:var(--marca-viva);background:var(--superficie)}
.campo input::placeholder,.campo textarea::placeholder{color:var(--tinta-suave);opacity:.75}
.campo__error{color:#C0392B;font-size:.84rem;font-weight:700}
@media (min-width:620px){.campo-par{display:grid;grid-template-columns:1fr 1fr;gap:16px}}

.enviar{
  min-height:var(--toque);
  background:var(--marca);color:var(--sobre-marca);
  font-family:var(--display);font-weight:700;font-size:.92rem;
  border-radius:var(--radio);padding:13px 22px;
  transition:background .2s ease,transform .2s ease;
}
.enviar:hover{background:var(--marca-viva);transform:translateY(-1px)}

.aviso{
  border-radius:var(--radio);padding:14px 16px;
  font-size:.94rem;border:1px solid;
  display:flex;gap:10px;align-items:flex-start;
}
.aviso--ok{background:#EAF7EF;border-color:#B7E0C6;color:#12633A}
.aviso--mal{background:#FDF0EF;border-color:#F0C6C6;color:#9B2C22}

.mapa{
  width:100%;aspect-ratio:4/3;border:1px solid var(--borde);border-radius:var(--radio);
  background:var(--superficie-alt);display:block;
}
/* Marcador del mapa: ocupa el mismo lugar que el iframe hasta que lo piden,
   asi al cargarlo no se mueve nada de la pagina. */
.mapa-pedido{
  width:100%;aspect-ratio:4/3;
  border:1px dashed var(--borde-vivo);border-radius:var(--radio);
  background:var(--superficie-alt);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;text-align:center;padding:20px;
}
.mapa-pedido__texto{color:var(--tinta-media);font-size:.95rem;line-height:1.5}
.mapa-pedido__texto b{font-family:var(--display);color:var(--tinta);font-size:1.05rem}
.mapa-pedido__externo{
  font-size:.85rem;color:var(--tinta-suave);text-decoration:none;
  min-height:var(--toque);display:flex;align-items:center;
}
.mapa-pedido__externo:hover{color:var(--marca);text-decoration:underline}

/* --- Galeria de clientes --- */
/* Dos columnas ya en telefono: con una sola, 63 entregas son 30.000 px de
   scroll. A dos, la foto sigue leyendose y se toca para agrandar. */
.galeria{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));
  gap:clamp(8px,1.4vw,14px);
}
@media (min-width:700px){
  .galeria{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
}
.galeria button{
  display:block;position:relative;padding:0;width:100%;aspect-ratio:3/4;
  background:var(--placa);border:1px solid var(--borde);border-radius:var(--radio);
  overflow:hidden;
}
.galeria button:focus-visible{outline-offset:4px}
.galeria img{width:100%;height:100%;object-fit:cover;transition:transform .5s cubic-bezier(.22,1,.36,1)}
.galeria button:hover img{transform:scale(1.05)}
/* Se ve mientras la miniatura todavia no bajo (loading="lazy"); sitio.js le
   suma "lista" apenas el <img> termina de cargar -- mismo criterio que
   .pieza__esqueleto en las tarjetas del catalogo. */
.pieza__esqueleto,.galeria__esqueleto{position:absolute;inset:0;border-radius:0;transition:opacity .3s ease}
.pieza__esqueleto.lista,.galeria__esqueleto.lista{opacity:0;pointer-events:none}

/* Visor: <dialog> nativo, que ya trae Escape y atrapa el foco solo */
.visor{
  border:0;padding:0;background:transparent;
  max-width:min(94vw,1000px);max-height:92vh;
}
.visor::backdrop{background:rgba(0,27,54,.86)}
.visor__marco{position:relative;display:flex;align-items:center;justify-content:center}
.visor__marco--cargando{min-height:min(60vh,520px);width:min(94vw,760px)}
.visor img{max-width:100%;max-height:88vh;width:auto;height:auto;margin-inline:auto;border-radius:var(--radio)}
.visor__esqueleto{position:absolute;inset:0;border-radius:var(--radio);transition:opacity .3s ease}
.visor__esqueleto.lista{opacity:0;pointer-events:none}
.visor__contador{margin:10px 0 0;text-align:center;color:rgba(255,255,255,.75);font-size:.85rem}
.visor__cerrar,.visor__nav{
  position:fixed;
  width:var(--toque);height:var(--toque);
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.12);color:#fff;border-radius:var(--radio);
}
.visor__cerrar:hover,.visor__nav:hover{background:rgba(255,255,255,.24)}
.visor__cerrar svg,.visor__nav svg{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none;stroke-linecap:round}
.visor__cerrar{top:14px;right:14px}
.visor__nav{top:50%;transform:translateY(-50%)}
.visor__nav--antes{left:14px}
.visor__nav--despues{right:14px}
@media (max-width:640px){
  /* En telefono el visor ya ocupa casi todo el ancho: las flechas a los
     costados de la foto no entran sin superponerse, bajan al pie. */
  .visor__nav{top:auto;bottom:14px;transform:none}
}


/* 9. BLOQUES ============================================================== */

/* Marca de agua LANSU. Se superpone por CSS, no horneada en las 13 fotos:
   mismo principio que --placa, asi que ajustar tamano u opacidad es una
   linea de CSS y no correr un script sobre el catalogo entero. Las vistas
   (tarjeta-tractor, tractor) agregan .marca-lansu al contenedor de la foto
   cuando el tractor es LANSU. Ver tools/preparar-marca-agua-lansu.mjs. */
.pieza__foto.marca-lansu::after,
.ficha-hero__foto.marca-lansu::after{
  content:"";
  position:absolute;right:10px;bottom:10px;
  width:clamp(64px,28%,200px);aspect-ratio:2109/489;
  background:url('../images/marcas/lansu-marca-agua.png') no-repeat center/contain;
  opacity:.55;
  pointer-events:none;
}

.motivos{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:1px;background:var(--noche-borde);border:1px solid var(--noche-borde)}
.motivo{background:var(--noche);padding:clamp(20px,3vw,34px)}
.motivo__rotulo{font-family:var(--display);font-weight:800;font-size:.72rem;color:var(--noche-suave);letter-spacing:.16em}
.motivo h3{font-size:1.14rem;margin:12px 0 10px;font-weight:700}
.motivo p{color:var(--noche-suave);font-size:.94rem}

/* Franja de logos de fabricante: las marcas de las que somos importador
   directo (no confundir con la marca de agua LANSU de arriba, que es el
   fabricante de los tractores). Van sobre superficie clara siempre -- son
   logos oscuros y a color, sobre --noche no se leen (ver negocio.php). */
.franja-marcas{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:center;
  gap:clamp(28px,5vw,56px);
  list-style:none;margin:0;padding:0;
}
/* Cada logo entra en una caja del mismo tamano (alto Y ancho), centrado
   adentro sin estirarse: los fabricantes mandan wordmarks con relaciones de
   aspecto muy distintas (un escudo+texto no mide igual que un texto solo),
   y limitar solo por alto dejaba los mas anchos (Saillong, YTO) leyendose
   mas grandes que el resto en la fila. */
.franja-marcas__logo{
  display:flex;align-items:center;justify-content:center;
  height:clamp(30px,4vw,44px);width:clamp(90px,11vw,140px);
}
.franja-marcas__logo img{max-height:100%;max-width:100%;width:auto;height:auto}
/* Fallback para las marcas de las que todavia no tenemos el logo recortado
   (ver negocio.php: "las marcas que no figuran aca se siguen mostrando por
   su nombre" -- no se inventa un logo que no nos dieron). */
.franja-marcas__nombre{
  border:1px solid var(--borde-vivo);border-radius:var(--radio);
  padding:8px 14px;font-family:var(--display);font-weight:600;font-size:.82rem;
  color:var(--tinta-media);
}

.contacto{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:clamp(18px,3vw,34px)}
.dato{border-top:2px solid var(--tinta);padding-top:14px}
.dato h3{font-family:var(--display);font-weight:700;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;margin-bottom:10px}
.dato p,.dato a{color:var(--tinta-media);font-size:.98rem;margin:0 0 4px;text-decoration:none;display:block}
.dato a:hover{color:var(--marca);text-decoration:underline}
/* Los telefonos y el mapa se tocan con el pulgar: en telefono necesitan
   alto de dedo, no de puntero. */
@media (max-width:880px){
  .dato a{min-height:var(--toque);display:flex;align-items:center}
}
.dato .grande{font-family:var(--display);font-weight:700;font-size:1.1rem;color:var(--tinta)}

.cierre{
  margin-top:clamp(34px,6vw,68px);
  border:1px solid var(--borde);border-radius:var(--radio);
  background:var(--superficie);box-shadow:var(--sombra);
  padding:clamp(22px,4vw,44px);
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;
}
.cierre h3{font-size:clamp(1.25rem,2.6vw,1.75rem);font-weight:800;letter-spacing:-.02em;max-width:22ch}
.cierre p{color:var(--tinta-media);font-size:.95rem;margin-top:8px;max-width:42ch}
@media (max-width:560px){.cierre .wa{width:100%}}

.pie{background:var(--noche);color:var(--noche-suave);padding-block:34px;font-size:.83rem}
.pie__fila{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;align-items:center}
.pie a{color:var(--noche-suave)}
.pie a:hover{color:var(--noche-tinta)}
.pie__marca{display:grid;gap:10px}
.pie__marca img{width:150px;height:auto}


/* 9b. LINEAS DE NEGOCIO =================================================== */
/* Montacargas, implementos y el resto de la maquinaria: no tienen fichas por
   unidad como los tractores (ver Lineas_model), asi que la tarjeta vende la
   categoria entera -- icono, texto y un empujon a WhatsApp -- en vez de una
   foto de una unidad puntual que todavia no esta cargada. */

/* Contenedor mas ancho que .envoltura (1180px), solo para esta grilla: con
   el ancho normal, forzar 5 columnas quedaba apretado. Se usa nada mas en
   las dos secciones que muestran las 5 lineas (equipos.php y el
   home-surtido de inicio.php), no toca el resto del sitio. */
.envoltura--lineas{max-width:1600px}

.grilla-lineas{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:clamp(14px,2vw,24px)}
/* Son 5 lineas (ver Lineas_model): con el contenedor ancho de arriba, a
   partir de esta resolucion ya entran comodas en una sola fila. Por debajo,
   mejor dejar que auto-fill las acomode en 2 o 3 columnas -- forzar 5 en
   una pantalla angosta las hubiera dejado apretadas igual. */
@media (min-width:1240px){.grilla-lineas{grid-template-columns:repeat(5,1fr)}}
/* La seccion "Otras lineas" de equipo.php siempre muestra 4 (las 5 menos la
   actual) dentro del .envoltura angosto, no el --lineas ancho de arriba: si
   se forzaban 5 columnas quedaba una columna fantasma vacia y las 4 tarjetas
   reales comprimidas. Dejamos que auto-fill decida tambien en pantallas
   grandes -- con 4 tarjetas de min 240px entran comodas igual. */
@media (min-width:1240px){.grilla-lineas--otras{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}}

.linea{
  position:relative;
  display:flex;flex-direction:column;gap:16px;
  background:var(--superficie);
  border:1px solid var(--borde);border-radius:var(--radio);
  box-shadow:var(--sombra);
  padding:clamp(22px,3vw,30px);
  transition:border-color .2s ease,transform .35s cubic-bezier(.22,1,.36,1),box-shadow .35s ease;
}
.linea:hover{
  border-color:var(--borde-vivo);
  transform:translateY(-4px);
  box-shadow:var(--sombra-alta);
}
.home-surtido .linea{border-radius:0;box-shadow:none;border-color:var(--borde-vivo)}
.home-surtido .linea:hover{box-shadow:var(--sombra-media)}

/* Medallon redondo con el icono en azul de marca. Es lo unico que distingue
   una linea de otra a primera vista -- estas tarjetas no tienen foto todavia
   (ver Lineas_model) -- asi que tiene que pesar de verdad, no ser un icono
   chiquito perdido arriba. */
.linea__icono{
  width:64px;height:64px;flex:none;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  background:var(--superficie-alt);
  border:1px solid var(--borde-vivo);
  color:var(--marca);
  transition:background .25s ease,color .25s ease,border-color .25s ease;
}
.linea__icono svg{width:30px;height:30px}
.linea:hover .linea__icono{
  background:var(--marca);border-color:var(--marca);color:var(--sobre-marca);
}

.linea__cuerpo{display:flex;flex-direction:column;gap:8px;flex:1}
.linea__nombre{font-family:var(--display);font-weight:700;font-size:1.12rem;letter-spacing:-.015em}
.linea__nombre a{color:inherit;text-decoration:none}
/* Igual que en la tarjeta de tractor: se toca la tarjeta entera, no el
   titulo. El boton "Ver mas" queda encima por su z-index. */
.linea__nombre a::after{content:'';position:absolute;inset:0;z-index:1}
.linea__nombre a:hover{color:var(--marca)}
.linea__resumen{color:var(--tinta-media);font-size:.94rem;line-height:1.6;flex:1}
/* Version compacta de .linea-lista para la tarjeta de la home/equipos: la
   de la ficha de una sola linea (equipo.php) tiene mas aire porque no
   compite con nada mas en la pagina; aca conviven cinco tarjetas seguidas. */
.linea-lista--tarjeta{margin-top:0;gap:6px;font-size:.86rem}
.linea-lista--tarjeta li{color:var(--tinta-suave);line-height:1.4}
.linea__cuerpo .boton-linea{align-self:flex-start;margin-top:4px;position:relative;z-index:2}

.equipos-tractores{margin-top:clamp(28px,4vw,44px);font-size:.98rem;color:var(--tinta-media)}
.equipos-tractores a{color:var(--marca);font-weight:600;text-decoration:none}
.equipos-tractores a:hover{text-decoration:underline}

/* Franja de fotos reales de clientes en la home: mismo origen que /clientes
   (getImages), pero mas grandes y solo unas pocas -- es una vidriera, no la
   galeria completa. */
.franja-clientes{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(8px,1.4vw,14px)}
.franja-clientes__foto{
  display:block;aspect-ratio:4/3;
  border:1px solid var(--borde);border-radius:var(--radio);overflow:hidden;
}
.franja-clientes__foto img{width:100%;height:100%;object-fit:cover;transition:transform .5s cubic-bezier(.22,1,.36,1)}
.franja-clientes__foto:hover img{transform:scale(1.05)}
@media (max-width:700px){.franja-clientes{grid-template-columns:repeat(2,1fr)}}

/* Ficha de una linea: mismo layout que la ficha de tractor, pero con un
   panel de icono en vez de una foto que no existe (cosechadoras de uva y
   maquinaria agricola e industrial: ver Lineas_model, no hay ni una foto
   propia todavia y no se inventa una de stock). El resplandor y la trama de
   puntos son la misma idea que .ficha-hero__resplandor -- rellenan el mismo
   bloque de 4:3 que ocupa una foto en las otras lineas para que no se lea
   como un hueco vacio al lado de las que si tienen foto. */
.linea-icono-grande{
  position:relative;
  margin:0;overflow:hidden;
  background:var(--noche-alt);
  border:1px solid var(--noche-borde);
  aspect-ratio:4/3;
  display:flex;align-items:center;justify-content:center;
}
.linea-icono-grande::before{
  content:'';position:absolute;inset:0;
  background-image:
    radial-gradient(closest-side,rgba(255,255,255,.14),rgba(255,255,255,0) 70%),
    radial-gradient(rgba(255,255,255,.12) 1px,transparent 1px);
  background-size:100% 100%,24px 24px;
  background-position:center;
}
.linea-icono-grande__medallon{
  position:relative;
  width:clamp(88px,18vw,120px);height:clamp(88px,18vw,120px);
  border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.06);
  border:1px solid var(--noche-borde-vivo);
}
.linea-icono-grande svg{width:40%;max-width:48px;height:auto;color:var(--noche-tinta);opacity:.95}

/* Cuando la linea si tiene fotos reales de entrega (montacargas,
   miniexcavadoras, implementos), este panel reemplaza al icono. */
.linea-foto-grande{
  margin:0;aspect-ratio:4/3;overflow:hidden;
  border:1px solid var(--noche-borde);border-radius:1px;
}
.linea-foto-grande img{width:100%;height:100%;object-fit:cover;display:block}

.linea-lista{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:10px}
.linea-lista li{
  position:relative;padding-left:22px;
  color:var(--noche-suave);font-size:.96rem;line-height:1.5;
}
.linea-lista li::before{
  content:'';position:absolute;left:0;top:.55em;
  width:8px;height:8px;border-radius:50%;
  background:var(--marca-viva);
}

@media (max-width:860px){
  .linea-icono-grande,.linea-foto-grande{order:-1;margin-inline:calc(var(--canal) * -1);border-inline:0}
}


/* 10. BARRA MOVIL ========================================================= */
/* Dos acciones fijas al alcance del pulgar. El chatbot ya sabe convivir con
   esta barra: busca .tr-barra-movil y se sube por encima. */

.tr-barra-movil{
  display:none;
  position:fixed;left:0;right:0;bottom:0;z-index:55;
  background:var(--noche);
  border-top:1px solid var(--noche-borde);
  padding:8px var(--canal) calc(8px + env(safe-area-inset-bottom));
  gap:8px;
}
.tr-barra-movil>*{flex:1}
.tr-barra-movil .boton-linea{color:var(--noche-tinta);border-color:var(--noche-borde-vivo)}

@media (max-width:880px){
  :root{--barra-movil-alto:70px}
  .tr-barra-movil{display:flex}
  #chatbotBurbuja{display:none}
}


/* 11. MOVIMIENTO ========================================================== */

.revela{opacity:0;transform:translateY(18px);transition:opacity .7s var(--entra),transform .7s var(--entra)}
.revela.vista{opacity:1;transform:none}

@keyframes sube{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
.entra{animation:sube .8s var(--entra) both}
.entra--1{animation-delay:.05s}
.entra--2{animation-delay:.14s}
.entra--3{animation-delay:.23s}
.entra--4{animation-delay:.34s}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;animation-delay:0 !important;
    transition-duration:.001ms !important;scroll-behavior:auto !important;
  }
  .revela{opacity:1;transform:none}
  .cortina-carga,.cortina-ruta{display:none}
  .esqueleto::after{animation:none}
}
