/* Mexfrut — estilos compartidos por todas las páginas del sitio:
   resets, tipografía, header + top bar + menú móvil, submenús, botones,
   animaciones de entrada (reveal), footer y breakpoints responsivos comunes. */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:#FCFBF7;color:#1F2614;font-family:'Inter',system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4{font-family:'Bricolage Grotesque','Inter',sans-serif;margin:0;letter-spacing:-.02em;text-wrap:balance}
p{margin:0;text-wrap:pretty}
button{font-family:inherit;cursor:pointer}
a{color:inherit;text-decoration:none}
@keyframes mf-fa{0%,100%{transform:translateY(0)}50%{transform:translateY(-16px)}}
@keyframes mf-fb{0%,100%{transform:translateY(0)}50%{transform:translateY(-23px)}}
@keyframes mf-rise{from{transform:translateY(24px)}to{transform:none}}
@keyframes mf-avo-live{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-15px) rotate(1.6deg)}}
.mf-avo{opacity:0;transform:translateY(90px) scale(.6) rotate(-12deg);transform-origin:50% 70%}
[data-shown] .mf-avo{animation:mf-avo-in 1.2s cubic-bezier(.18,.75,.25,1) both}
[data-shown] .mf-avo-inner{animation:mf-avo-live 6s ease-in-out infinite 1.2s}
/* Instruccion 08: los keyframes de entrada del hero (.mf-avo) vivian solo en home.css, pero la regla
   que oculta .mf-avo (opacity:0) es compartida -> en hass y congelados la animacion nunca corria y el
   hero quedaba invisible. Los keyframes y el fallback de reduced-motion deben ser compartidos. */
@keyframes mf-avo-in{0%{opacity:0;transform:translateY(90px) scale(.6) rotate(-12deg)}55%{opacity:1;transform:translateY(-14px) scale(1.05) rotate(3deg)}75%{transform:translateY(4px) scale(.99) rotate(-1.5deg)}100%{opacity:1;transform:translateY(0) scale(1) rotate(0)}}
@media (prefers-reduced-motion:reduce){.mf-avo,.mf-avo-inner,.mf-avo-halo{animation:none;opacity:1;transform:none}}
@keyframes mf-ping{0%{transform:scale(.6);opacity:.85}70%,100%{transform:scale(2.6);opacity:0}}
@keyframes mf-orig{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.35);opacity:.6}}
/* Instruccion 11: @keyframes mf-flow vivia solo en home.css -> el mapa de mercados quedaba
   congelado en las demas paginas que lo usan (ej. Aguacate Hass). Keyframes junto a su regla. */
@keyframes mf-flow{from{stroke-dashoffset:1000}to{stroke-dashoffset:0}}
.mf-flow{animation:mf-flow 3s linear infinite}
.mf-ping{transform-box:fill-box;transform-origin:center;animation:mf-ping 3s ease-out infinite}
.mf-orig{transform-box:fill-box;transform-origin:center;animation:mf-orig 2.2s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.mf-flow,.mf-ping,.mf-orig{animation:none}.mf-flow{stroke-dashoffset:0;stroke-dasharray:none;opacity:.7}}
@media (max-width:400px){
    .mf-brandlogo{height:34px !important}
    .mf-collab-div{height:24px !important}
    .mf-collab-cap{display:none !important}
    .mf-collab-logo{height:12px !important}
  }
/* Instruccion 17: sistema de reveals sin "brinco".
   - El estado oculto se aplica ANTES del primer pintado: un script inline de 1 linea en el <head>
     agrega la clase js a <html>; solo bajo esa clase existe el estado oculto (sin JS todo se ve).
   - Antes, el estado oculto vivia solo en home.css y llegaba tarde via data-anim-on: en las internas
     el elemento se veia en su posicion final, brincaba 24px abajo (mf-rise both) y volvia a subir.
   - Los elementos visibles en el primer viewport se marcan data-instant (aparicion inmediata,
     sin translate) para que el above-the-fold no baile. */
html.js [data-reveal]:not([data-shown]){opacity:0;transform:translateY(24px)}
[data-anim-on] [data-reveal][data-shown]{opacity:1;animation:mf-rise .7s cubic-bezier(.22,.61,.36,1) both}
[data-reveal][data-instant]{animation:none !important;opacity:1 !important;transform:none !important}
@media (prefers-reduced-motion: reduce){html.js [data-reveal],[data-anim-on] [data-reveal]{opacity:1 !important;transform:none !important;animation:none !important}}
/* Instruccion 07: regla base de .mf-nav (antes solo en home.css -> los <button> MEXFRUT/PRODUCTOS
   caian al gris ButtonFace del navegador en las 11 internas). Resetea el fondo y da el mismo
   subrayado verde animado del index a todo el sitio. */
.mf-nav{background-color:transparent;background-image:linear-gradient(#98C23D,#98C23D);background-repeat:no-repeat;background-position:13px calc(100% - 9px);background-size:0 2px;transition:background-size .28s cubic-bezier(.4,0,.2,1);cursor:pointer}
.mf-nav:hover{background-size:calc(100% - 26px) 2px}
.mf-btn:hover{transform:translateY(-3px)}
.mf-btn:active{transform:translateY(-1px);transition-duration:.08s}
.mf-btn::after{content:"";position:absolute;top:0;left:-130%;width:55%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.38),transparent);transform:skewX(-18deg);pointer-events:none}
.mf-btn:hover::after{animation:mf-sheen .7s ease}
@keyframes mf-sheen{to{left:140%}}
.mf-arrow{display:inline-block;transition:transform .28s cubic-bezier(.34,1.4,.5,1)}
.mf-btn:hover .mf-arrow{transform:translateX(5px)}
.mf-sub:hover{background:rgba(152,194,61,.16);color:#2E3D14;padding-left:20px}
.mf-flink .mf-fdot{display:inline-block;width:0;opacity:0;overflow:hidden;color:#98C23D;transform:translateX(-4px);transition:width .25s ease,opacity .25s ease,transform .25s ease}
.mf-flink:hover .mf-fdot{width:16px;opacity:1;transform:translateX(0)}
.mf-cline{display:inline-flex;align-items:center;gap:11px;color:rgba(252,251,247,.7);transition:color .2s ease}
.mf-cico{width:30px;height:30px;border-radius:8px;background:rgba(252,251,247,.06);border:1px solid rgba(252,251,247,.14);display:flex;align-items:center;justify-content:center;color:#bcd47a;flex:none;transition:background .2s ease,border-color .2s ease}
.mf-cline:hover .mf-cico{background:rgba(152,194,61,.16);border-color:rgba(152,194,61,.4)}

/* --- comportamiento estático (sustituye a la capa de React) --- */
[hidden]{display:none !important}
.mf-has-dd{position:relative}
.mf-has-dd > .mf-dd{display:none}
.mf-has-dd:hover > .mf-dd, .mf-has-dd:focus-within > .mf-dd{display:block}
#mf-nav{margin-left:auto;display:flex;align-items:center;gap:4px;font-size:13.5px;font-weight:600;letter-spacing:.01em}
#mf-burger{display:none;margin-left:auto;border:0;background:none;flex-direction:column;gap:5px;padding:8px}
@media (max-width:919px){#mf-nav{display:none !important}#mf-burger{display:flex !important}}

/* Instruccion 02: ocultar selector EN hasta construir /en/ */
.mf-hidden{display:none!important}

/* Instruccion 03: banner de cookies (hover y movil; base inline en js/cookies.js) */
.mf-ck-aceptar:hover{background:#D8421E}
.mf-ck-rechazar:hover{background:rgba(252,251,247,.12)}
@media (max-width:600px){.mf-cookies{left:12px !important;right:12px !important;bottom:92px !important;width:auto !important;max-width:none !important}}

/* Instruccion 06: acordeon FAQ compartido (mismo patron del index) y landmark main */
main{display:block}
details.mf-faq > summary{list-style:none;cursor:pointer}
details.mf-faq > summary::-webkit-details-marker{display:none}
.mf-faq-ico{transition:transform .25s ease}
details.mf-faq[open] .mf-faq-ico{transform:rotate(45deg)}

/* Instruccion 12: colapso movil de los splits compartidos. Las reglas de .r-2 y .r-2col solo
   existian en home.css (index) -> en las demas paginas los splits imagen/texto conservaban
   2 columnas en movil (ej. "Del huerto al destino" en Empresa). Breakpoint del sitio: 900px. */
@media (max-width:900px){
  .r-2{grid-template-columns:1fr !important;gap:40px !important;align-items:start !important}
  .r-2col{grid-template-columns:1fr !important}
}
/* Instruccion 12 (revision humana): el nivel telefono (<=560px) de index — tarjetas y footer a
   1 columna + padding 20px — vivia solo en home.css. Se replica compartido para que Mision/Vision/
   Valores, Centros de distribucion y el footer se vean como en index. Selectores doblados a
   proposito: los CSS por pagina cargan despues con reglas !important de 2 columnas (breakpoint 900)
   y a igual especificidad ganarian por orden. */
@media (max-width:560px){
  .r-4.r-4,.r-3.r-3,.r-2col.r-2col{grid-template-columns:1fr !important}
  .r-foot.r-foot{grid-template-columns:1fr !important}
  section[style],footer[style]{padding-left:20px !important;padding-right:20px !important}
  .r-hero-pad{padding-left:20px !important;padding-right:20px !important}
}

/* Instruccion 16: filas de botones del cross-sell. El contenedor tenia flex:none dentro de un
   flex padre -> su ancho se volvia max-content (~640px) y los botones se cortaban en movil.
   A <=760px (la fila completa ya no cabe) los botones se apilan a ancho completo. */
@media (max-width:760px){
  .mf-btnrow{flex:1 1 100% !important;flex-direction:column;align-items:stretch}
  .mf-btnrow > a{justify-content:center}
}

/* ============================================================================
   Instruccion 18 — COMPONENTES COMPARTIDOS consolidados. Antes, estas reglas
   vivian repetidas en los CSS por pagina (o solo en home.css, dejando al
   componente roto en las demas). Una sola fuente de verdad desde aqui.
   ============================================================================ */

/* === Componente: header — nivel movil (<=920px) === */
@media (max-width:920px){
  .mf-topbar{display:none !important}
  .mf-brandlogo{height:40px !important}
  .mf-collab-div{height:30px !important}
  .mf-collab-cap{font-size:7px !important;letter-spacing:.12em !important}
  .mf-collab-logo{height:13px !important}
  .r-hero-pad{padding-top:96px !important}
}

/* === Componente: botones y enlaces — bases de transicion (el hover ya era compartido) === */
.mf-btn{position:relative;overflow:hidden;transition:transform .28s cubic-bezier(.34,1.4,.5,1),box-shadow .28s ease,background-color .25s ease}
.mf-sub{transition:background-color .2s ease,color .2s ease,padding-left .2s ease}
.mf-flink{display:inline-flex;align-items:center;gap:0;color:rgba(252,251,247,.7);transition:color .2s ease}

/* === Componente: fila legal del footer (<=1199px) === */
@media (max-width:1199px){
  .mf-legal{flex-direction:column !important;justify-content:center !important;text-align:center !important;gap:14px !important}
  .mf-legal .mf-legal-sep{display:none !important}
  .mf-legal .mf-legal-links{display:flex !important;flex-wrap:wrap;justify-content:center;gap:8px 16px}
  .mf-legal .mf-legal-by{margin-left:0 !important;justify-content:center}
}

/* === Componente: boton de ficha tecnica en telefono (hass y congelados) === */
@media (max-width:560px){
  .hx-dlbtn,.hx-dlbtn2{white-space:normal !important;max-width:100%;box-sizing:border-box;justify-content:center;text-align:center;padding:14px 20px !important;font-size:14.5px !important}
}

/* === Grids compartidos — nivel tablet (<=900px) === */
@media (max-width:900px){
  .r-4{grid-template-columns:repeat(2,1fr) !important}
  .r-foot{grid-template-columns:repeat(2,1fr) !important;gap:32px !important}
  .hx-tiles{grid-template-columns:repeat(2,1fr) !important}
  .hx-cals{grid-template-columns:repeat(3,1fr) !important}
  .hx-transit{grid-template-columns:repeat(2,1fr) !important}
}

/* === Componente: icono circular de datos de contacto === */
.ct-ico{width:42px;height:42px;border-radius:11px;background:#F1F5E6;display:flex;align-items:center;justify-content:center;flex:none;color:#5E7D24}

/* === Componente: mapa de regiones de producto (mg-mapwrap) === */
.mg-mapwrap{position:relative;width:100%}
.mg-mapwrap::before{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:112%;height:126%;border-radius:50%;background:radial-gradient(closest-side,rgba(255,255,255,.9) 0%,rgba(255,255,255,.72) 45%,rgba(255,255,255,.28) 72%,transparent 100%);pointer-events:none}

/* === Componente: fichas de producto limon/berries (lp-*) — orden original de limon-persa.css === */
@keyframes lp-fa{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-15px) rotate(1deg)}}
@keyframes lp-fb{0%,100%{transform:translateY(0) rotate(3deg)}50%{transform:translateY(-22px) rotate(-1deg)}}
.lp-float-a{animation:lp-fa 6.4s ease-in-out infinite}
.lp-float-b{animation:lp-fb 5.4s ease-in-out infinite .5s}
@media (prefers-reduced-motion:reduce){
  .lp-float-a,.lp-float-b{animation:none}
}
.lp-hchip{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:999px;border:1px solid rgba(152,194,61,.45);background:rgba(152,194,61,.12);font-size:13px;font-weight:600;color:#d9e8b4}
.lp-ico{width:44px;height:44px;border-radius:12px;background:#F1F5E6;display:flex;align-items:center;justify-content:center;color:#5E7D24;flex:none}
.lp-tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.lp-tile{background:#fff;border:1px solid rgba(31,38,20,.08);border-radius:18px;padding:24px;display:flex;flex-direction:column;gap:4px;transition:transform .28s ease,box-shadow .28s ease,border-color .28s ease}
.lp-tile:hover{transform:translateY(-6px);box-shadow:0 24px 48px -26px rgba(31,38,20,.3);border-color:rgba(152,194,61,.55)}
.lp-tk{margin-top:14px;font:600 11.5px 'Inter',sans-serif;letter-spacing:.06em;text-transform:uppercase;color:#5C6650}
.lp-tv{font-family:'Bricolage Grotesque',sans-serif;font-size:26px;font-weight:800;color:#1F2614;line-height:1.1}
.lp-tn{font-size:12.5px;color:#5C6650}
.lp-tile-hi{background:#2E3D14;border-color:transparent}
.lp-tile-hi .lp-tk{color:#bcd47a}
.lp-tile-hi .lp-tv{color:#FCFBF7}
.lp-tile-hi .lp-tn{color:rgba(252,251,247,.65)}
.lp-ico-hi{background:rgba(152,194,61,.18);color:#98C23D}
.lp-ph{background:repeating-linear-gradient(45deg,#EDF3EE 0 14px,#E2ECE3 14px 28px);display:flex;align-items:center;justify-content:center;text-align:center;border-radius:18px}
.lp-ph span{font-family:ui-monospace,Menlo,monospace;font-size:10.5px;line-height:1.6;color:#5c6a52;background:rgba(252,251,247,.92);padding:7px 11px;border-radius:6px}
.lp-dest{background:#fff;border:1px solid rgba(31,38,20,.08);border-radius:16px;padding:18px 20px;display:flex;flex-direction:column;gap:5px;transition:transform .25s ease,box-shadow .25s ease}
.lp-dest:hover{transform:translateY(-4px);box-shadow:0 20px 40px -24px rgba(31,38,20,.28)}
.lp-destb{font-family:'Bricolage Grotesque',sans-serif;font-size:18px;font-weight:700;color:#1F2614}
.lp-destt{font-size:13.5px;line-height:1.55;color:#3A4429}
.lp-dtile{background:rgba(252,251,247,.05);border:1px solid rgba(252,251,247,.12);border-radius:18px;padding:26px 24px;display:flex;flex-direction:column;gap:4px}
.lp-dico{width:42px;height:42px;border-radius:11px;background:rgba(152,194,61,.16);display:flex;align-items:center;justify-content:center;color:#98C23D;margin-bottom:12px}
.lp-dk{font:600 11.5px 'Inter',sans-serif;letter-spacing:.06em;text-transform:uppercase;color:#bcd47a}
.lp-dv{font-family:'Bricolage Grotesque',sans-serif;font-size:24px;font-weight:800;line-height:1.15}
.lp-dn{font-size:12.5px;color:rgba(252,251,247,.62)}
.lp-pcard{background:#fff;border:1px solid rgba(31,38,20,.08);border-radius:20px;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease}
.lp-pcard:hover{transform:translateY(-7px);box-shadow:0 28px 54px -26px rgba(31,38,20,.32);border-color:rgba(152,194,61,.55)}
.lp-pcard .lp-ph{border-radius:0}
.lp-pimg{aspect-ratio:16/10;background:#fff;border-bottom:1px solid rgba(31,38,20,.07);overflow:hidden;display:flex;align-items:center;justify-content:center}
.lp-pimg img{width:100%;height:100%;object-fit:contain;transition:transform .45s cubic-bezier(.22,.61,.36,1)}
.lp-pcard:hover .lp-pimg img{transform:scale(1.06)}
.lp-chips{margin-top:14px;display:flex;flex-wrap:wrap;gap:7px}
.lp-chip{display:inline-flex;padding:7px 13px;border-radius:999px;background:#F1F5E6;font-size:12px;font-weight:600;color:#2E3D14}
.lp-count{background:#fff;border:1px solid rgba(31,38,20,.08);border-radius:18px;padding:24px 26px;display:flex;align-items:center;gap:16px}
.lp-countn{font-family:'Bricolage Grotesque',sans-serif;font-size:clamp(32px,4vw,44px);font-weight:800;color:#5E7D24;line-height:1}
.lp-countl{margin-top:4px;font-size:13.5px;font-weight:600;color:#3A4429}
@media (max-width:1000px){
  .lp-tiles{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:600px){
  .lp-tiles{grid-template-columns:1fr}
}
