Enviamos a Provincias
A todo el Perú vía Olva/Shalom
Pago Contraentrega
Sin adelantos en Lima
Envío el Mismo Día
Pedidos hasta las 2pm (L–S)
Asesoría Técnica
Expertos en instrumentación
Soluciones integrales para cada etapa de tu producción.
Equipos seleccionados para lácteos, enología, agronomía, acuicultura y más. Incluyen guías técnicas.
Kit de Enología
Para productores de vino artesanal
-
Medidor de pH digital -
Refractómetro 0-90°Brix -
Mostímetro / Densímetro -
Alcoholímetro 0-100% -
Termómetro digital -
Vinómetro + Probeta 250 mL - 🎁GRATIS: Guía técnica de enología
Kit de Lácteos
Control de calidad en planta lechera
-
Lactodensímetro digital -
Termómetro de sonda -
pH-metro portátil -
Densímetro de Baumé -
Refractómetro 20% leche -
Probeta de 250 mL - 🎁GRATIS: Guía de rangos óptimos
Kit Monitoreo de Campo
Para agricultores y técnicos agrícolas
-
Medidor de suelo 8 en 1 -
Lupa x60 -
Tríptico técnico - 🎁GRATIS: App en español
- 🎁GRATIS: Herramienta de interpretación
Kit General
Para bebidas y procesos generales
-
Refractómetro 0-90°Brix -
pH-metro digital -
Balanza 500g / 0.01g -
Termómetro digital TP101
¿Qué estás buscando hoy?
Medidor de Suelo 8-en-1
Mide pH, NPK, temperatura, humedad y más con un solo instrumento. El kit más vendido de F&M.
Kits desde S/ 180
- Kit de Enología — S/ 195
- Kit de Lácteos — S/ 180
- Kit Medidor de Suelo — S/ 360
- Kit General — S/ 180
Centro de Capacitaciones F&M
Material técnico exclusivo para clientes activos. Videos, guías PDF y herramientas. Acceso con DNI o cédula.
Encuentra la herramienta ideal
Búsqueda rápida por nombre, modelo o marca.
Novedades
Explora por industria
Soluciones diseñadas para las exigencias de tu sector.
document.addEventListener('DOMContentLoaded', function() { var container = document.getElementById('sfym-hero-main'); if (!container) return; var slides = container.querySelectorAll('.sfym-hero-slide'); var dots = container.querySelectorAll('.sfym-hero-dot'); var prevBtn = document.getElementById('sfymHeroPrev'); var nextBtn = document.getElementById('sfymHeroNext'); if (slides.length <= 1) return; var currentIndex = 0; var autoTimer; var isAuto = container.getAttribute('data-auto') === 'true'; var speed = parseInt(container.getAttribute('data-speed')) || 5000; function goToSlide(index) { if (index === currentIndex) return; slides[currentIndex].classList.remove('is-active'); dots[currentIndex] && dots[currentIndex].classList.remove('is-active'); currentIndex = (index + slides.length) % slides.length; slides[currentIndex].classList.add('is-active'); dots[currentIndex] && dots[currentIndex].classList.add('is-active'); resetTimer(); } function nextSlide() { goToSlide(currentIndex + 1); } function prevSlide() { goToSlide(currentIndex - 1); } function resetTimer() { if (isAuto) { clearInterval(autoTimer); autoTimer = setInterval(nextSlide, speed); } } if (nextBtn) nextBtn.addEventListener('click', nextSlide); if (prevBtn) prevBtn.addEventListener('click', prevSlide); dots.forEach(function(dot) { dot.addEventListener('click', function() { goToSlide(parseInt(this.getAttribute('data-target'))); }); }); if (isAuto) { autoTimer = setInterval(nextSlide, speed); container.addEventListener('mouseenter', function() { clearInterval(autoTimer); }); container.addEventListener('mouseleave', resetTimer); } // Touch swipe var touchStartX = 0, touchStartY = 0, isDragging = false; container.addEventListener('touchstart', function(e) { touchStartX = e.changedTouches[0].clientX; touchStartY = e.changedTouches[0].clientY; isDragging = true; }, {passive:true}); container.addEventListener('touchmove', function(e) { if (!isDragging) return; var dx = e.changedTouches[0].clientX - touchStartX; var dy = e.changedTouches[0].clientY - touchStartY; if (Math.abs(dx) > Math.abs(dy) * 0.75) e.preventDefault(); }, {passive:false}); container.addEventListener('touchend', function(e) { if (!isDragging) return; isDragging = false; var dx = e.changedTouches[0].clientX - touchStartX; var dy = e.changedTouches[0].clientY - touchStartY; if (Math.abs(dx) >= 50 && Math.abs(dx) > Math.abs(dy) * 0.75) { goToSlide(dx < 0 ? currentIndex + 1 : currentIndex - 1); } }, {passive:true}); }); (function() { const sid = 'main'; const track = document.getElementById('sfym-ks-track-' + sid); const dotsWrap = document.getElementById('sfym-ks-dots-' + sid); const prevBtn = document.getElementById('sfym-ks-prev-' + sid); const nextBtn = document.getElementById('sfym-ks-next-' + sid); if (!track) return; const cards = Array.from(track.children); if (!cards.length) return; let current = 0; let isDragging = false; let startX = 0; let startOffset = 0; let currentOffset = 0; const GAP = 20; // px gap between cards, matches 1.25rem at 16px function getVisible() { const w = track.parentElement.offsetWidth; if (w <= 699) return 1; if (w <= 1099) return 2; return 3; } function maxIndex() { return Math.max(0, cards.length - getVisible()); } function cardWidth() { const vis = getVisible(); const wrap = track.parentElement.offsetWidth; return (wrap - GAP * (vis - 1)) / vis; } function goTo(index, animate) { current = Math.max(0, Math.min(index, maxIndex())); const offset = -(current * (cardWidth() + GAP)); currentOffset = offset; track.style.transition = animate === false ? 'none' : 'transform .45s cubic-bezier(.25,.46,.45,.94)'; track.style.transform = 'translateX(' + offset + 'px)'; // update dots const dots = dotsWrap ? dotsWrap.querySelectorAll('.sfym-ks__dot') : []; dots.forEach((d, i) => d.classList.toggle('active', i === current)); }
// Buttons prevBtn && prevBtn.addEventListener('click', () => goTo(current - 1, true)); nextBtn && nextBtn.addEventListener('click', () => goTo(current + 1, true));
// Dots dotsWrap && dotsWrap.addEventListener('click', (e) => { const btn = e.target.closest('.sfym-ks__dot'); if (btn) goTo(parseInt(btn.dataset.index), true); });
// Drag (mouse) track.addEventListener('mousedown', (e) => { isDragging = true; startX = e.clientX; startOffset = currentOffset; track.classList.add('grabbing'); track.style.transition = 'none'; }); document.addEventListener('mousemove', (e) => { if (!isDragging) return; const dx = e.clientX - startX; track.style.transform = 'translateX(' + (startOffset + dx) + 'px)'; }); document.addEventListener('mouseup', (e) => { if (!isDragging) return; isDragging = false; track.classList.remove('grabbing'); const dx = e.clientX - startX; if (Math.abs(dx) > 60) goTo(dx < 0 ? current + 1 : current - 1, true); else goTo(current, true); }); // Swipe (touch) let touchStartX = 0; track.addEventListener('touchstart', (e) => { touchStartX = e.touches[0].clientX; track.style.transition = 'none'; }, { passive: true }); track.addEventListener('touchmove', (e) => { const dx = e.touches[0].clientX - touchStartX; track.style.transform = 'translateX(' + (currentOffset + dx) + 'px)'; }, { passive: true }); track.addEventListener('touchend', (e) => { const dx = e.changedTouches[0].clientX - touchStartX; if (Math.abs(dx) > 50) goTo(dx < 0 ? current + 1 : current - 1, true); else goTo(current, true); }); // Resize let resizeTimer; window.addEventListener('resize', () => { clearTimeout(resizeTimer); resizeTimer = setTimeout(() => goTo(Math.min(current, maxIndex()), false), 150); });
// Init goTo(0, false); })();
var sfymO_isMobile = window.innerWidth < 990;
window.addEventListener('resize', function() { sfymO_isMobile = window.innerWidth < 990; });
var allItems = document.querySelectorAll('.sfym-o-item');
var allPanels = document.querySelectorAll('.sfym-o-panel');
var defPanel = document.getElementById('sfym-panel-def');
function clearActive() {
allItems.forEach(function(i) { i.classList.remove('is-active'); });
allPanels.forEach(function(p) { p.classList.remove('is-visible'); });
if(defPanel) defPanel.classList.remove('is-visible');
}
function toggleSFYMPanel(id, btn) {
var item = btn.parentElement;
var panel = document.getElementById('sfym-panel-' + id);
if(item.classList.contains('is-active')) {
clearActive();
if(defPanel) defPanel.classList.add('is-visible');
return;
}
clearActive();
item.classList.add('is-active');
if(panel) panel.classList.add('is-visible');
}
(function() {
var track = document.getElementById('sfym-nc-track-main');
var dotsWrap = document.getElementById('sfym-nc-dots-main');
if (!track) return;
// Fetch products from WooCommerce Store API (public, no auth needed)
fetch('https://nuevo.solucionesfym.com/wp-json/wc/store/v1/products?per_page=8&orderby=date&order=desc')
.then(function(r) { return r.json(); })
.then(function(products) {
track.innerHTML = '';
products.forEach(function(p, idx) {
var imgSrc = (p.images && p.images[0]) ? p.images[0].src : '';
var imgHtml = imgSrc
? ''
: '
'; var price = p.prices && p.prices.price ? 'S/ ' + (parseInt(p.prices.price) / 100).toFixed(2) : 'Consultar'; var badgeHtml = idx < 3 ? 'Nuevo' : ''; var card = document.createElement('a'); card.href = p.permalink || 'https://nuevo.solucionesfym.com/producto/' + p.slug + '/'; card.className = 'sfym-nc__card'; card.innerHTML = '
' + '
' + '
'; track.appendChild(card); }); // Build dots var cards = Array.from(track.querySelectorAll('.sfym-nc__card')); dotsWrap.innerHTML = ''; cards.forEach(function(_, i) { var dot = document.createElement('button'); dot.className = 'sfym-nc__dot' + (i === 0 ? ' is-active' : ''); dot.setAttribute('aria-label', 'Producto ' + (i+1)); dot.addEventListener('click', function() { cards[i].scrollIntoView({ behavior:'smooth', block:'nearest', inline:'start' }); }); dotsWrap.appendChild(dot); }); var dots = Array.from(dotsWrap.querySelectorAll('.sfym-nc__dot')); var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { var idx = cards.indexOf(entry.target); dots.forEach(function(d,i) { d.classList.toggle('is-active', i===idx); }); } }); }, { root: track, threshold: 0.6 }); cards.forEach(function(c) { observer.observe(c); }); }) .catch(function() { track.innerHTML = '
'; }); })();
function sfymNcScroll(id, dir) { var track = document.getElementById('sfym-nc-track-' + id); if (!track) return; var card = track.querySelector('.sfym-nc__card'); var scrollAmount = card ? (card.offsetWidth + 20) : 280; track.scrollBy({ left: dir * scrollAmount, behavior: 'smooth' }); }
document.addEventListener('DOMContentLoaded', function() { var cards = document.querySelectorAll('#sfym-categorias-main .js-sfym-observe'); if ('IntersectionObserver' in window) { var observer = new IntersectionObserver(function(entries, obs) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); obs.unobserve(entry.target); } }); }, { root: null, threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); cards.forEach(function(card) { observer.observe(card); }); } else { cards.forEach(function(card) { card.classList.add('is-visible'); }); } });