
(function () {
  document.documentElement.classList.add('uslc-js');
  function init() {
    var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
    var targets = document.querySelectorAll('.uslc-reveal, .uslc-stagger, .uslc-dome');
    if (reduce || !('IntersectionObserver' in window)) {
      targets.forEach(function (el) { el.classList.add('is-in'); });
    } else {
      var io = new IntersectionObserver(function (entries) {
        entries.forEach(function (e) {
          if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); }
        });
      }, { threshold: 0.16, rootMargin: '0px 0px -8% 0px' });
      targets.forEach(function (el) { io.observe(el); });
    }

    var nums = document.querySelectorAll('.uslc-num[data-count]');
    function run(el) {
      var t = parseFloat(el.getAttribute('data-count')) || 0;
      var sfx = el.getAttribute('data-suffix') || '';
      var dur = 1500, s = null;
      function step(ts) {
        if (!s) s = ts;
        var p = Math.min((ts - s) / dur, 1);
        el.textContent = Math.round(t * (1 - Math.pow(1 - p, 3))) + sfx;
        if (p < 1) requestAnimationFrame(step);
      }
      requestAnimationFrame(step);
    }
    if (reduce || !('IntersectionObserver' in window)) {
      nums.forEach(function (el) { el.textContent = el.getAttribute('data-count') + (el.getAttribute('data-suffix') || ''); });
    } else {
      var nio = new IntersectionObserver(function (entries) {
        entries.forEach(function (e) { if (e.isIntersecting) { run(e.target); nio.unobserve(e.target); } });
      }, { threshold: 0.5 });
      nums.forEach(function (el) { nio.observe(el); });
    }
  }
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);
  else init();
})();
