(function() {
  document.addEventListener('DOMContentLoaded', function() {
    // Elements that should fade in when in view
    var fadeInElements = document.querySelectorAll('.fade-in-on-scroll');

    // If IntersectionObserver is supported, use it for better performance
    if ('IntersectionObserver' in window) {
      // Adjusted options to help large elements fade in
      var observer = new IntersectionObserver(function(entries, observer) {
        entries.forEach(function(entry) {
          if (entry.isIntersecting) {
            entry.target.classList.add('fade-in-visible');
            observer.unobserve(entry.target);
          }
        });
      }, {
        threshold: 0.0,
        rootMargin: '0px 0px -10% 0px'
      });

      fadeInElements.forEach(function(el) {
        el.classList.add('fade-in-hidden');
        observer.observe(el);
      });
    } else {
      // Fallback if IntersectionObserver is not supported
      fadeInElements.forEach(function(el) {
        el.classList.add('fade-in-hidden');
      });

      var checkVisibility = function() {
        var windowBottom = window.innerHeight + window.scrollY;
        fadeInElements.forEach(function(el) {
          if ((el.getBoundingClientRect().top + window.scrollY) < windowBottom - (el.offsetHeight * 0.1)) {
            el.classList.add('fade-in-visible');
          }
        });
      };

      window.addEventListener('scroll', checkVisibility);
      checkVisibility();
    }
  });
})();
