{"version":3,"sources":["jsdelivr-header.js","/gh/leo-mattar/joyful-health@master/scripts/main-5.0.js"],"names":[],"mappings":"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","file":"/gh/leo-mattar/joyful-health@master/scripts/main-5.0.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/leo-mattar/joyful-health@master/scripts/main-5.0.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// --------------- GSAP ---------------\r\ngsap.registerPlugin(ScrollTrigger, CustomEase, Draggable, InertiaPlugin);\r\n\r\ngsap.config({\r\n  nullTargetWarn: false,\r\n  trialWarn: false,\r\n});\r\n\r\nlet mm = gsap.matchMedia();\r\n\r\n// --------------- CUSTOM EASE ---------------\r\nCustomEase.create(\"ease-out-1\", \"0.25, 1, 0.5, 1\");\r\nCustomEase.create(\"ease-in-out-1\", \"0.87, 0, 0.13, 1\");\r\n\r\n// --------------- GLOBAL - RELOAD AT THE TOP ---------------\r\nwindow.addEventListener(\"beforeunload\", function () {\r\n  history.scrollRestoration = \"manual\";\r\n});\r\n\r\n// --------------- LENIS ---------------\r\n// window.lenis = new Lenis();\r\n\r\n// lenis.on(\"scroll\", ScrollTrigger.update);\r\n\r\n// gsap.ticker.add((time) => {\r\n//   lenis.raf(time * 1000);\r\n// });\r\n\r\n// gsap.ticker.lagSmoothing(0);\r\n\r\n// --------------- PAPER TIGET SIGNATURE ---------------\r\nconst pprtgr = [\r\n  \"color: #F2F3F3\",\r\n  \"background: #080808\",\r\n  \"font-size: 12px\",\r\n  \"padding-left: 10px\",\r\n  \"line-height: 2\",\r\n  \"border-left: 5px solid #ff3c31\",\r\n].join(\";\");\r\nconsole.info(\r\n  `\r\n\r\n%cWebsite by Paper Tiger${\" \"}\r\nwww.papertiger.com${\"     \"}\r\n\r\n`,\r\n  pprtgr\r\n);\r\n\r\n// --------------- GLOBAL FADE ---------------\r\nfunction fade() {\r\n  const fadeElements = document.querySelectorAll(\"[fade]\");\r\n\r\n  gsap.set(fadeElements, { opacity: 0, y: \"5em\" });\r\n\r\n  ScrollTrigger.batch(\"[fade]\", {\r\n    once: true,\r\n    onEnter: batch =>\r\n      gsap.to(batch, {\r\n        opacity: 1,\r\n        y: 0,\r\n        duration: 1.2,\r\n        ease: \"ease-out-1\",\r\n        stagger: 0.15,\r\n      }),\r\n  });\r\n}\r\n\r\n// --------------- HEADER SCROLLED ---------------\r\nfunction headerScrolled() {\r\n  const header = document.querySelector(\".c-header\");\r\n\r\n  if (!header) return;\r\n\r\n  ScrollTrigger.create({\r\n    trigger: \"body\",\r\n    start: \"100 top\",\r\n    onToggle: self => {\r\n      if (self.isActive) {\r\n        header.classList.add(\"scrolled\");\r\n      } else {\r\n        header.classList.remove(\"scrolled\");\r\n      }\r\n    },\r\n  });\r\n}\r\n\r\n// --- GLOBAL - STATS COUNTER\r\nfunction statsCounter() {\r\n  document\r\n    .querySelectorAll(\"[data-count-up='true']\")\r\n    .forEach((element, index) => {\r\n      let thisId = \"countup\" + index;\r\n      element.setAttribute(\"id\", thisId);\r\n\r\n      let finalValue = element.getAttribute(\"final-number\");\r\n      let cleanValue = finalValue.replace(/,/g, \"\");\r\n      let match = cleanValue.match(/^([\\d.]+)(\\D*)$/);\r\n\r\n      if (match) {\r\n        let numberPart = match[1];\r\n        let endNumber = parseFloat(numberPart);\r\n        let suffix = match[2] || \"\";\r\n\r\n        let decimals = element.hasAttribute(\"decimals\")\r\n          ? +element.getAttribute(\"decimals\")\r\n          : numberPart.includes(\".\")\r\n          ? numberPart.split(\".\")[1].length\r\n          : 0;\r\n\r\n        let startNumber = 0;\r\n        let duration = element.getAttribute(\"count-duration\");\r\n        let useCommas = finalValue.includes(\",\");\r\n\r\n        let myCounter = new CountUp(\r\n          thisId,\r\n          startNumber,\r\n          endNumber,\r\n          decimals,\r\n          duration,\r\n          {\r\n            suffix: suffix,\r\n            useGrouping: useCommas,\r\n            decimalPlaces: decimals,\r\n          }\r\n        );\r\n\r\n        ScrollTrigger.create({\r\n          trigger: element,\r\n          start: \"top bottom\",\r\n          onEnter: () => {\r\n            gsap.to(element, {\r\n              delay: index * 0.1,\r\n              onStart: () => myCounter.start(),\r\n            });\r\n          },\r\n        });\r\n      } else {\r\n        console.error(`Invalid final-number attribute: ${finalValue}`);\r\n      }\r\n    });\r\n}\r\n\r\nfunction industryCardHover() {\r\n  const cards = document.querySelectorAll(\".c-card\");\r\n\r\n  cards.forEach(card => {\r\n    const bg = card.querySelector(\".c-img-contain.card-bg\");\r\n    const desc = card.querySelector(\".c-card-desc\");\r\n\r\n    const tl = gsap.timeline({\r\n      paused: true,\r\n      defaults: {\r\n        ease: \"ease-in-out-1\",\r\n        duration: 0.8,\r\n      },\r\n    });\r\n\r\n    gsap.set(desc, { y: \"2em\" });\r\n\r\n    tl.to(bg, { filter: \"blur(30px)\", scale: 1.25 });\r\n    tl.to(desc, { height: \"auto\", opacity: 1, y: 0 }, 0);\r\n\r\n    card.addEventListener(\"mouseenter\", function () {\r\n      tl.restart();\r\n    });\r\n\r\n    card.addEventListener(\"mouseleave\", function () {\r\n      tl.reverse();\r\n    });\r\n  });\r\n}\r\n\r\n// --------------- SPLIT TEXT ---------------\r\nfunction splitTextInit() {\r\n  document.querySelectorAll(\"[data-split-txt]\").forEach(element => {\r\n    element.splitInstance = new SplitType(element, { types: \"words, chars\" });\r\n  });\r\n}\r\n\r\nfunction headingsAnimation() {\r\n  const headings = document.querySelectorAll(\"[data-heading-animate]\");\r\n\r\n  // headings.forEach(heading => {\r\n  //   const chars = heading.querySelectorAll(\".char\");\r\n  //   const tl = gsap.timeline({\r\n  //     scrollTrigger: {\r\n  //       trigger: heading,\r\n  //       start: \"top 80%\",\r\n  //       once: true,\r\n  //     }\r\n  //   });\r\n\r\n  //   gsap.set(headings, { opacity: 1 });\r\n  //   gsap.set(chars, { opacity: 0, yPercent: 100 });\r\n\r\n  //   tl.to(chars, {\r\n  //     opacity: 1,\r\n  //     yPercent: 0,\r\n  //     duration: 1.6,\r\n  //     ease: \"ease-out-1\",\r\n  //     stagger: { amount: 0.4 },\r\n  //     onComplete: () => {\r\n  //       if (heading.splitInstance) {\r\n  //         // heading.splitInstance.revert();\r\n  //       }\r\n  //     }\r\n  //   });\r\n\r\n  // });\r\n\r\n  gsap.set(headings, { opacity: 0, y: \"5em\" });\r\n\r\n  ScrollTrigger.batch(headings, {\r\n    once: true,\r\n    onEnter: batch =>\r\n      gsap.to(batch, {\r\n        opacity: 1,\r\n        y: 0,\r\n        duration: 1.2,\r\n        ease: \"ease-out-1\",\r\n        stagger: 0.15,\r\n      }),\r\n  });\r\n}\r\n\r\n// --------------- FAQ ACCORDIONS ---------------\r\nfunction faqAccordions() {\r\n  const accordions = document.querySelectorAll(\".c-ac-item\");\r\n  let active = null;\r\n\r\n  if (accordions.length === 0) return;\r\n\r\n  accordions.forEach((accordion, index) => {\r\n    const question = accordion.querySelector(\".c-ac-toggle\");\r\n    const response = accordion.querySelector(\".c-ac-list\");\r\n    const arrow = accordion.querySelector(\".c-icon.ac-arrow\");\r\n\r\n    const tl = gsap.timeline({\r\n      paused: true,\r\n      defaults: {\r\n        ease: \"ease-in-out-1\",\r\n        duration: 0.8,\r\n      },\r\n    });\r\n\r\n    tl.to(response, { height: \"auto\" }, 0);\r\n    tl.to(arrow, { rotation: 180 }, 0);\r\n\r\n    accordion.tl = tl;\r\n\r\n    accordion.addEventListener(\"click\", function () {\r\n      if (active === accordion) {\r\n        tl.reverse();\r\n        active = null;\r\n      } else {\r\n        if (active) active.tl.reverse();\r\n        tl.play();\r\n        active = accordion;\r\n      }\r\n    });\r\n\r\n    // if (index === 0) {\r\n    //   accordion.click();\r\n    // }\r\n  });\r\n}\r\n\r\n// --------------- TESTIMONIALS SLIDER ---------------\r\nfunction testimonialsTabber() {\r\n  const quotesWrap = document.querySelectorAll(\".c-quote-tab-wrap\");\r\n  if (quotesWrap.length === 0) return;\r\n\r\n  quotesWrap.forEach(quote => {\r\n    const tabs = quote.querySelectorAll(\".c-quote-tab\");\r\n    const tabLinks = quote.querySelectorAll(\".c-quote-tab-link\");\r\n    let currentIndex = 0;\r\n    let isAnimating = false;\r\n    let progressBarTween = null;\r\n    let initialLoad = true;\r\n\r\n    function animateProgressBar(progressBar) {\r\n      if (progressBarTween) progressBarTween.kill();\r\n\r\n      gsap.set(progressBar, { width: \"0%\" });\r\n\r\n      progressBarTween = gsap.to(progressBar, {\r\n        width: \"100%\",\r\n        duration: 7,\r\n        ease: \"none\",\r\n        onComplete: () => {\r\n          if (!isAnimating) {\r\n            const nextIndex = (currentIndex + 1) % tabs.length;\r\n            changeSlide(nextIndex);\r\n          }\r\n        },\r\n      });\r\n    }\r\n\r\n    function changeSlide(index) {\r\n      if (isAnimating) return;\r\n\r\n      isAnimating = true;\r\n\r\n      if (progressBarTween) progressBarTween.kill();\r\n\r\n      tabLinks.forEach((otherLink, i) => {\r\n        const progressBar = otherLink.querySelector(\r\n          \".c-quote-tab-link-progress-bar\"\r\n        );\r\n\r\n        if (i === index) {\r\n          otherLink.classList.add(\"is-active\");\r\n          tabs[i].classList.add(\"is-active\");\r\n\r\n          setTimeout(() => {\r\n            animateProgressBar(progressBar);\r\n            isAnimating = false;\r\n          }, 100);\r\n        } else {\r\n          otherLink.classList.remove(\"is-active\");\r\n          tabs[i].classList.remove(\"is-active\");\r\n\r\n          gsap.set(progressBar, { width: \"0%\" });\r\n        }\r\n      });\r\n\r\n      currentIndex = index;\r\n      initialLoad = false;\r\n    }\r\n\r\n    tabLinks.forEach((link, index) => {\r\n      link.addEventListener(\"click\", function () {\r\n        changeSlide(index);\r\n      });\r\n    });\r\n\r\n    changeSlide(0);\r\n  });\r\n}\r\n\r\n// --------------- TESTIMONIALS TABBER MOBILE DOM ---------------\r\nfunction testimonialsTabberMobile() {\r\n  const sectionHeading = document.querySelector(\".c-quote-main-title\");\r\n  if (!sectionHeading) return;\r\n\r\n  const tabs = document.querySelectorAll(\".c-quote-tab\");\r\n\r\n  tabs.forEach(tab => {\r\n    const headingClone = sectionHeading.cloneNode(true);\r\n    tab.prepend(headingClone);\r\n  });\r\n\r\n  sectionHeading.remove();\r\n}\r\n\r\n// --------------- TESTIMONIALS TABBER MOBILE REVERT DOM ---------------\r\nfunction testimonialsTabberMobileRevert() {\r\n  const storiesRow = document.querySelector(\".o-row.stories\");\r\n  if (!storiesRow) return;\r\n\r\n  const clonedHeadings = document.querySelectorAll(\r\n    \".c-quote-tab .c-quote-main-title\"\r\n  );\r\n  if (clonedHeadings.length > 0) {\r\n    storiesRow.prepend(clonedHeadings[0]);\r\n  }\r\n\r\n  clonedHeadings.forEach((heading, index) => {\r\n    if (index > 0) heading.remove();\r\n  });\r\n}\r\n\r\n// --------------- TEAM SLIDER ---------------\r\nfunction teamSlider() {\r\n  const slider = new Swiper(\".swiper.team\", {\r\n    slidesPerView: \"auto\",\r\n\r\n    speed: 600,\r\n    grabCursor: true,\r\n    pagination: {\r\n      el: \".swiper-pagination.team\",\r\n      type: \"progressbar\",\r\n    },\r\n    navigation: {\r\n      nextEl: \".swiper-next.team\",\r\n      prevEl: \".swiper-prev.team\",\r\n    },\r\n    breakpoints: {\r\n      320: {\r\n        spaceBetween: 16,\r\n      },\r\n      992: {\r\n        spaceBetween: 32,\r\n      },\r\n    },\r\n  });\r\n}\r\n\r\n// --------------- TABBER ---------------\r\nfunction tabber() {\r\n  const quotesWrap = document.querySelectorAll(\".o-row.tabber\");\r\n  if (quotesWrap.length === 0) return;\r\n\r\n  quotesWrap.forEach(quote => {\r\n    const tabs = quote.querySelectorAll(\".c-img-contain.tabber-thumb\");\r\n    const tabLinks = quote.querySelectorAll(\".c-tabber-link\");\r\n    let currentIndex = 0;\r\n    let isAnimating = false;\r\n    let progressBarTween = null;\r\n    let initialLoad = true;\r\n\r\n    function animateProgressBar(progressBar) {\r\n      if (progressBarTween) progressBarTween.kill();\r\n\r\n      gsap.set(progressBar, { width: \"0%\" });\r\n\r\n      progressBarTween = gsap.to(progressBar, {\r\n        width: \"100%\",\r\n        duration: 7,\r\n        ease: \"none\",\r\n        onComplete: () => {\r\n          if (!isAnimating) {\r\n            const nextIndex = (currentIndex + 1) % tabs.length;\r\n            changeSlide(nextIndex);\r\n          }\r\n        },\r\n      });\r\n    }\r\n\r\n    function changeSlide(index) {\r\n      if (isAnimating) return;\r\n\r\n      isAnimating = true;\r\n\r\n      if (progressBarTween) progressBarTween.kill();\r\n\r\n      tabLinks.forEach((otherLink, i) => {\r\n        const progressBar = otherLink.querySelector(\".c-tabber-progress-bar\");\r\n\r\n        if (i === index) {\r\n          otherLink.classList.add(\"is-active\");\r\n          tabs[i].classList.add(\"is-active\");\r\n\r\n          setTimeout(() => {\r\n            animateProgressBar(progressBar);\r\n            isAnimating = false;\r\n          }, 100);\r\n        } else {\r\n          otherLink.classList.remove(\"is-active\");\r\n          tabs[i].classList.remove(\"is-active\");\r\n\r\n          gsap.set(progressBar, { width: \"0%\" });\r\n        }\r\n      });\r\n\r\n      currentIndex = index;\r\n      initialLoad = false;\r\n    }\r\n\r\n    tabLinks.forEach((link, index) => {\r\n      link.addEventListener(\"click\", function () {\r\n        changeSlide(index);\r\n      });\r\n    });\r\n\r\n    changeSlide(0);\r\n  });\r\n}\r\n\r\n// --------------- DTB TABBER ---------------\r\nfunction dtbTabber() {\r\n  const cards = document.querySelectorAll(\".c-dtb-card\");\r\n  const links = document.querySelectorAll(\".c-dtb-nav-link\");\r\n  if (cards.length === 0) return;\r\n\r\n  links.forEach((link, index) => {\r\n    link.addEventListener(\"click\", function () {\r\n      links.forEach(otherLink => otherLink.classList.remove(\"is-active\"));\r\n      link.classList.add(\"is-active\");\r\n\r\n      cards.forEach(otherCard => otherCard.classList.remove(\"is-active\"));\r\n      cards[index].classList.add(\"is-active\");\r\n    });\r\n  });\r\n\r\n  links[0].click();\r\n}\r\n\r\n// --------------- STORYBOARD ANIMATION ---------------\r\nfunction storyboardAnimation() {\r\n  const header = document.querySelector(\".c-header\");\r\n  const sectionTrigger = document.querySelector(\".c-section.sb\");\r\n  if (!sectionTrigger) return;\r\n\r\n  const tl = gsap.timeline({\r\n    defaults: {\r\n      duration: 0.8,\r\n      ease: \"ease-out-1\",\r\n    },\r\n    scrollTrigger: {\r\n      trigger: sectionTrigger,\r\n      start: \"top center\",\r\n      onEnter: () => {\r\n        header.classList.add(\"sb-is-animating\");\r\n        tl.play();\r\n      },\r\n      onLeave: () => {\r\n        header.classList.remove(\"sb-is-animating\");\r\n        tl.pause();\r\n      },\r\n      onEnterBack: () => {\r\n        header.classList.add(\"sb-is-animating\");\r\n        tl.play();\r\n      },\r\n      onLeaveBack: () => {\r\n        header.classList.remove(\"sb-is-animating\");\r\n        tl.pause();\r\n      },\r\n    },\r\n    repeat: -1,\r\n  });\r\n\r\n  gsap.set([\".c-sb-o\", \".c-sb-o path\"], {\r\n    transformOrigin: \"center center\",\r\n    scale: 0.3,\r\n    opacity: 0,\r\n  });\r\n\r\n  gsap.set(\".c-img-contain.sb-graph\", {\r\n    opacity: 1,\r\n    overflow: \"hidden\",\r\n  });\r\n\r\n  gsap.set(\".c-sb-txt\", {\r\n    opacity: 1,\r\n  });\r\n\r\n  tl.to([\".c-sb-o\", \".c-sb-o path\"], {\r\n    duration: 1.2,\r\n    scale: 1,\r\n    opacity: 1,\r\n  });\r\n\r\n  tl.from(\r\n    \"[sb-heading-1]\",\r\n    {\r\n      duration: 1.4,\r\n      y: \"6em\",\r\n      opacity: 0,\r\n    },\r\n    \"<0.6\"\r\n  );\r\n\r\n  tl.from(\r\n    \".c-sb-tag\",\r\n    {\r\n      duration: 1,\r\n      x: window.innerWidth <= 991 ? undefined : 0,\r\n      y: window.innerWidth <= 991 ? undefined : 0,\r\n      stagger: 0.1,\r\n      opacity: 0,\r\n    },\r\n    \"<0.2\"\r\n  );\r\n\r\n  tl.from(\r\n    \".c-img-contain.sb-artwork\",\r\n    {\r\n      duration: 1,\r\n      scale: window.innerWidth <= 991 ? 1 : 0,\r\n      opacity: 0,\r\n      stagger: 0.1,\r\n    },\r\n    \">\"\r\n  );\r\n\r\n  tl.to(\r\n    \"[sb-heading-1]\",\r\n    {\r\n      opacity: 0,\r\n    },\r\n    \">0.4\"\r\n  );\r\n\r\n  tl.to(\r\n    \".c-sb-o path\",\r\n    {\r\n      opacity: 0.3,\r\n      fill: \"rgba(244, 240, 228, 1)\",\r\n    },\r\n    \"<0.4\"\r\n  );\r\n\r\n  tl.to(\r\n    \".c-sb-o-fill\",\r\n    {\r\n      opacity: 1,\r\n      scale: 0.4,\r\n    },\r\n    \"<\"\r\n  );\r\n\r\n  tl.to(\r\n    \".c-sb-o\",\r\n    {\r\n      scale: 0.4,\r\n    },\r\n    \"<\"\r\n  );\r\n\r\n  tl.to(\r\n    \".c-sb-tag\",\r\n    {\r\n      duration: 1,\r\n      x: 0,\r\n      y: 0,\r\n      stagger: 0.05,\r\n      opacity: 0,\r\n    },\r\n    \"<0.4\"\r\n  );\r\n\r\n  tl.to(\r\n    \".c-img-contain.sb-artwork\",\r\n    {\r\n      scale: 0,\r\n      opacity: 0,\r\n      stagger: 0.05,\r\n    },\r\n    \"<\"\r\n  );\r\n\r\n  tl.to(\r\n    [\".c-sb-o\", \".c-sb-o-fill\"],\r\n    {\r\n      duration: 1.4,\r\n      scale: 0,\r\n      y: \"12em\",\r\n    },\r\n    \">0.4\"\r\n  );\r\n\r\n  tl.from(\r\n    \".c-img-contain.sb-graph\",\r\n    {\r\n      duration: 1,\r\n      scale: 0,\r\n      y: \"10em\",\r\n      borderRadius: \"50%\",\r\n      onComplete: () => {\r\n        gsap.set(\".c-img-contain.sb-graph\", {\r\n          overflow: \"visible\",\r\n        });\r\n      },\r\n    },\r\n    \"<0.5\"\r\n  );\r\n\r\n  tl.from(\r\n    \".c-img-contain.sb-graph-3\",\r\n    {\r\n      opacity: 0,\r\n      y: \"24em\",\r\n    },\r\n    \">\"\r\n  );\r\n\r\n  tl.from(\r\n    \".c-img-contain.sb-graph-2\",\r\n    {\r\n      opacity: 0,\r\n      y: \"16em\",\r\n    },\r\n    \"<0.3\"\r\n  );\r\n\r\n  tl.from(\r\n    \".c-sb-txt\",\r\n    {\r\n      duration: 1,\r\n      y: \"9em\",\r\n      opacity: 0,\r\n    },\r\n    \"<-0.8\"\r\n  );\r\n\r\n  tl.to(\r\n    \".c-sb-inner > *:not(.c-img-contain.sb-bg)\",\r\n    {\r\n      opacity: 0,\r\n    },\r\n    \">4\"\r\n  );\r\n\r\n  // GSDevTools.create({ animation: tl });\r\n}\r\n\r\nconst homepage = document.querySelector(\"[data-page='homepage']\");\r\n\r\nfunction homepageReload() {\r\n  window.addEventListener(\"resize\", function () {\r\n    setTimeout(() => {\r\n      location.reload();\r\n    }, 150);\r\n  });\r\n}\r\n\r\n// --------------- BLOG FILTERS ---------------\r\nfunction blogFilters() {\r\n  const filterList = document.querySelector(\".c-blog-filter-list\");\r\n  if (!filterList) return;\r\n  const allBtn = document.querySelector(\"[data-filter-all-btn]\");\r\n  filterList.prepend(allBtn);\r\n\r\n  const filterSection = document.querySelector(\".c-section.blog-filter\");\r\n\r\n  const buttons = [\r\n    ...document.querySelectorAll(\".c-pagination-btn\"),\r\n    ...document.querySelectorAll(\".c-pagination-page-btn\"),\r\n  ];\r\n\r\n  //   buttons.forEach(button => {\r\n  //     button.addEventListener(\"click\", () => {\r\n  //       setTimeout(() => {\r\n  //         ScrollTrigger.refresh();\r\n  //         lenis.scrollTo(filterSection, { offset: -180 });\r\n  //       }, 200);\r\n  //     });\r\n  //   });\r\n}\r\n\r\nfunction resourceAPIChecker() {\r\n  const filterSection = document.querySelector(\".c-section.blog-filter\");\r\n  if (!filterSection) return;\r\n\r\n  window.fsAttributes = window.fsAttributes || [];\r\n  window.fsAttributes.push([\r\n    \"cmsfilter\",\r\n    filterInstances => {\r\n      const [filterInstance] = filterInstances;\r\n\r\n      filterInstance.listInstance.on(\"renderitems\", renderedItems => {\r\n        blogFilters();\r\n      });\r\n    },\r\n  ]);\r\n}\r\n\r\n// --------------- CAREERS STRUCTURE ---------------\r\nfunction careersStructure() {\r\n  let teamItems = document.querySelectorAll(\"[data-careers-item]\");\r\n  if (teamItems.length === 0) return;\r\n\r\n  teamItems.forEach(function (cmsItem) {\r\n    let itemCategory = cmsItem\r\n      .querySelector(\"[data-group-name]\")\r\n      .textContent.trim();\r\n\r\n    let groupItems = document.querySelectorAll(\".c-careers-group-item\");\r\n    groupItems.forEach(function (group) {\r\n      let groupCategory = group\r\n        .querySelector(\"[data-group-title]\")\r\n        .textContent.trim();\r\n\r\n      if (groupCategory === itemCategory) {\r\n        group.querySelector(\"[data-careers-list]\").appendChild(cmsItem);\r\n      }\r\n    });\r\n  });\r\n}\r\n\r\n// --------------- HEADER DESKTOP ---------------\r\nfunction headerDesktop() {\r\n  const header = document.querySelector(\".c-header\");\r\n  const headerNav = document.querySelector(\".c-header-nav\");\r\n\r\n  if (!header || !headerNav) return;\r\n\r\n  let cleanupListeners = [];\r\n\r\n  // --- HEADER DROPDOWN LINKS\r\n  const overlay = document.querySelector(\".c-header-overlay\");\r\n  const ddItems = document.querySelectorAll(\".c-header-dd-item\");\r\n  const listItems = document.querySelectorAll(\".c-header-dd-group\");\r\n\r\n  ddItems.forEach(item => {\r\n    const list = item.querySelector(\".c-header-dd-group\");\r\n    const toggle = item.querySelector(\".c-header-dd-toggle\");\r\n\r\n    const toggleHandler = function (event) {\r\n      event.stopPropagation();\r\n\r\n      // Close all other items and remove .is-active from them\r\n      ddItems.forEach(otherItem => {\r\n        if (otherItem !== item) {\r\n          otherItem.classList.remove(\"is-active\");\r\n          const otherList = otherItem.querySelector(\".c-header-dd-group\");\r\n          if (otherList) {\r\n            otherList.classList.remove(\"is-open\");\r\n          }\r\n        }\r\n      });\r\n\r\n      // Toggle the current item\r\n      list.classList.toggle(\"is-open\");\r\n      item.classList.toggle(\"is-active\");\r\n\r\n      // Check if any dropdown is open and toggle overlay accordingly\r\n      const isAnyDropdownOpen = [...ddItems].some(item =>\r\n        item.classList.contains(\"is-active\")\r\n      );\r\n      overlay.classList.toggle(\"is-active\", isAnyDropdownOpen);\r\n    };\r\n\r\n    toggle.addEventListener(\"click\", toggleHandler);\r\n    cleanupListeners.push(() =>\r\n      toggle.removeEventListener(\"click\", toggleHandler)\r\n    );\r\n  });\r\n\r\n  // --- CLOSE ITEMS WHEN CLICKING OUTSIDE\r\n  const documentClickHandler = function (event) {\r\n    // Check if the click target is inside any dropdown\r\n    const isClickInsideDropdown = [...ddItems].some(item =>\r\n      item.contains(event.target)\r\n    );\r\n\r\n    // If the click is outside, close the dropdowns\r\n    if (!isClickInsideDropdown) {\r\n      ddItems.forEach(item => item.classList.remove(\"is-active\"));\r\n      listItems.forEach(item => item.classList.remove(\"is-open\"));\r\n      overlay.classList.remove(\"is-active\");\r\n    }\r\n  };\r\n  document.addEventListener(\"click\", documentClickHandler);\r\n  cleanupListeners.push(() =>\r\n    document.removeEventListener(\"click\", documentClickHandler)\r\n  );\r\n\r\n  // --- CLOSE ITEMS ON ESC KEY PRESS\r\n  const escKeyHandler = function (event) {\r\n    if (event.key === \"Escape\") {\r\n      ddItems.forEach(item => item.classList.remove(\"is-active\"));\r\n      listItems.forEach(item => item.classList.remove(\"is-open\"));\r\n      overlay.classList.remove(\"is-active\");\r\n    }\r\n  };\r\n  document.addEventListener(\"keydown\", escKeyHandler);\r\n  cleanupListeners.push(() =>\r\n    document.removeEventListener(\"keydown\", escKeyHandler)\r\n  );\r\n\r\n  return () => cleanupListeners.forEach(cleanup => cleanup());\r\n}\r\n\r\n// --------------- HEADER MOBILE ---------------\r\nfunction headerMobile() {\r\n  if (!document.querySelector(\".c-header\")) return;\r\n  let cleanupListeners = [];\r\n\r\n  const trigger = document.querySelector(\".c-header-nav-btn\");\r\n  const nav = document.querySelector(\".c-header-nav\");\r\n  const navInnerWrap = document.querySelector(\".c-header-inner\");\r\n  const headerRight = document.querySelector(\".c-btn-group.header\");\r\n  const menuLine1 = document.querySelectorAll(\".c-nav-bar.is-1\");\r\n  const menuLine2 = document.querySelectorAll(\".c-nav-bar.is-2\");\r\n  const menuLine3 = document.querySelectorAll(\".c-nav-bar.is-3\");\r\n  const menuIconWrap = document.querySelector(\".c-header-bar-icon\");\r\n  const headerCTA = document.querySelector(\".c-header-cta\");\r\n  let navStatus = \"closed\";\r\n\r\n  const tl = gsap.timeline({\r\n    paused: true,\r\n    defaults: {\r\n      ease: \"ease-in-out-1\",\r\n      duration: 0.8,\r\n    },\r\n  });\r\n\r\n  gsap.set(menuLine1, { transformOrigin: \"center center\" });\r\n  gsap.set(menuLine2, { transformOrigin: \"center center\" });\r\n  gsap.set(menuLine3, { transformOrigin: \"center center\" });\r\n\r\n  tl.fromTo(\r\n    nav,\r\n    { clipPath: \"inset(0% 0% 100% 0%)\" },\r\n    { clipPath: \"inset(0% 0% 0% 0%)\" }\r\n  );\r\n  tl.to(menuLine1, { rotation: 45, y: 5 }, 0);\r\n  tl.to(menuLine2, { width: 0 }, 0);\r\n  tl.to(menuLine3, { rotation: -45, y: -5 }, 0);\r\n  tl.to(menuIconWrap, { rotation: 180 }, 0);\r\n\r\n  const triggerHandler = function () {\r\n    if (navStatus === \"closed\") {\r\n      tl.restart();\r\n      //   lenis.stop();\r\n      navStatus = \"open\";\r\n      document.querySelector(\".c-header\").classList.add(\"is-open\");\r\n      document.querySelector(\"body\").classList.add(\"no-scroll\");\r\n    } else {\r\n      tl.reverse();\r\n      //   lenis.start();\r\n      navStatus = \"closed\";\r\n      document.querySelector(\".c-header\").classList.remove(\"is-open\");\r\n      document.querySelector(\"body\").classList.remove(\"no-scroll\");\r\n    }\r\n  };\r\n  trigger.addEventListener(\"click\", triggerHandler);\r\n  cleanupListeners.push(() =>\r\n    trigger.removeEventListener(\"click\", triggerHandler)\r\n  );\r\n\r\n  // Accordions\r\n  let accordions = document.querySelectorAll(\".c-header-dd-item\");\r\n  let active = null;\r\n\r\n  // accordions.forEach(accordion => {\r\n  //   const list = accordion.querySelector(\".c-header-dd-group\");\r\n  //   const arrow = accordion.querySelector(\".c-icon.dd-arrow\");\r\n  //   let tl = gsap.timeline({\r\n  //     paused: true,\r\n  //     defaults: {\r\n  //       duration: 0.8,\r\n  //       ease: \"ease-in-out-1\",\r\n  //     },\r\n  //     onStart: () => accordion.classList.add(\"is-open\"),\r\n  //     onReverse: () => accordion.classList.remove(\"is-open\")\r\n  //   });\r\n\r\n  //   tl.to(list, { height: \"auto\", opacity: 1 }, 0);\r\n  //   tl.to(arrow, { rotation: 180 }, 0);\r\n\r\n  //   accordion.tl = tl;\r\n\r\n  //   const accordionHandler = function (e) {\r\n  //     e.stopPropagation();\r\n\r\n  //     if (active && active === accordion) {\r\n  //       // If clicking the already active accordion, close it\r\n  //       accordion.tl.reverse();\r\n  //       active = null; // Reset active since it's closed\r\n  //     } else {\r\n  //       if (active) active.tl.reverse(); // Close the previously active accordion\r\n  //       accordion.tl.play(); // Open the clicked accordion\r\n  //       active = accordion; // Set the new active accordion\r\n  //     }\r\n  //   };\r\n  //   accordion.addEventListener(\"click\", accordionHandler);\r\n  //   cleanupListeners.push(() =>\r\n  //     accordion.removeEventListener(\"click\", accordionHandler)\r\n  //   );\r\n  // });\r\n\r\n  accordions.forEach(accordion => {\r\n    const list = accordion.querySelector(\".c-header-dd-group\");\r\n    const arrow = accordion.querySelector(\".c-icon.dd-arrow\");\r\n    let tl = gsap.timeline({\r\n      paused: true,\r\n      defaults: {\r\n        duration: 0.8,\r\n        ease: \"ease-in-out-1\",\r\n      },\r\n    });\r\n\r\n    tl.to(list, { height: \"auto\", opacity: 1 });\r\n    accordion.tl = tl;\r\n\r\n    const accordionHandler = function (e) {\r\n      e.stopPropagation();\r\n      if (active && active === accordion) {\r\n        // If clicking the already active accordion, close it\r\n        accordion.tl.reverse();\r\n        accordion.classList.remove(\"is-open\");\r\n        active = null; // Reset active since it's closed\r\n      } else {\r\n        if (active) {\r\n          active.tl.reverse();\r\n          active.classList.remove(\"is-open\");\r\n        }\r\n        accordion.tl.play(); // Open the clicked accordion\r\n        accordion.classList.add(\"is-open\");\r\n        active = accordion; // Set the new active accordion\r\n      }\r\n    };\r\n\r\n    accordion.addEventListener(\"click\", accordionHandler);\r\n    cleanupListeners.push(() =>\r\n      accordion.removeEventListener(\"click\", accordionHandler)\r\n    );\r\n  });\r\n\r\n  // Header right\r\n  nav.appendChild(headerCTA);\r\n  gsap.set(headerCTA, { display: \"flex\" });\r\n\r\n  return () => cleanupListeners.forEach(cleanup => cleanup());\r\n}\r\n\r\n// --------------- HOME LOADER ---------------\r\nfunction homeLoader() {\r\n  const sectionWrap = document.querySelector(\"[data-home-hero]\");\r\n  if (!sectionWrap) return;\r\n\r\n  const textRow = sectionWrap.querySelector(\".o-row.hm-hero\");\r\n  const visualRow = sectionWrap.querySelector(\".c-img-contain.hm-hero-visual\");\r\n  const bg = document.querySelector(\".c-img-contain.hm-hero-bg\");\r\n\r\n  const tl = gsap.timeline({\r\n    defaults: {\r\n      duration: 1.2,\r\n      ease: \"ease-out-1\",\r\n    },\r\n  });\r\n\r\n  gsap.set([textRow, visualRow], { y: \"6em\" });\r\n\r\n  tl.to(bg, { opacity: 1 });\r\n  tl.to(textRow, { y: \"0em\", opacity: 1 }, \"<\");\r\n  tl.to(visualRow, { y: \"0em\", opacity: 1 }, \"<0.2\");\r\n}\r\n\r\n// --------------- BUTTONS HOVER EFFECT ---------------\r\nfunction buttonHover() {\r\n  $(\r\n    \"[data-btn='wrap']:not([data-wf--global-button--settings-style='inline'])\"\r\n  ).each(function () {\r\n    const clipEl = $(this)\r\n      .find(\"[data-btn='clip']\")\r\n      .attr(\"aria-hidden\", \"true\");\r\n    const durationSetting = 0.4;\r\n    const easeSetting = \"power2.inOut\";\r\n\r\n    function getPercentTop(el, e) {\r\n      let elTop = el.offset().top - $(window).scrollTop();\r\n      let mouseTop = e.pageY - $(window).scrollTop() - elTop;\r\n      return (mouseTop / el.innerHeight()) * 100;\r\n    }\r\n\r\n    function getPercentLeft(el, e) {\r\n      let elLeft = el.offset().left;\r\n      let mouseLeft = e.pageX - elLeft;\r\n      return (mouseLeft / el.innerWidth()) * 100;\r\n    }\r\n\r\n    let initialBorderColor = $(this).css(\"border\");\r\n\r\n    $(this).on(\"mouseenter\", function (e) {\r\n      let percentTop = getPercentTop($(this), e);\r\n      let percentLeft = getPercentLeft($(this), e);\r\n      gsap.set(clipEl, { display: \"flex\" });\r\n      gsap.fromTo(\r\n        clipEl,\r\n        { clipPath: `circle(0% at ${percentLeft}% ${percentTop}%)` },\r\n        {\r\n          clipPath: `circle(141.4% at ${percentLeft}% ${percentTop}%)`,\r\n          duration: durationSetting,\r\n          ease: easeSetting,\r\n        }\r\n      );\r\n      gsap.to($(this), {\r\n        border: \"1px solid rgba(31, 27, 4, 1)\",\r\n        duration: durationSetting,\r\n        ease: easeSetting,\r\n      });\r\n    });\r\n    $(this).on(\"mouseleave\", function (e) {\r\n      let percentTop = getPercentTop($(this), e);\r\n      let percentLeft = getPercentLeft($(this), e);\r\n      gsap.to(clipEl, {\r\n        clipPath: `circle(0% at ${percentLeft}% ${percentTop}%)`,\r\n        overwrite: true,\r\n        duration: durationSetting,\r\n        ease: easeSetting,\r\n      });\r\n      gsap.to($(this), {\r\n        border: initialBorderColor,\r\n        duration: durationSetting,\r\n        ease: easeSetting,\r\n      });\r\n    });\r\n  });\r\n}\r\n\r\n// --------------- INFO STATS ---------------\r\nfunction homeInfoMobile() {\r\n  const statsInfo = document.querySelector(\".c-stats-info\");\r\n  if (!statsInfo) return;\r\n\r\n  let draggable = Draggable.create(statsInfo, {\r\n    type: \"x\",\r\n    bounds: \".o-row.stats-info\",\r\n    inertia: true,\r\n    onDrag: updateProgressBar,\r\n    onThrowUpdate: updateProgressBar,\r\n    onPress: function () {\r\n      gsap.set(this.target, { zIndex: 1 });\r\n    },\r\n    onRelease: function () {\r\n      gsap.set(this.target, { zIndex: \"\" });\r\n    },\r\n  })[0];\r\n\r\n  function updateProgressBar() {\r\n    let progress = 1 - (this.x - this.minX) / (this.maxX - this.minX);\r\n    gsap.to(\".c-stats-info-progress-bar\", {\r\n      width: `${progress * 100}%`,\r\n      ease: \"none\",\r\n    });\r\n  }\r\n\r\n  // Set initial width on page load\r\n  updateProgressBar.call(draggable);\r\n}\r\n\r\n// --------------- CASE TESTIMONIALS MARQUEE ---------------\r\nfunction caseTestimonialsMarquee() {\r\n  const wrap = document.querySelector(\".c-case-wrap\");\r\n  if (!wrap) return;\r\n\r\n  const list = document.querySelector(\".c-case-list\");\r\n  const duplicatedList = list.cloneNode(true);\r\n\r\n  wrap.appendChild(duplicatedList);\r\n\r\n  const caseItems = wrap.querySelectorAll(\".c-case-item\").length;\r\n  const marqueeDuration =\r\n    window.innerWidth <= 479 ? caseItems * 12 : caseItems * 9;\r\n\r\n  const tl = gsap.timeline();\r\n  tl.to([list, duplicatedList], {\r\n    xPercent: -100,\r\n    duration: marqueeDuration,\r\n    ease: \"linear\",\r\n    repeat: -1,\r\n  });\r\n}\r\n\r\n// --------------- INIT ---------------\r\nfunction init() {\r\n  statsCounter();\r\n  faqAccordions();\r\n  testimonialsTabber();\r\n  teamSlider();\r\n  tabber();\r\n  dtbTabber();\r\n  blogFilters();\r\n  resourceAPIChecker();\r\n  careersStructure();\r\n  storyboardAnimation();\r\n  caseTestimonialsMarquee();\r\n  if (homepage) {\r\n    homeLoader();\r\n  }\r\n  headerScrolled();\r\n}\r\n\r\ninit();\r\n\r\n// --------------- MATCHMEDIA (DESKTOP) ---------------\r\nmm.add(\"(min-width: 992px)\", () => {\r\n  const headerCleanup = headerDesktop();\r\n  industryCardHover();\r\n  splitTextInit();\r\n  headingsAnimation();\r\n  fade();\r\n  buttonHover();\r\n  // storyboardAnimation();\r\n  if (homepage) {\r\n    homepageReload();\r\n  }\r\n  return () => {\r\n    headerCleanup();\r\n  };\r\n});\r\n\r\n// --------------- MATCHMEDIA (TABLET AND MOBILE) ---------------\r\nmm.add(\"(max-width: 991px)\", () => {\r\n  testimonialsTabberMobile();\r\n\r\n  const headerCleanup = headerMobile();\r\n  //   document\r\n  //     .querySelector(\".c-header-nav\")\r\n  //     .setAttribute(\"data-lenis-prevent\", \"\");\r\n  if (homepage) {\r\n    homeInfoMobile();\r\n  }\r\n  return () => {\r\n    headerCleanup();\r\n    // document\r\n    //   .querySelector(\".c-header-nav\")\r\n    //   .removeAttribute(\"data-lenis-prevent\", \"\");\r\n    document\r\n      .querySelector(\".c-btn-group.header\")\r\n      .appendChild(document.querySelector(\".c-header-cta\"));\r\n    testimonialsTabberMobileRevert();\r\n  };\r\n});\r\n"]}