(function() { var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add('mdr-visible'); if (entry.target.classList.contains('mdr-d5') || entry.target.closest('.mdr-hero-visual')) { entry.target.style.opacity = '1'; entry.target.style.transform = 'translateX(0)'; } } }); }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }); var wrapper = document.querySelector('.cf-mdr'); if (wrapper) { wrapper.querySelectorAll('.mdr-reveal').forEach(function(el) { observer.observe(el); }); var heroVisual = wrapper.querySelector('.mdr-hero-visual'); if (heroVisual) observer.observe(heroVisual); } // Modal logic var modal = document.getElementById('cfmdr-modal'); var closeBtn = document.getElementById('cfmdr-modal-close'); var formLoaded = false; function openModal(e) { e.preventDefault(); modal.classList.add('mdr-modal-open'); document.body.style.overflow = 'hidden'; if (!formLoaded && window.hbspt) { hbspt.forms.create({ portalId: '45830035', formId: '354138b9-4fa2-485a-839f-04ad812aeef2', target: '#cfmdr-hs-form' }); formLoaded = true; } } function closeModal() { modal.classList.remove('mdr-modal-open'); document.body.style.overflow = ''; } document.querySelectorAll('.mdr-modal-trigger').forEach(function(btn) { btn.addEventListener('click', openModal); }); if (closeBtn) closeBtn.addEventListener('click', closeModal); if (modal) modal.addEventListener('click', function(e) { if (e.target === modal) closeModal(); }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape') closeModal(); }); // Cursor tracker var shieldWrap = document.querySelector('.mdr-shield-wrap'); var tracker = document.getElementById('cfm-tracker'); var trackerLine = document.getElementById('cfm-tracker-line'); var trackerLineSvg = trackerLine ? trackerLine.querySelector('line') : null; if (shieldWrap && tracker) { var tx = 170, ty = 170; var mx = 170, my = 170; var animating = false; function lerpTracker() { tx += (mx - tx) * 0.12; ty += (my - ty) * 0.12; tracker.style.left = tx + 'px'; tracker.style.top = ty + 'px'; if (trackerLineSvg) { trackerLineSvg.setAttribute('x1', '170'); trackerLineSvg.setAttribute('y1', '170'); trackerLineSvg.setAttribute('x2', tx); trackerLineSvg.setAttribute('y2', ty); } if (animating) requestAnimationFrame(lerpTracker); } var statusText = document.querySelector('.mdr-status-text'); shieldWrap.addEventListener('mouseenter', function() { animating = true; requestAnimationFrame(lerpTracker); if (statusText) statusText.textContent = 'Threat Detected'; }); shieldWrap.addEventListener('mouseleave', function() { animating = false; mx = 170; my = 170; if (statusText) statusText.textContent = 'Healthy'; }); shieldWrap.addEventListener('mousemove', function(e) { var rect = shieldWrap.getBoundingClientRect(); mx = e.clientX - rect.left; my = e.clientY - rect.top; }); } })();