Artemis now offers Participate Energy Prepaid Lease.
Learn more →

Get in touch

See How Top Solar & Roofing Teams Close in Seconds

4.9

226 reviews
220
6
0
0
0

Request a demo

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
// Initialize Lenis const lenis = new Lenis({ lerp: 0.1, }); // Listen for the scroll event and log the event data lenis.on(‘scroll’, (e) => { console.log(e); }); // Use requestAnimationFrame to continuously update the scroll function raf(time) { lenis.raf(time); requestAnimationFrame(raf); } requestAnimationFrame(raf); gsap.registerPlugin(ScrollTrigger); const splitTypes = document.querySelectorAll(‘.scroll-highlight’); splitTypes.forEach((char, i) => { const text = new SplitType(char, { types: [‘chars’, ‘words’] }); gsap.from(text.chars, { scrollTrigger: { trigger: char, start: ‘top 50%’, end: ‘top 10%’, scrub: 1, }, opacity: 0.2, stagger: 0.1, }); }); new WordPlay({ className: “h-2”, // the text element mode: “letter”, // choose between letter or word offset: 20, // offset if revealed by scroll speed: 0.7, delay: 0.015, // stagger delay }); .skip-link { position: absolute; top: -100px; left: 0; background: #000; color: white; padding: 10px 15px; z-index: 1000; text-decoration: none; } .skip-link:focus { top: 10px; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } document.addEventListener(“DOMContentLoaded”, function () { const page = document.querySelector(“.page-container”); if (!page) { console.log(“No .page-container found”); return; } document.addEventListener(“click”, function (event) { const t1 = event.target.closest(“.link-trigger-1”); const t2 = event.target.closest(“.link-trigger-2”); // Click inside link-trigger-1 if (t1) { console.log(“Clicked link-trigger-1 → overflow: clip”); page.style.overflow = “clip”; // if this does nothing in your browser, use “hidden” } // Click inside link-trigger-2 if (t2) { console.log(“Clicked link-trigger-2 → overflow: visible”); page.style.overflow = “visible”; // or “auto”/”hidden” depending on what you want } }); }); (function() { // Configuration var config = { autoplayDelay: 2300, // Time between auto-advances (ms) transitionSpeed: 600 // Slide transition duration (ms) }; // State var isTransitioning = false; var autoplayInterval = null; var track = null; var slides = []; var slideWidth = 0; var currentOffset = 0; var leftBuffer = 2; // Initialize function init() { track = document.getElementById(‘reviewBadgeTrack’); if (!track) return; track.style.visibility = ‘hidden’; slides = Array.from(track.querySelectorAll(‘.review-badge-carousel__slide’)); if (slides.length === 0) { track.style.visibility = ‘visible’; return; } calculateDimensions(); for (var i = 0; i < leftBuffer; i++) { var lastSlide = slides.pop(); slides.unshift(lastSlide); track.insertBefore(lastSlide, track.firstChild); } centerCurrentSlide(false); updateActiveStates(); requestAnimationFrame(function() { track.style.visibility = 'visible'; startAutoplay(); }); window.addEventListener('resize', handleResize); track.addEventListener('click', handleSlideClick); track.parentElement.addEventListener('mouseenter', stopAutoplay); track.parentElement.addEventListener('mouseleave', startAutoplay); } function calculateDimensions() { if (slides.length === 0) return; var firstSlide = slides[0]; var style = getComputedStyle(firstSlide); var width = firstSlide.offsetWidth; var marginLeft = parseFloat(style.marginLeft); var marginRight = parseFloat(style.marginRight); slideWidth = width + marginLeft + marginRight; } function centerCurrentSlide(animate) { var viewportCenter = window.innerWidth / 2; var slideCenter = slideWidth / 2; currentOffset = viewportCenter – slideCenter – (leftBuffer * slideWidth); if (animate) { isTransitioning = true; track.style.transition = 'transform ' + config.transitionSpeed + 'ms ease'; } else { track.style.transition = 'none'; track.offsetHeight; // Force reflow } track.style.transform = 'translateX(' + currentOffset + 'px)'; } function updateActiveStates() { slides.forEach(function(slide, i) { var isVisible = i <= (leftBuffer + 2); if (i === leftBuffer) { slide.classList.add('active'); } else { slide.classList.remove('active'); } slide.style.visibility = isVisible ? 'visible' : 'hidden'; }); } function nextSlide() { if (isTransitioning || slides.length === 0) return; isTransitioning = true; currentOffset -= slideWidth; track.style.transition = 'transform ' + config.transitionSpeed + 'ms ease'; track.style.transform = 'translateX(' + currentOffset + 'px)'; setTimeout(handleTransitionEnd, config.transitionSpeed); } function handleTransitionEnd() { var firstSlide = slides.shift(); slides.push(firstSlide); track.appendChild(firstSlide); currentOffset += slideWidth; track.style.transition = 'none'; track.offsetHeight; // Force reflow track.style.transform = 'translateX(' + currentOffset + 'px)'; updateActiveStates(); isTransitioning = false; } function prevSlide() { if (isTransitioning || slides.length === 0) return; isTransitioning = true; var lastSlide = slides.pop(); slides.unshift(lastSlide); track.insertBefore(lastSlide, track.firstChild); currentOffset -= slideWidth; track.style.transition = 'none'; track.offsetHeight; // Force reflow track.style.transform = 'translateX(' + currentOffset + 'px)'; updateActiveStates(); currentOffset += slideWidth; requestAnimationFrame(function() { track.style.transition = 'transform ' + config.transitionSpeed + 'ms ease'; track.style.transform = 'translateX(' + currentOffset + 'px)'; setTimeout(function() { isTransitioning = false; }, config.transitionSpeed); }); } function startAutoplay() { stopAutoplay(); autoplayInterval = setInterval(nextSlide, config.autoplayDelay); } function stopAutoplay() { if (autoplayInterval) { clearInterval(autoplayInterval); autoplayInterval = null; } } function handleSlideClick(e) { var slide = e.target.closest('.review-badge-carousel__slide'); if (!slide || isTransitioning) return; var clickedIndex = slides.indexOf(slide); if (clickedIndex === leftBuffer) return; if (clickedIndex === leftBuffer + 1) { nextSlide(); } else if (clickedIndex === leftBuffer – 1) { prevSlide(); } } var resizeTimeout; function handleResize() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { calculateDimensions(); centerCurrentSlide(false); }, 100); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); function getUrlParams() { const params = new URLSearchParams(window.location.search); let utmParams = {}; const list = [‘utm_source’, ‘utm_medium’, ‘utm_campaign’, ‘utm_term’, ‘utm_content’]; list.forEach(param => { if (params.has(param)) { const val = params.get(param); utmParams[param] = val; document.cookie = `${param}=${val}; path=/;`; } }); return utmParams; } function getUtmFromCookies() { const cookies = document.cookie.split(‘; ‘).reduce((acc, cookie) => { const [key, value] = cookie.split(‘=’); acc[key] = value; return acc; }, {}); let utmParams = {}; const list = [‘utm_source’, ‘utm_medium’, ‘utm_campaign’, ‘utm_term’, ‘utm_content’]; list.forEach(param => { if (cookies[param]) { utmParams[param] = cookies[param]; } }); return utmParams; } function fillUtmFields() { let utmData = getUrlParams(); if (Object.keys(utmData).length === 0) { utmData = getUtmFromCookies(); } Object.keys(utmData).forEach(key => { const input = document.querySelector(`input[name=”${key}”]`); if (input) { input.value = utmData[key]; } }); } document.addEventListener(“DOMContentLoaded”, fillUtmFields); // Get URL parameters function getUrlParameter(name) { name = name.replace(/[[]/, ‘\[‘).replace(/[]]/, ‘\]’); var regex = new RegExp(‘[\?&]’ + name + ‘=([^&#]*)’); var results = regex.exec(location.search); return results === null ? ” : decodeURIComponent(results[1].replace(/+/g, ‘ ‘)); } function setCookie(name, value, days = 7) { const expires = new Date(Date.now() + days * 864e5).toUTCString(); document.cookie = name + ‘=’ + value + ‘; expires=’ + expires + ‘; path=/’; } // Populate email field document.addEventListener(‘DOMContentLoaded’, function() { const emailParam = getUrlParameter(’email’); if (emailParam) { const emailField = document.getElementById(‘Email’); if (emailField) { emailField.value = emailParam; } } const submitButton = document.getElementById(‘form-demo-submit-button’); submitButton.addEventListener(‘click’, function(e) { fbq(‘trackCustom’, ‘Form_Submission’); window.lintrk(‘track’, { conversion_id: 24965906 }); }); }); document.getElementById(‘wf-form-Email-Form’).addEventListener(‘submit’, function () { const data = {}; this.querySelectorAll(‘input, select, textarea’).forEach(field => { if (!field.name) return; if (field.type === ‘checkbox’) { data[field.name] = field.checked ? (field.value || 1) : 0; } else if (field.type === ‘radio’) { if (field.checked) data[field.name] = field.value; } else { data[field.name] = field.value; } }); setCookie(‘art_form_data’, JSON.stringify(data)); }); document.addEventListener(“DOMContentLoaded”, function() { const solar = document.getElementById(“Solar-Installation”); const roofing = document.getElementById(“Roofing”); const successBlock = document.querySelector(“.w-form-done”); if (!successBlock) return; const observer = new MutationObserver(() => { const isVisible = successBlock.style.display === “block”; if (isVisible) { if (solar && solar.checked) { window.location.href = “https://artemispower.com/schedule-a-call”; } else if (roofing && roofing.checked) { window.location.href = “https://artemispower.com/schedule-a-call-roofing”; } else { window.location.href = “https://artemispower.com/schedule-a-call”; } } }); observer.observe(successBlock, { attributes: true, attributeFilter: [“style”] }); });