Support videos

Here's a virtual tour

<!-- Rolling numbers counter -->
<script src='https://unpkg.com/counterup2@2.0.2/dist/index.js'></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
 const RUN_INTERSECT_FN_ONCE = true;
 const INTERSECT_SELECTOR = '.counter';
 const RUN_ONCE_ATTRNAME = 'magic-intersect-once';
 const counterUp = window.counterUp.default;
 const INTERSECT_FN = (el) => {
   counterUp(el, {
     duration: 2000,
     delay: 10,
   });
 }
 const INTERSECT_PARAMS = { threshold: 1 }
 
 const IO = new IntersectionObserver(entries => {
   entries.forEach(entry => {
     const el = entry.target;
     if (entry.isIntersecting) {
       if (RUN_INTERSECT_FN_ONCE) {
         if (el.getAttribute(RUN_ONCE_ATTRNAME) === 'true') return;
         else el.setAttribute(RUN_ONCE_ATTRNAME, 'true');
       }
       INTERSECT_FN(el);
     }
   });
 }, INTERSECT_PARAMS);
 document.querySelectorAll(INTERSECT_SELECTOR).forEach(el => { IO.observe(el); });
});
</script>

https://finsweet.com/attributes/cms-tabs

<!-- Tab change on hover not click -->
<script>
function waitForElements(selector, callback, retryAttempts = 10, retryInterval = 1000) {
 let attemptsMade = 0;
 function checkElements() {
   const elements = document.querySelectorAll(selector);
   attemptsMade++;
   if (elements.length > 0) {
     clearInterval(timer);
     callback(elements);
   } else if (attemptsMade >= retryAttempts) {
     clearInterval(timer);
     console.warn(`No elements found by selector '${selector}' after ${retryAttempts} attempts.`);
   }
 }
 const timer = setInterval(checkElements, retryInterval);
 checkElements();
}

waitForElements('.home_our-work_tabs-menu .tab-heading', (elements) => {
 elements.forEach(el => {
   el.addEventListener('mouseover', () => {
     console.log(el);
     el.click();
   });
 });
});
</script>

Compress images >> https://cloudconvert.com/

How to get background video >> https://www.loom.com/share/6cdf235cbcce45b0985f68cf822eb658?sid=15bfbd45-075e-464a-9124-9be1410386d2

Need help?

For support from the Flow Gurus team please email support@flowgurus.co

Other useful  resources

Webflow Security
Webflow Hosting

Webflow Support

Client first naming system

For more information about Webflow please visit webflow.com

How to videos

Get background video url for Case Studies

More info

Edit global contact form pop up

More info

Upload a new case study

More info

Compress images >> https://cloudconvert.com/

How to get background video >> https://www.loom.com/share/6cdf235cbcce45b0985f68cf822eb658?sid=15bfbd45-075e-464a-9124-9be1410386d2

Technical Documentation

Rolling numbers

More info

<!-- Rolling numbers counter -->
<script src='https://unpkg.com/counterup2@2.0.2/dist/index.js'></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
 const RUN_INTERSECT_FN_ONCE = true;
 const INTERSECT_SELECTOR = '.counter';
 const RUN_ONCE_ATTRNAME = 'magic-intersect-once';
 const counterUp = window.counterUp.default;
 const INTERSECT_FN = (el) => {
   counterUp(el, {
     duration: 2000,
     delay: 10,
   });
 }
 const INTERSECT_PARAMS = { threshold: 1 }
 
 const IO = new IntersectionObserver(entries => {
   entries.forEach(entry => {
     const el = entry.target;
     if (entry.isIntersecting) {
       if (RUN_INTERSECT_FN_ONCE) {
         if (el.getAttribute(RUN_ONCE_ATTRNAME) === 'true') return;
         else el.setAttribute(RUN_ONCE_ATTRNAME, 'true');
       }
       INTERSECT_FN(el);
     }
   });
 }, INTERSECT_PARAMS);
 document.querySelectorAll(INTERSECT_SELECTOR).forEach(el => { IO.observe(el); });
});
</script>

Homepage tabs

More info

https://finsweet.com/attributes/cms-tabs

<!-- Tab change on hover not click -->
<script>
function waitForElements(selector, callback, retryAttempts = 10, retryInterval = 1000) {
 let attemptsMade = 0;
 function checkElements() {
   const elements = document.querySelectorAll(selector);
   attemptsMade++;
   if (elements.length > 0) {
     clearInterval(timer);
     callback(elements);
   } else if (attemptsMade >= retryAttempts) {
     clearInterval(timer);
     console.warn(`No elements found by selector '${selector}' after ${retryAttempts} attempts.`);
   }
 }
 const timer = setInterval(checkElements, retryInterval);
 checkElements();
}

waitForElements('.home_our-work_tabs-menu .tab-heading', (elements) => {
 elements.forEach(el => {
   el.addEventListener('mouseover', () => {
     console.log(el);
     el.click();
   });
 });
});
</script>