/** Shopify CDN: Minification failed

Line 101:1 Unexpected "*"
Line 105:8 Expected ":"
Line 108:9 Unexpected "stripShopifyAttributes("
Line 109:6 Unexpected "("
Line 110:7 Unexpected "("
Line 111:13 Expected ":"
Line 115:6 Unexpected "("
Line 116:4 Expected identifier but found "stripShopifyAttributes("
Line 120:9 Unexpected "waitForImages("
Line 121:7 Expected ":"
... and 58 more hidden warnings

**/
.image-marquee {
  --im-gap: var(--im-gap-desktop, 16px);
  --im-item-width: var(--im-item-width-desktop, 320px);
  --im-item-height: var(--im-item-height-desktop, 200px);

  padding-block: var(--im-padding-top, 0px) var(--im-padding-bottom, 0px);
}

@media screen and (max-width: 749px) {
  .image-marquee {
    --im-gap: var(--im-gap-mobile, 12px);
    --im-item-width: var(--im-item-width-mobile, 220px);
    --im-item-height: var(--im-item-height-mobile, 160px);
  }
}

.image-marquee__viewport {
  overflow: hidden;
  padding-inline: var(--im-track-padding-left, 0px) var(--im-track-padding-right, 0px);
}

.image-marquee__track {
  display: flex;
  gap: var(--im-gap);
  will-change: transform;
  animation-name: image-marquee-scroll;
  animation-duration: var(--im-duration, 20s);
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: normal;
  animation-play-state: paused;
}

.image-marquee[data-ready='true'] .image-marquee__track {
  animation-play-state: running;
}

.image-marquee[data-direction='right'] .image-marquee__track {
  animation-direction: reverse;
}

.image-marquee[data-pause-hover='true']:hover .image-marquee__track {
  animation-play-state: paused;
}

.image-marquee[data-pause-focus='true']:focus-within .image-marquee__track {
  animation-play-state: paused;
}

@keyframes image-marquee-scroll {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(var(--im-shift, -1000px));
  }
}

.image-marquee__item {
  flex: 0 0 var(--im-item-width);
  height: var(--im-item-height);
  border-radius: var(--im-radius, 2px);
  overflow: hidden;
}

.image-marquee__image {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: var(--im-fit, cover);
}

@media (prefers-reduced-motion: reduce) {
  .image-marquee__track {
    animation: none !important;
    transform: none !important;
  }

  .image-marquee[data-reduce-motion='manual_scroll'] .image-marquee__viewport {
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
  }
}

*** Add File: ../ShopifyShop/horizon/assets/image-marquee.js
const SELECTOR = '[data-image-marquee]';

function clamp(value, min, max) {
  return Math.min(Math.max(value, min), max);
}

function stripShopifyAttributes(element) {
  for (const attribute of Array.from(element.attributes)) {
    if (attribute.name.startsWith('data-shopify') || attribute.name === 'id') {
      element.removeAttribute(attribute.name);
    }
  }

  for (const child of Array.from(element.children)) {
    stripShopifyAttributes(child);
  }
}

function waitForImages(container, timeoutMs = 2000) {
  const images = Array.from(container.querySelectorAll('img'));
  const pending = images.filter((img) => !img.complete);
  if (pending.length === 0) return Promise.resolve();

  return new Promise((resolve) => {
    let resolved = false;
    const done = () => {
      if (resolved) return;
      resolved = true;
      resolve();
    };

    const timer = window.setTimeout(done, timeoutMs);
    pending.forEach((img) => {
      img.addEventListener(
        'load',
        () => {
          window.clearTimeout(timer);
          done();
        },
        { once: true }
      );
      img.addEventListener(
        'error',
        () => {
          window.clearTimeout(timer);
          done();
        },
        { once: true }
      );
    });
  });
}

function initMarquee(root) {
  if (!(root instanceof HTMLElement)) return;
  if (root.dataset.imInitialized === 'true') return;
  root.dataset.imInitialized = 'true';

  const viewport = root.querySelector('.image-marquee__viewport');
  const track = root.querySelector('[data-image-marquee-track]');
  if (!(viewport instanceof HTMLElement) || !(track instanceof HTMLElement)) return;

  const originalItems = Array.from(track.children).filter(
    (child) => child instanceof HTMLElement && child.dataset.imClone !== 'true'
  );

  if (originalItems.length === 0) return;

  let rebuildTimer = null;

  const rebuild = async () => {
    root.dataset.ready = 'false';

    for (const clone of Array.from(track.querySelectorAll('[data-im-clone="true"]'))) {
      clone.remove();
    }

    await waitForImages(track);

    await new Promise((r) => window.requestAnimationFrame(() => r()));

    const viewportWidth = viewport.getBoundingClientRect().width;
    const originalWidth = track.scrollWidth;
    if (!Number.isFinite(viewportWidth) || !Number.isFinite(originalWidth) || viewportWidth <= 0 || originalWidth <= 0) {
      return;
    }

    const speedRaw = Number.parseFloat(root.dataset.speed || '80');
    const speedPxPerSec = clamp(Number.isFinite(speedRaw) ? speedRaw : 80, 10, 2000);
    const durationSeconds = clamp(originalWidth / speedPxPerSec, 1, 600);

    root.style.setProperty('--im-duration', `${durationSeconds}s`);
    root.style.setProperty('--im-shift', `-${originalWidth}px`);

    const minWidthNeeded = originalWidth + viewportWidth;
    while (track.scrollWidth < minWidthNeeded) {
      for (const item of originalItems) {
        const clone = item.cloneNode(true);
        if (clone instanceof HTMLElement) {
          clone.dataset.imClone = 'true';
          clone.setAttribute('aria-hidden', 'true');
          stripShopifyAttributes(clone);
          track.appendChild(clone);
        }
      }
    }

    root.dataset.ready = 'true';
  };

  const scheduleRebuild = () => {
    if (rebuildTimer) window.clearTimeout(rebuildTimer);
    rebuildTimer = window.setTimeout(rebuild, 150);
  };

  const resizeObserver = new ResizeObserver(scheduleRebuild);
  resizeObserver.observe(viewport);

  window.addEventListener('load', rebuild, { once: true });
  rebuild();

  const sectionId = root.dataset.sectionId;
  const onUnload = (event) => {
    if (!event?.detail?.sectionId) return;
    if (sectionId && event.detail.sectionId === sectionId) {
      resizeObserver.disconnect();
    }
  };

  document.addEventListener('shopify:section:unload', onUnload, { once: true });
}

function initAll(context = document) {
  const roots = Array.from(context.querySelectorAll(SELECTOR));
  roots.forEach(initMarquee);
}

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', () => initAll(), { once: true });
} else {
  initAll();
}

document.addEventListener('shopify:section:load', (event) => {
  if (!event?.target) return;
  initAll(event.target);
});

*** Delete File: horizon/sections/image-marquee.liquid
*** Delete File: horizon/assets/image-marquee.css
*** Delete File: horizon/assets/image-marquee.js
