{
  "version": 3,
  "sources": ["/cdn/shop/t/9/assets/customer-cases-gallery.js?cc_v=20260519-dedupe"],
  "sourcesContent": ["/**\n * Customer Cases Gallery \u2014 ForzaCCB\n *\n * Features:\n *  - Client-side filter by category pill + make dropdown + text search\n *  - Client-side pagination (no reload)\n *  - Mixed aspect-ratio galleries: detects portrait vs landscape from data-ar\n *  - Flickity carousel for multi-image cards\n *  - Video play/pause\n *  - Full-screen lightbox (like product page modal)\n *  - URL deep-linking for all filter state\n *  - Show More / Show Less for long descriptions on mobile\n */\n\n(function () {\n    'use strict';\n\n    /* ------------------------------------------------------------------\n       Selectors\n       ------------------------------------------------------------------ */\n    const S = {\n        gallery: '[data-customer-cases-gallery]',\n        grid: '[data-cc-grid]',\n        card: '[data-cc-card]',\n        carousel: '[data-cc-carousel]',\n        categoryGroup: '[data-cc-category-group]',\n        categoryBtn: '[data-cc-category-group] [data-cc-category]',\n        makeSelect: '[data-cc-make-select]',\n        searchInput: '[data-cc-search]',\n        videoContainer: '[data-cc-video-container]',\n        video: '[data-cc-video]',\n        noResults: '[data-cc-no-results]',\n        descWrapper: '[data-cc-description-wrapper]',\n        descContent: '[data-cc-description]',\n        showMoreBtn: '[data-cc-show-more-btn]',\n        pagination: '[data-cc-pagination]',\n        lightboxTrigger: '[data-cc-lightbox-trigger]',\n        thumbSelect: '[data-cc-thumbs] [data-cc-thumb]',\n        // Lightbox\n        lightbox: '[data-cc-lightbox]',\n        lbBackdrop: '[data-cc-lightbox-backdrop]',\n        lbClose: '[data-cc-lightbox-close]',\n        lbPrev: '[data-cc-lightbox-prev]',\n        lbNext: '[data-cc-lightbox-next]',\n        lbStage: '[data-cc-lightbox-stage]',\n        lbImg: '[data-cc-lightbox-img]',\n        lbDots: '[data-cc-lightbox-dots]',\n        lbThumbs: '[data-cc-lightbox-thumbs]',\n        lbInfo: '[data-cc-lightbox-info]',\n    };\n\n    /* ------------------------------------------------------------------\n       Helpers\n       ------------------------------------------------------------------ */\n    function debounce(fn, ms) {\n        let t;\n        return (...args) => { clearTimeout(t); t = setTimeout(() => fn(...args), ms); };\n    }\n\n    /* ------------------------------------------------------------------\n       Main class\n       ------------------------------------------------------------------ */\n    class CustomerCasesGallery {\n        constructor(container) {\n            this.container = container;\n            this.grid = container.querySelector(S.grid);\n            this.cards = [];\n            this.categoryBtns = [];\n            this.makeSelect = null;\n            this.searchInput = null;\n            this.noResults = null;\n            this.paginationEl = null;\n\n            // State\n            this.currentCategory = 'all';\n            this.currentMake = 'all';\n            this.currentSearch = '';\n            this.perPage = parseInt(container.querySelector(S.grid)?.dataset.perPage || '12', 10);\n            this.currentPage = 1;\n            this.filteredCards = [];\n\n            // Lightbox state\n            this.lightbox = document.querySelector(S.lightbox);\n            this.lbImages = [];\n            this.lbIndex = 0;\n            this.lbPrevEl = null;\n            this.lbNextEl = null;\n            this.lbImgEl = null;\n            this.lbDotsEl = null;\n            this.lbInfoEl = null;\n\n            this.init();\n        }\n\n        /* ----------------------------------------------------------------\n           Init\n           ---------------------------------------------------------------- */\n        init() {\n            this.cards = Array.from(this.container.querySelectorAll(S.card));\n            this.dedupeCards();\n            this.cards = Array.from(this.container.querySelectorAll(S.card));\n            this.categoryBtns = Array.from(this.container.querySelectorAll(S.categoryBtn));\n            this.makeSelect = this.container.querySelector(S.makeSelect);\n            this.searchInput = this.container.querySelector(S.searchInput);\n            this.noResults = this.container.querySelector(S.noResults);\n            this.paginationEl = this.container.querySelector(S.pagination);\n\n            // Per-page from section setting (passed via data attribute on grid)\n            const pp = this.grid && parseInt(this.grid.dataset.perPage, 10);\n            if (pp && !isNaN(pp)) this.perPage = pp;\n\n            // Columns\n            const cols = this.grid && this.grid.dataset.columns;\n            if (cols === '3') this.grid.dataset.columns = '3'; // triggers CSS [data-columns=\"3\"]\n\n            this.detectCardAspectRatios();\n            this.populateMakeSelect();\n            this.addImageCountBadges();\n            this.bindEvents();\n            this.initCarousels();\n            this.initVideos();\n            this.initShowMore();\n            this.initLightbox();\n            this.parseUrlParams();\n            this.applyFilters();\n        }\n\n        dedupeCards() {\n            const seen = new Set();\n            this.cards.forEach(card => {\n                const title = [\n                    card.querySelector('.customer-case-card__overlay-make')?.textContent || '',\n                    card.querySelector('.customer-case-card__overlay-model')?.textContent || '',\n                    card.querySelector('.customer-case-card__overlay-category')?.textContent || '',\n                    card.querySelector('.customer-case-card__link-btn')?.getAttribute('href') || ''\n                ].join('|');\n                const key = (card.dataset.ccKey || title).replace(/\\s+/g, ' ').toLowerCase().trim();\n\n                if (!key) return;\n                if (seen.has(key)) {\n                    card.remove();\n                    return;\n                }\n                seen.add(key);\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Aspect Ratio Detection\n           Each card's gallery gets a dominant class based on its first\n           image's data-ar attribute so the container sizes correctly.\n           ---------------------------------------------------------------- */\n        detectCardAspectRatios() {\n            this.cards.forEach(card => {\n                const gallery = card.querySelector('.customer-case-card__gallery');\n                if (!gallery) return;\n\n                const firstSlide = gallery.querySelector('.customer-case-card__gallery-slide');\n                if (!firstSlide) return;\n\n                const ar = parseFloat(firstSlide.dataset.ar || '1.78');\n\n                if (ar < 0.85) {\n                    // Portrait (9:16 or similar)\n                    gallery.classList.add('is-portrait-dominant');\n                } else if (ar > 1.4) {\n                    // Landscape (16:9, 4:3 wide...)\n                    gallery.classList.add('is-landscape-dominant');\n                }\n                // else: square-ish \u2192 default 4:3 from CSS\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Image Count Badges\n           ---------------------------------------------------------------- */\n        addImageCountBadges() {\n            this.cards.forEach(card => {\n                const gallery = card.querySelector('.customer-case-card__gallery');\n                if (!gallery) return;\n                const slides = gallery.querySelectorAll('.customer-case-card__gallery-slide');\n                const count = slides.length;\n                if (count > 1) {\n                    gallery.dataset.imgCount = count + ' photos';\n                }\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Make Dropdown Population\n           ---------------------------------------------------------------- */\n        populateMakeSelect() {\n            if (!this.makeSelect) return;\n\n            const makes = new Set();\n            this.cards.forEach(card => {\n                const make = card.dataset.ccMake;\n                if (make && make.trim()) makes.add(make.trim());\n            });\n\n            // Remove old dynamic options\n            Array.from(this.makeSelect.options).slice(1).forEach(o => o.remove());\n\n            const sortedMakes = Array.from(makes).sort();\n            sortedMakes.forEach(make => {\n                const option = document.createElement('option');\n                option.value = make;\n                option.textContent = make;\n                this.makeSelect.appendChild(option);\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Events\n           ---------------------------------------------------------------- */\n        bindEvents() {\n            // Category pills\n            const categoryGroup = this.container.querySelector(S.categoryGroup);\n            if (categoryGroup) {\n                categoryGroup.addEventListener('click', e => {\n                    const btn = e.target.closest('[data-cc-category]');\n                    if (btn) {\n                        this.categoryBtns.forEach(b => b.classList.remove('is-active'));\n                        btn.classList.add('is-active');\n                        this.currentCategory = btn.dataset.ccCategory;\n                        this.currentPage = 1;\n                        this.applyFilters();\n                        this.updateUrlParams();\n                    }\n                });\n            }\n\n            // Make dropdown\n            if (this.makeSelect) {\n                this.makeSelect.addEventListener('change', e => {\n                    this.currentMake = e.target.value;\n                    this.currentPage = 1;\n                    this.applyFilters();\n                    this.updateUrlParams();\n                });\n            }\n\n            // Search\n            if (this.searchInput) {\n                this.searchInput.addEventListener('input', debounce(e => {\n                    this.currentSearch = e.target.value.toLowerCase().trim();\n                    this.currentPage = 1;\n                    this.applyFilters();\n                    this.updateUrlParams();\n                }, 220));\n            }\n\n            // Card thumbnail row \u2014 switch main image without opening lightbox\n            this.container.addEventListener('click', e => {\n                const thumb = e.target.closest(S.thumbSelect);\n                if (!thumb) return;\n                e.preventDefault();\n                e.stopPropagation();\n\n                const card = thumb.closest(S.card);\n                const gallery = card && card.querySelector('.customer-case-card__gallery');\n                const idx = parseInt(thumb.dataset.ccThumbIndex, 10) || 0;\n\n                if (gallery && gallery.flickityInstance) {\n                    gallery.flickityInstance.select(idx);\n                } else if (gallery) {\n                    const slides = gallery.querySelectorAll('.customer-case-card__gallery-slide');\n                    slides.forEach((s, i) => s.style.display = i === idx ? '' : 'none');\n                }\n\n                thumb.parentElement.querySelectorAll('[data-cc-thumb]').forEach(t => t.classList.remove('is-active'));\n                thumb.classList.add('is-active');\n            });\n\n            // Theme Editor\n            if (window.Shopify && window.Shopify.designMode) {\n                document.addEventListener('shopify:section:load', e => {\n                    if (e.target.querySelector(S.gallery)) this.reinit();\n                });\n                document.addEventListener('shopify:block:select', e => {\n                    const card = e.target.closest(S.card);\n                    if (card) card.scrollIntoView({ behavior: 'smooth', block: 'center' });\n                });\n            }\n        }\n\n        /* ----------------------------------------------------------------\n           Filtering + Pagination\n           ---------------------------------------------------------------- */\n        applyFilters() {\n            this.filteredCards = this.cards.filter(card => {\n                const cat = card.dataset.ccCategory || '';\n                const make = card.dataset.ccMake || '';\n                const search = card.dataset.ccSearch || '';\n\n                const matchCat = this.currentCategory === 'all' || cat === this.currentCategory;\n                const matchMake = this.currentMake === 'all' || make === this.currentMake;\n                const matchSearch = !this.currentSearch || search.includes(this.currentSearch);\n\n                return matchCat && matchMake && matchSearch;\n            });\n\n            // Show/hide all cards first\n            this.cards.forEach(card => card.classList.add('is-hidden'));\n\n            // Paginate\n            const start = (this.currentPage - 1) * this.perPage;\n            const end = start + this.perPage;\n            const pageCards = this.filteredCards.slice(start, end);\n\n            pageCards.forEach(card => {\n                card.classList.remove('is-hidden');\n\n                // Resize flickity for newly revealed cards\n                const carousel = card.querySelector(S.carousel);\n                if (carousel && carousel.flickityInstance) {\n                    setTimeout(() => {\n                        carousel.flickityInstance.resize();\n                        carousel.flickityInstance.reposition();\n                    }, 50);\n                }\n            });\n\n            // No results\n            if (this.noResults) {\n                if (this.filteredCards.length === 0 && this.cards.length > 0) {\n                    this.noResults.classList.add('is-visible');\n                } else {\n                    this.noResults.classList.remove('is-visible');\n                }\n            }\n\n            // Render pagination\n            this.renderPagination();\n        }\n\n        /* ----------------------------------------------------------------\n           Pagination Rendering\n           ---------------------------------------------------------------- */\n        renderPagination() {\n            if (!this.paginationEl) return;\n\n            const total = Math.ceil(this.filteredCards.length / this.perPage);\n\n            if (total <= 1) {\n                this.paginationEl.innerHTML = '';\n                return;\n            }\n\n            let html = '';\n\n            // Prev\n            html += `<button class=\"cc-page-btn\" data-page=\"prev\" ${this.currentPage === 1 ? 'disabled' : ''} aria-label=\"Previous page\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M15 18l-6-6 6-6\"/></svg>\n      </button>`;\n\n            // Page numbers: show max 7, with ellipsis\n            const pages = this.buildPageRange(this.currentPage, total);\n            pages.forEach(p => {\n                if (p === '...') {\n                    html += `<span style=\"padding:0 0.4rem;color:var(--cc-muted);\">...</span>`;\n                } else {\n                    html += `<button class=\"cc-page-btn ${p === this.currentPage ? 'is-active' : ''}\" data-page=\"${p}\" aria-label=\"Page ${p}\" ${p === this.currentPage ? 'aria-current=\"page\"' : ''}>${p}</button>`;\n                }\n            });\n\n            // Next\n            html += `<button class=\"cc-page-btn\" data-page=\"next\" ${this.currentPage === total ? 'disabled' : ''} aria-label=\"Next page\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 18l6-6-6-6\"/></svg>\n      </button>`;\n\n            this.paginationEl.innerHTML = html;\n\n            this.paginationEl.querySelectorAll('[data-page]').forEach(btn => {\n                btn.addEventListener('click', () => {\n                    const p = btn.dataset.page;\n                    const total2 = Math.ceil(this.filteredCards.length / this.perPage);\n\n                    if (p === 'prev') this.currentPage = Math.max(1, this.currentPage - 1);\n                    else if (p === 'next') this.currentPage = Math.min(total2, this.currentPage + 1);\n                    else this.currentPage = parseInt(p, 10);\n\n                    this.applyFilters();\n                    this.updateUrlParams();\n\n                    // Scroll to grid top\n                    const gridTop = this.grid.getBoundingClientRect().top + window.scrollY - 100;\n                    window.scrollTo({ top: gridTop, behavior: 'smooth' });\n                });\n            });\n        }\n\n        buildPageRange(current, total) {\n            if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n\n            const pages = [];\n            pages.push(1);\n\n            if (current > 3) pages.push('...');\n\n            const start = Math.max(2, current - 1);\n            const end = Math.min(total - 1, current + 1);\n\n            for (let i = start; i <= end; i++) pages.push(i);\n\n            if (current < total - 2) pages.push('...');\n            pages.push(total);\n\n            return pages;\n        }\n\n        /* ----------------------------------------------------------------\n           URL Deep Linking\n           ---------------------------------------------------------------- */\n        parseUrlParams() {\n            const params = new URLSearchParams(window.location.search);\n\n            const makeParam = params.get('make');\n            if (makeParam && this.makeSelect) {\n                const opt = Array.from(this.makeSelect.options).find(\n                    o => o.value.toLowerCase() === makeParam.toLowerCase()\n                );\n                if (opt) {\n                    this.makeSelect.value = opt.value;\n                    this.currentMake = opt.value;\n                }\n            }\n\n            const catParam = params.get('category');\n            if (catParam) {\n                const btn = this.categoryBtns.find(b => b.dataset.ccCategory === catParam);\n                if (btn) {\n                    this.categoryBtns.forEach(b => b.classList.remove('is-active'));\n                    btn.classList.add('is-active');\n                    this.currentCategory = catParam;\n                }\n            }\n\n            const searchParam = params.get('search');\n            if (searchParam && this.searchInput) {\n                this.searchInput.value = searchParam;\n                this.currentSearch = searchParam.toLowerCase().trim();\n            }\n\n            const pageParam = parseInt(params.get('page') || '1', 10);\n            if (pageParam > 1) this.currentPage = pageParam;\n        }\n\n        updateUrlParams() {\n            const url = new URL(window.location.href);\n\n            if (this.currentCategory !== 'all') url.searchParams.set('category', this.currentCategory);\n            else url.searchParams.delete('category');\n\n            if (this.currentMake !== 'all') url.searchParams.set('make', this.currentMake);\n            else url.searchParams.delete('make');\n\n            if (this.currentSearch) url.searchParams.set('search', this.currentSearch);\n            else url.searchParams.delete('search');\n\n            if (this.currentPage > 1) url.searchParams.set('page', this.currentPage);\n            else url.searchParams.delete('page');\n\n            window.history.replaceState({}, '', url);\n        }\n\n        /* ----------------------------------------------------------------\n           Flickity Carousels\n           ---------------------------------------------------------------- */\n        initCarousels() {\n            if (typeof Flickity === 'undefined') {\n                setTimeout(() => this.initCarousels(), 120);\n                return;\n            }\n\n            this.container.querySelectorAll(S.carousel).forEach(carousel => {\n                if (carousel.flickityInstance) return;\n\n                const flkty = new Flickity(carousel, {\n                    cellAlign: 'left',\n                    contain: true,\n                    wrapAround: true,\n                    pageDots: true,\n                    prevNextButtons: true,\n                    draggable: true,\n                    adaptiveHeight: false,\n                    lazyLoad: 1,\n                    imagesLoaded: true,\n                });\n\n                carousel.flickityInstance = flkty;\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Video Play/Pause\n           ---------------------------------------------------------------- */\n        initVideos() {\n            this.container.querySelectorAll(S.videoContainer).forEach(vc => {\n                const video = vc.querySelector(S.video);\n                if (!video) return;\n\n                vc.addEventListener('click', () => {\n                    if (video.paused) { video.play(); vc.classList.add('is-playing'); }\n                    else { video.pause(); vc.classList.remove('is-playing'); }\n                });\n\n                video.addEventListener('play', () => vc.classList.add('is-playing'));\n                video.addEventListener('pause', () => vc.classList.remove('is-playing'));\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Show More (mobile descriptions)\n           ---------------------------------------------------------------- */\n        initShowMore() {\n            const isMobile = window.innerWidth < 750;\n\n            this.cards.forEach(card => {\n                const wrapper = card.querySelector(S.descWrapper);\n                const content = card.querySelector(S.descContent);\n                const btn = card.querySelector(S.showMoreBtn);\n                if (!wrapper || !content || !btn) return;\n\n                wrapper.classList.remove('is-expanded');\n                btn.classList.remove('is-visible', 'is-expanded');\n                btn.childNodes[0].textContent = 'Show More';\n\n                if (isMobile && content.offsetHeight > 120) {\n                    btn.classList.add('is-visible');\n                    btn.onclick = () => {\n                        const expanded = wrapper.classList.toggle('is-expanded');\n                        btn.classList.toggle('is-expanded', expanded);\n                        btn.childNodes[0].textContent = expanded ? 'Show Less' : 'Show More';\n                        if (!expanded) card.scrollIntoView({ behavior: 'smooth', block: 'start' });\n                    };\n                }\n            });\n        }\n\n        /* ----------------------------------------------------------------\n           Lightbox\n           ---------------------------------------------------------------- */\n        initLightbox() {\n            if (!this.lightbox) return;\n\n            this.lbImgEl = this.lightbox.querySelector(S.lbImg);\n            this.lbThumbsEl = this.lightbox.querySelector(S.lbThumbs);\n            this.lbInfoEl = this.lightbox.querySelector(S.lbInfo);\n            this.lbPrevEl = this.lightbox.querySelector(S.lbPrev);\n            this.lbNextEl = this.lightbox.querySelector(S.lbNext);\n\n            // Open: click on gallery\n            this.container.addEventListener('click', e => {\n                const trigger = e.target.closest(S.lightboxTrigger);\n                if (!trigger) return;\n\n                // Don't open if clicking on Flickity buttons/dots\n                if (e.target.closest('.flickity-button, .flickity-page-dots')) return;\n\n                // Don't open for video\n                if (e.target.closest(S.videoContainer)) return;\n\n                const card = trigger.closest(S.card);\n                const gallery = trigger.classList.contains('customer-case-card__gallery')\n                    ? trigger\n                    : card && card.querySelector('.customer-case-card__gallery');\n                if (!gallery) return;\n\n                const slides = Array.from(gallery.querySelectorAll('.customer-case-card__gallery-slide'));\n                if (slides.length === 0) return;\n\n                // Determine starting index: explicit thumb index, else Flickity selection\n                let startIdx = 0;\n                if (trigger.dataset.ccThumbIndex !== undefined) {\n                    startIdx = parseInt(trigger.dataset.ccThumbIndex, 10) || 0;\n                } else if (gallery.flickityInstance) {\n                    startIdx = gallery.flickityInstance.selectedIndex;\n                }\n\n                const imgs = slides.map(slide => {\n                    const img = slide.querySelector('img');\n                    return {\n                        src: img ? (img.dataset.src || img.src || img.currentSrc || '') : '',\n                        alt: img ? (img.alt || '') : '',\n                    };\n                }).filter(i => i.src);\n\n                if (imgs.length === 0) return;\n\n                // Build metadata for lightbox info panel\n                const make = card ? (card.querySelector('.customer-case-card__overlay-make')?.textContent?.trim() || '') : '';\n                const model = card ? (card.querySelector('.customer-case-card__overlay-model')?.textContent?.trim() || '') : '';\n                const category = card ? (card.querySelector('.customer-case-card__overlay-category')?.textContent?.trim() || '') : '';\n                const descHtml = card ? (card.querySelector('.customer-case-card__desc')?.innerHTML?.trim() || '') : '';\n                const title = [make, model].filter(Boolean).join(' ');\n\n                this.openLightbox(imgs, startIdx, {\n                    title: title,\n                    category: category,\n                    descriptionHtml: descHtml\n                });\n            });\n\n            // Close\n            const close = this.lightbox.querySelector(S.lbClose);\n            const backdrop = this.lightbox.querySelector(S.lbBackdrop);\n\n            if (close) close.addEventListener('click', () => this.closeLightbox());\n            if (backdrop) backdrop.addEventListener('click', () => this.closeLightbox());\n\n            // Prev / Next\n            if (this.lbPrevEl) this.lbPrevEl.addEventListener('click', () => this.lbGo(-1));\n            if (this.lbNextEl) this.lbNextEl.addEventListener('click', () => this.lbGo(1));\n\n            // Keyboard\n            document.addEventListener('keydown', e => {\n                if (this.lightbox.hasAttribute('hidden')) return;\n                if (e.key === 'Escape') this.closeLightbox();\n                if (e.key === 'ArrowLeft') this.lbGo(-1);\n                if (e.key === 'ArrowRight') this.lbGo(1);\n            });\n\n            // Touch swipe\n            let touchStartX = null;\n            this.lightbox.addEventListener('touchstart', e => { touchStartX = e.touches[0].clientX; }, { passive: true });\n            this.lightbox.addEventListener('touchend', e => {\n                if (touchStartX === null) return;\n                const dx = e.changedTouches[0].clientX - touchStartX;\n                if (Math.abs(dx) > 40) this.lbGo(dx < 0 ? 1 : -1);\n                touchStartX = null;\n            });\n        }\n\n        openLightbox(images, startIndex, meta) {\n            this.lbImages = images;\n            this.lbIndex = startIndex;\n            this.lbMeta = meta || {};\n\n            this.lightbox.removeAttribute('hidden');\n            document.body.style.overflow = 'hidden';\n\n            this.lbRender();\n        }\n\n        closeLightbox() {\n            this.lightbox.setAttribute('hidden', '');\n            document.body.style.overflow = '';\n        }\n\n        lbGo(delta) {\n            const len = this.lbImages.length;\n            this.lbIndex = ((this.lbIndex + delta) + len) % len;\n            this.lbRender();\n        }\n\n        lbRender() {\n            if (!this.lbImgEl) return;\n\n            const img = this.lbImages[this.lbIndex];\n            const total = this.lbImages.length;\n\n            // Use high-res source: replace width param\n            const fullSrc = img.src.replace(/&width=\\d+/, '&width=1600').replace(/\\?width=\\d+/, '?width=1600');\n\n            this.lbImgEl.classList.add('is-loading');\n            this.lbImgEl.src = fullSrc;\n            this.lbImgEl.alt = img.alt;\n            this.lbImgEl.onload = () => this.lbImgEl.classList.remove('is-loading');\n\n            // Thumbnails\n            if (this.lbThumbsEl) {\n                if (total <= 1) {\n                    this.lbThumbsEl.innerHTML = '';\n                    if (this.lbThumbsEl.parentElement) this.lbThumbsEl.parentElement.hidden = true;\n                } else {\n                    if (this.lbThumbsEl.parentElement) this.lbThumbsEl.parentElement.hidden = false;\n\n                    // Only rebuild if images changed or empty\n                    const currentThumbsCount = this.lbThumbsEl.querySelectorAll('.cc-one-thumb').length;\n                    if (currentThumbsCount !== total) {\n                        this.lbThumbsEl.innerHTML = this.lbImages.map((img, i) => {\n                            // Use smaller size for thumbs\n                            const thumbSrc = img.src.replace(/&width=\\d+/, '&width=150').replace(/\\?width=\\d+/, '?width=150');\n                            return `<div class=\"cc-one-thumb\" data-idx=\"${i}\"><img src=\"${thumbSrc}\" alt=\"\"></div>`;\n                        }).join('');\n\n                        this.lbThumbsEl.querySelectorAll('.cc-one-thumb').forEach(thumb => {\n                            thumb.addEventListener('click', () => {\n                                this.lbIndex = parseInt(thumb.dataset.idx, 10);\n                                this.lbRender();\n                            });\n                        });\n                    }\n\n                    // Highlight active\n                    this.lbThumbsEl.querySelectorAll('.cc-one-thumb').forEach((thumb, i) => {\n                        thumb.classList.toggle('is-active', i === this.lbIndex);\n                        if (i === this.lbIndex) {\n                            thumb.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });\n                        }\n                    });\n                }\n            }\n\n            // Info\n            if (this.lbInfoEl) {\n                const countStr = total > 1 ? `${this.lbIndex + 1} / ${total}` : '';\n                const title = this.lbMeta && this.lbMeta.title ? this.lbMeta.title : '';\n                const category = this.lbMeta && this.lbMeta.category ? this.lbMeta.category : '';\n                const descriptionHtml = this.lbMeta && this.lbMeta.descriptionHtml ? this.lbMeta.descriptionHtml : '';\n\n                let infoHtml = '';\n                infoHtml += '<div class=\"cc-lightbox__info-head\">';\n                infoHtml += `<p class=\"cc-lightbox__info-title\">${title || 'Customer Case'}</p>`;\n                if (countStr) {\n                    infoHtml += `<span class=\"cc-lightbox__info-count\">${countStr}</span>`;\n                }\n                infoHtml += '</div>';\n\n                if (category) {\n                    infoHtml += `<p class=\"cc-lightbox__info-category\">${category}</p>`;\n                }\n\n                if (descriptionHtml) {\n                    infoHtml += `<div class=\"cc-lightbox__desc rte\">${descriptionHtml}</div>`;\n                }\n\n                this.lbInfoEl.innerHTML = infoHtml;\n            }\n\n            // Hide nav if single\n            if (this.lbPrevEl) this.lbPrevEl.style.display = total <= 1 ? 'none' : '';\n            if (this.lbNextEl) this.lbNextEl.style.display = total <= 1 ? 'none' : '';\n        }\n\n        /* ----------------------------------------------------------------\n           Reinitialize (Theme Editor)\n           ---------------------------------------------------------------- */\n        reinit() {\n            this.cards = Array.from(this.container.querySelectorAll(S.card));\n            this.categoryBtns = Array.from(this.container.querySelectorAll(S.categoryBtn));\n            this.makeSelect = this.container.querySelector(S.makeSelect);\n            this.searchInput = this.container.querySelector(S.searchInput);\n            this.noResults = this.container.querySelector(S.noResults);\n            this.paginationEl = this.container.querySelector(S.pagination);\n\n            if (this.makeSelect) {\n                const first = this.makeSelect.options[0];\n                this.makeSelect.innerHTML = '';\n                this.makeSelect.appendChild(first);\n                this.populateMakeSelect();\n            }\n\n            this.detectCardAspectRatios();\n            this.addImageCountBadges();\n            this.initCarousels();\n            this.initVideos();\n            this.initShowMore();\n            this.currentPage = 1;\n            this.applyFilters();\n        }\n    }\n\n    /* ------------------------------------------------------------------\n       Bootstrap\n       ------------------------------------------------------------------ */\n    function init() {\n        document.querySelectorAll(S.gallery).forEach(gallery => {\n            if (!gallery._ccInstance) {\n                gallery._ccInstance = new CustomerCasesGallery(gallery);\n            }\n        });\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n\n    document.addEventListener('shopify:section:load', e => {\n        const g = e.target.querySelector(S.gallery);\n        if (g && !g._ccInstance) g._ccInstance = new CustomerCasesGallery(g);\n    });\n\n})();\n"],
  "mappings": "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",
  "names": ["img"]
}
