sscs-Gutenberg-js

document.documentElement.classList.add("js");
const toggle = document.querySelector(".menu-toggle");
const nav = document.querySelector(".main-nav");

if (toggle && nav) {
  toggle.addEventListener("click", () => {
    const isOpen = nav.classList.toggle("open");
    toggle.setAttribute("aria-expanded", String(isOpen));
  });
}

document.querySelectorAll(".main-nav a").forEach((link) => {
  link.addEventListener("click", () => {
    if (nav) {
      nav.classList.remove("open");
    }
    if (toggle) {
      toggle.setAttribute("aria-expanded", "false");
    }
  });
});

document.addEventListener("keydown", (event) => {
  if (event.key === "Escape" && nav?.classList.contains("open")) {
    nav.classList.remove("open");
    toggle?.setAttribute("aria-expanded", "false");
    toggle?.focus();
  }
});

const revealItems = document.querySelectorAll(".reveal");
const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;

if (reduceMotion || !("IntersectionObserver" in window)) {
  revealItems.forEach((item) => item.classList.add("is-visible"));
} else {
  const observer = new IntersectionObserver(
    (entries) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          entry.target.classList.add("is-visible");
          observer.unobserve(entry.target);
        }
      });
    },
    { threshold: 0.16 }
  );

  revealItems.forEach((item) => observer.observe(item));
}
const testimonialCarousel = document.querySelector("[data-testimonial-carousel]");

if (testimonialCarousel) {
  const track = testimonialCarousel.querySelector(".testimonial-track");
  const slides = Array.from(testimonialCarousel.querySelectorAll("[data-testimonial-slide]"));
  const dots = Array.from(testimonialCarousel.querySelectorAll("[data-testimonial-dot]"));
  const prev = testimonialCarousel.querySelector("[data-testimonial-prev]");
  const next = testimonialCarousel.querySelector("[data-testimonial-next]");
  let currentSlide = 0;

  const setSlide = (index) => {
    if (!track || slides.length === 0) return;
    currentSlide = (index + slides.length) % slides.length;
    track.style.transform = `translateX(-${currentSlide * 100}%)`;

    slides.forEach((slide, slideIndex) => {
      slide.setAttribute("aria-hidden", String(slideIndex !== currentSlide));
    });

    dots.forEach((dot, dotIndex) => {
      const isActive = dotIndex === currentSlide;
      dot.classList.toggle("is-active", isActive);
      dot.setAttribute("aria-current", isActive ? "true" : "false");
    });
  };

  prev?.addEventListener("click", () => setSlide(currentSlide - 1));
  next?.addEventListener("click", () => setSlide(currentSlide + 1));

  dots.forEach((dot, dotIndex) => {
    dot.addEventListener("click", () => setSlide(dotIndex));
  });

  testimonialCarousel.addEventListener("keydown", (event) => {
    if (event.key === "ArrowLeft") setSlide(currentSlide - 1);
    if (event.key === "ArrowRight") setSlide(currentSlide + 1);
  });

  setSlide(0);
}