{
  "version": 3,
  "sources": ["../../assets/js/carousel.js"],
  "sourcesContent": ["/**\n * Hero carousel controller.\n * Finds all [data-carousel] elements and adds arrow/dot navigation,\n * auto-advance, keyboard support, and prefers-reduced-motion awareness.\n */\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const prefersReducedMotion = window.matchMedia(\n    \"(prefers-reduced-motion: reduce)\",\n  ).matches;\n\n  document.querySelectorAll(\"[data-carousel]\").forEach((carousel) => {\n    const track = carousel.querySelector(\".hero-carousel-track\");\n    if (!track) return;\n\n    const slides = Array.from(track.children);\n    if (slides.length <= 1) return;\n\n    let current = 0;\n    let autoTimer = null;\n\n    // --- Inject arrows ---\n    const prevBtn = document.createElement(\"button\");\n    prevBtn.className = \"hero-carousel-arrow hero-carousel-prev\";\n    prevBtn.type = \"button\";\n    prevBtn.innerHTML = '<span aria-hidden=\"true\">\\u2039</span><span class=\"sr-only\">Previous slide</span>';\n\n    const nextBtn = document.createElement(\"button\");\n    nextBtn.className = \"hero-carousel-arrow hero-carousel-next\";\n    nextBtn.type = \"button\";\n    nextBtn.innerHTML = '<span aria-hidden=\"true\">\\u203A</span><span class=\"sr-only\">Next slide</span>';\n\n    carousel.appendChild(prevBtn);\n    carousel.appendChild(nextBtn);\n\n    // --- Inject dots ---\n    const dotsContainer = document.createElement(\"div\");\n    dotsContainer.className = \"hero-carousel-dots\";\n    dotsContainer.setAttribute(\"role\", \"tablist\");\n    dotsContainer.setAttribute(\"aria-label\", \"Slide navigation\");\n\n    slides.forEach((_, i) => {\n      const dot = document.createElement(\"button\");\n      dot.className = \"hero-carousel-dot\" + (i === 0 ? \" active\" : \"\");\n      dot.type = \"button\";\n      dot.setAttribute(\"role\", \"tab\");\n      dot.setAttribute(\"aria-label\", `Show slide ${i + 1} of ${slides.length}`);\n      dot.setAttribute(\"aria-selected\", i === 0 ? \"true\" : \"false\");\n      dot.addEventListener(\"click\", () => goTo(i));\n      dotsContainer.appendChild(dot);\n    });\n\n    carousel.appendChild(dotsContainer);\n\n    // Signal CSS that JS controls are ready\n    carousel.setAttribute(\"data-carousel-ready\", \"\");\n\n    // --- Navigation ---\n    function goTo(index) {\n      current = ((index % slides.length) + slides.length) % slides.length;\n      track.scrollTo({ left: current * track.offsetWidth, behavior: \"smooth\" });\n      updateDots();\n    }\n\n    function updateDots() {\n      dotsContainer.querySelectorAll(\".hero-carousel-dot\").forEach((dot, i) => {\n        dot.classList.toggle(\"active\", i === current);\n        dot.setAttribute(\"aria-selected\", i === current ? \"true\" : \"false\");\n      });\n    }\n\n    prevBtn.addEventListener(\"click\", () => {\n      goTo(current - 1);\n      resetAutoAdvance();\n    });\n\n    nextBtn.addEventListener(\"click\", () => {\n      goTo(current + 1);\n      resetAutoAdvance();\n    });\n\n    // --- Sync index on manual scroll (e.g. swipe on mobile) ---\n    let scrollTimeout;\n    track.addEventListener(\"scroll\", () => {\n      clearTimeout(scrollTimeout);\n      scrollTimeout = setTimeout(() => {\n        const idx = Math.round(track.scrollLeft / track.offsetWidth);\n        if (idx !== current) {\n          current = idx;\n          updateDots();\n        }\n      }, 100);\n    });\n\n    // --- Auto-advance ---\n    function startAutoAdvance() {\n      if (prefersReducedMotion) return;\n      stopAutoAdvance();\n      const delay = parseInt(carousel.dataset.carouselDelay, 10) || 6000;\n      autoTimer = setInterval(() => goTo(current + 1), delay);\n    }\n\n    function stopAutoAdvance() {\n      if (autoTimer) {\n        clearInterval(autoTimer);\n        autoTimer = null;\n      }\n    }\n\n    function resetAutoAdvance() {\n      stopAutoAdvance();\n      startAutoAdvance();\n    }\n\n    carousel.addEventListener(\"mouseenter\", stopAutoAdvance);\n    carousel.addEventListener(\"mouseleave\", startAutoAdvance);\n    carousel.addEventListener(\"focusin\", stopAutoAdvance);\n    carousel.addEventListener(\"focusout\", startAutoAdvance);\n\n    startAutoAdvance();\n\n    // --- Keyboard navigation ---\n    carousel.setAttribute(\"tabindex\", \"0\");\n    carousel.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"ArrowLeft\") {\n        e.preventDefault();\n        goTo(current - 1);\n        resetAutoAdvance();\n      } else if (e.key === \"ArrowRight\") {\n        e.preventDefault();\n        goTo(current + 1);\n        resetAutoAdvance();\n      }\n    });\n  });\n});\n"],
  "mappings": "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",
  "names": ["prefersReducedMotion", "carousel", "track", "slides", "current", "autoTimer", "prevBtn", "nextBtn", "dotsContainer", "_", "i", "dot", "goTo", "index", "updateDots", "resetAutoAdvance", "scrollTimeout", "idx", "startAutoAdvance", "stopAutoAdvance", "delay"]
}
