How to create 3d collections slider section in shopify store?

You can add collections slider section in your shopify store by adding custom code. Here is the code attached below.

https://youtu.be/MhLOtN1gKfg
{%- style -%}
  #collection-slider-{{ section.id }} {
    padding-top: {{ section.settings.padding_top | times: 0.75 | round: 0 }}px;
    padding-bottom: {{ section.settings.padding_bottom | times: 0.75 | round: 0 }}px;
  }

  @media screen and (min-width: 750px) {
    #collection-slider-{{ section.id }} {
      padding-top: {{ section.settings.padding_top }}px;
      padding-bottom: {{ section.settings.padding_bottom }}px;
    }
  }

  #shopify-section-{{ section.id }} {
    background-color: {{ section.settings.background_color }};
    color: {{ section.settings.text_color }};
    /* Shadow toggle: values become "none" when disabled, removing paint cost entirely */
    --card-shadow-rest: {% if section.settings.enable_shadow %}0 8px 24px rgba(0, 0, 0, 0.08){% else %}none{% endif %};
    --card-shadow-hover: {% if section.settings.enable_shadow %}0 16px 40px rgba(0, 0, 0, 0.12){% else %}none{% endif %};
    --card-shadow-active: {% if section.settings.enable_shadow %}0 20px 50px rgba(0, 0, 0, 0.15){% else %}none{% endif %};
    /* Border toggle: width collapses to 0 when disabled, so no border is painted */
    --card-border-width: {% if section.settings.enable_border %}{{ section.settings.border_width }}px{% else %}0px{% endif %};
    --card-border-color: {{ section.settings.border_color }};
  }

  #shopify-section-{{ section.id }} .collection-slider__arrow {
    background-color: {{ section.settings.arrow_background }};
    color: {{ section.settings.arrow_color }};
    border: 2px solid {{ section.settings.arrow_border_color }};
  }

  #shopify-section-{{ section.id }} .collection-slider__arrow:hover {
    background-color: {{ section.settings.arrow_background_hover }};
    color: {{ section.settings.arrow_color_hover }};
    border-color: {{ section.settings.arrow_border_color_hover }};
  }
{%- endstyle -%}

<style>
  #collection-slider-{{ section.id }} {
    position: relative;
    width: 100%;
    overflow: hidden;
  }

  #collection-slider-{{ section.id }} .collection-slider__container {
    position: relative;
    padding: 60px 0;
  }

  #collection-slider-{{ section.id }} .collection-slider__track-container {
    position: relative;
    width: 100%;
    height: 500px;
    display: flex;
    align-items: center;
    justify-content: center;
    /* Isolates layout/paint work to this box so slide animation doesn't force
       the browser to re-check the rest of the page on every frame */
    contain: layout style paint;
  }

  #collection-slider-{{ section.id }} .collection-slider__track {
    position: relative;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  }

  #collection-slider-{{ section.id }} .collection-slider__slide {
    position: absolute;
    width: 340px;
    height: 450px;
    /* transform/opacity only: cheap, GPU-composited properties */
    transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.6s cubic-bezier(0.4, 0, 0.2, 1);
    opacity: 0.6;
    transform: translate3d(0, 0, 0) scale(0.85);
    will-change: transform, opacity;
  }

  #collection-slider-{{ section.id }} .collection-slider__card {
    display: block;
    position: relative;
    width: 100%;
    height: 100%;
    background: white;
    border-radius: {{ section.settings.card_border_radius }}px;
    overflow: hidden;
    border: var(--card-border-width) solid var(--card-border-color);
    box-shadow: var(--card-shadow-rest);
    transition: box-shadow 0.5s cubic-bezier(0.4, 0, 0.2, 1), transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
    cursor: pointer;
  }

  #collection-slider-{{ section.id }} .collection-slider__card:hover {
    transform: translateY(-8px);
    box-shadow: var(--card-shadow-hover);
  }

  #collection-slider-{{ section.id }} .collection-slider__image-wrapper {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #f5f5f5;
  }

  #collection-slider-{{ section.id }} .collection-slider__image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  }

  #collection-slider-{{ section.id }} .collection-slider__card:hover .collection-slider__image {
    transform: scale(1.05);
  }

  #collection-slider-{{ section.id }} .collection-slider__content {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 80px;
    background: white;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-top: 1px solid rgba(0, 0, 0, 0.05);
    z-index: 2;
  }

  #collection-slider-{{ section.id }} .collection-slider__title {
    font-size: 18px;
    font-weight: 600;
    margin: 0;
    text-align: center;
    color: #333;
    line-height: 1.3;
  }

  #collection-slider-{{ section.id }} .collection-slider__navigation {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    transform: translateY(-50%);
    z-index: 10;
    pointer-events: none;
  }

  #collection-slider-{{ section.id }} .collection-slider__arrow {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 48px;
    height: 48px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    pointer-events: auto;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: var(--card-shadow-rest);
    z-index: 20;
  }

  #collection-slider-{{ section.id }} .collection-slider__arrow:hover:not(:disabled) {
    transform: translateY(-50%) scale(1.1);
    box-shadow: var(--card-shadow-hover);
  }

  #collection-slider-{{ section.id }} .collection-slider__arrow:disabled {
    opacity: 0.3;
    cursor: not-allowed;
  }

  #collection-slider-{{ section.id }} .collection-slider__arrow svg {
    width: 24px;
    height: 24px;
  }

  #collection-slider-{{ section.id }} .collection-slider__arrow--prev {
    left: 30px;
  }

  #collection-slider-{{ section.id }} .collection-slider__arrow--next {
    right: 30px;
  }

  #collection-slider-{{ section.id }} .section-header {
    margin-bottom: 0px;
    {% if section.settings.text_alignment == 'left' %}
      text-align: left;
    {% elsif section.settings.text_alignment == 'right' %}
      text-align: right;
    {% else %}
      text-align: center;
    {% endif %}
  }

  {% if section.settings.text_alignment == 'left' %}
    #collection-slider-{{ section.id }} .section-subtitle {
      margin: 0;
    }
  {% elsif section.settings.text_alignment == 'right' %}
    #collection-slider-{{ section.id }} .section-subtitle {
      margin: 0 0 0 auto;
    }
  {% else %}
    #collection-slider-{{ section.id }} .section-subtitle {
      margin: 0 auto;
    }
  {% endif %}

  #collection-slider-{{ section.id }} .section-title {
    font-size: 40px;
    font-weight: 700;
    margin: 0 0 0px 0;
    line-height: 1.2;
    color: {{ section.settings.text_color }};
  }
  #collection-slider-{{ section.id }} .section-title p {
    margin: 0;
   }

  #collection-slider-{{ section.id }} .section-subtitle {
    font-size: 18px;
    color: {{ section.settings.text_color }};
    max-width: 500px;
    line-height: 1.6;
  }

  #collection-slider-{{ section.id }} .page-width {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 60px;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.active {
    opacity: 1;
    transform: translate3d(0, 0, 0) scale(1) !important;
    z-index: 10;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.active .collection-slider__card {
    box-shadow: var(--card-shadow-active);
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.left-1 {
    transform: translate3d(-190px, 0, 0) scale(0.92);
    opacity: 0.8;
    z-index: 5;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.left-2 {
    transform: translate3d(-340px, 0, 0) scale(0.85);
    opacity: 0.6;
    z-index: 4;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.right-1 {
    transform: translate3d(190px, 0, 0) scale(0.92);
    opacity: 0.8;
    z-index: 5;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.right-2 {
    transform: translate3d(340px, 0, 0) scale(0.85);
    opacity: 0.6;
    z-index: 4;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.left-3,
  #collection-slider-{{ section.id }} .collection-slider__slide.right-3 {
    opacity: 0.3;
    transform: translate3d(0, 0, 0) scale(0.75);
    z-index: 1;
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.left-3 {
    transform: translate3d(-480px, 0, 0) scale(0.75);
  }

  #collection-slider-{{ section.id }} .collection-slider__slide.right-3 {
    transform: translate3d(480px, 0, 0) scale(0.75);
  }

  @media (max-width: 1200px) {
    #collection-slider-{{ section.id }} .collection-slider__slide {
      width: 300px;
      height: 420px;
    }

    #collection-slider-{{ section.id }} .collection-slider__track-container {
      height: 470px;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow--prev {
      left: 20px;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow--next {
      right: 20px;
    }

    #collection-slider-{{ section.id }} .page-width {
      padding: 0 40px;
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.left-1 {
      transform: translate3d(-170px, 0, 0) scale(0.92);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.left-2 {
      transform: translate3d(-300px, 0, 0) scale(0.85);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.right-1 {
      transform: translate3d(170px, 0, 0) scale(0.92);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.right-2 {
      transform: translate3d(300px, 0, 0) scale(0.85);
    }
  }

  @media (max-width: 768px) {
    #collection-slider-{{ section.id }} .collection-slider__slide {
      width: 260px;
      height: 380px;
    }

    #collection-slider-{{ section.id }} .collection-slider__track-container {
      height: 430px;
    }

    #collection-slider-{{ section.id }} .collection-slider__image {
      object-fit: contain;
    }

    #collection-slider-{{ section.id }} .collection-slider__card:hover .collection-slider__image {
      transform: scale(1.02);
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow {
      width: 40px;
      height: 40px;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow svg {
      width: 20px;
      height: 20px;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow--prev {
      left: 10px;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow--next {
      right: 10px;
    }

    #collection-slider-{{ section.id }} .section-title {
      font-size: 32px;
    }

    #collection-slider-{{ section.id }} .section-subtitle {
      font-size: 16px;
    }

    #collection-slider-{{ section.id }} .page-width {
      padding: 0 30px;
    }

    #collection-slider-{{ section.id }} .collection-slider__content {
      height: 70px;
      padding: 16px;
    }

    #collection-slider-{{ section.id }} .collection-slider__title {
      font-size: 16px;
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.left-1 {
      transform: translate3d(-150px, 0, 0) scale(0.92);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.left-2 {
      transform: translate3d(-260px, 0, 0) scale(0.85);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.right-1 {
      transform: translate3d(150px, 0, 0) scale(0.92);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.right-2 {
      transform: translate3d(260px, 0, 0) scale(0.85);
    }
  }

  @media (max-width: 480px) {
    #collection-slider-{{ section.id }} .collection-slider__slide {
      width: 220px;
      height: 340px;
    }

    #collection-slider-{{ section.id }} .collection-slider__track-container {
      height: 390px;
    }

    #collection-slider-{{ section.id }} .collection-slider__image {
      object-fit: contain;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow {
      width: 36px;
      height: 36px;
    }

    #collection-slider-{{ section.id }} .collection-slider__arrow svg {
      width: 18px;
      height: 18px;
    }

    #collection-slider-{{ section.id }} .section-title {
      font-size: 28px;
    }

    #collection-slider-{{ section.id }} .section-subtitle {
      font-size: 14px;
    }

    #collection-slider-{{ section.id }} .page-width {
      padding: 0 20px;
    }

    #collection-slider-{{ section.id }} .collection-slider__content {
      height: 60px;
      padding: 12px;
    }

    #collection-slider-{{ section.id }} .collection-slider__title {
      font-size: 14px;
    }

    #collection-slider-{{ section.id }} .collection-slider__slide:not(.active):not(.left-1):not(.right-1) {
      display: none;
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.left-1 {
      transform: translate3d(-130px, 0, 0) scale(0.85);
    }

    #collection-slider-{{ section.id }} .collection-slider__slide.right-1 {
      transform: translate3d(130px, 0, 0) scale(0.85);
    }
  }

  @media (max-width: 360px) {
    #collection-slider-{{ section.id }} .collection-slider__slide {
      width: 200px;
      height: 320px;
    }

    #collection-slider-{{ section.id }} .collection-slider__track-container {
      height: 370px;
    }

    #collection-slider-{{ section.id }} .collection-slider__image {
      object-fit: cover;
      object-position: center;
    }
  }
  #collection-slider-{{ section.id }} .collection-slider__image-container {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
   }
</style>

<div id="collection-slider-{{ section.id }}">
  <div class="page-width">
    {%- if section.settings.title != blank or section.settings.subtitle != blank -%}
      <div class="section-header">
        {%- if section.settings.title != blank -%}
          <h2 class="section-title">{{ section.settings.title }}</h2>
        {%- endif -%}
        {%- if section.settings.subtitle != blank -%}
          <div class="section-subtitle richtext">{{ section.settings.subtitle }}</div>
        {%- endif -%}
      </div>
    {%- endif -%}

    <div class="collection-slider__container">
      <div class="collection-slider__track-container">
        <div class="collection-slider__track" id="slider-track-{{ section.id }}">
          {%- for block in section.blocks -%}
            {%- assign collection = collections[block.settings.collection] -%}
            {%- assign slide_index = forloop.index0 -%}
            {%- assign is_first = forloop.first -%}

            <div class="collection-slider__slide" data-slide-index="{{ slide_index }}">
              <a href="{{ collection.url | default: '#' }}" class="collection-slider__card">
                <div class="collection-slider__image-wrapper">
                  {%- if block.settings.image != blank -%}
                    {%- assign image = block.settings.image -%}
                    <div class="collection-slider__image-container">
                        <img
                            src="{{ image | image_url: width: 800 }}"
                            srcset="
                            {{ image | image_url: width: 300 }} 300w,
                            {{ image | image_url: width: 600 }} 600w,
                            {{ image | image_url: width: 800 }} 800w
                            "
                            sizes="(max-width: 768px) 300px, 800px"
                            alt="{{ image.alt | escape | default: collection.title | escape }}"
                            class="collection-slider__image"
                            loading="{% if is_first %}eager{% else %}lazy{% endif %}"
                            decoding="async"
                            {% if is_first %}fetchpriority="high"{% endif %}
                            width="800"
                            height="800"
                        >
                    </div>
                  {%- elsif collection and collection.image -%}
                    {%- assign image = collection.image -%}
                    <img
                      src="{{ image | image_url: width: 600 }}"
                      srcset="
                        {{ image | image_url: width: 300 }} 300w,
                        {{ image | image_url: width: 600 }} 600w,
                        {{ image | image_url: width: 800 }} 800w
                      "
                      sizes="(max-width: 768px) 300px, 600px"
                      alt="{{ collection.title | escape }}"
                      class="collection-slider__image"
                      loading="{% if is_first %}eager{% else %}lazy{% endif %}"
                      decoding="async"
                      {% if is_first %}fetchpriority="high"{% endif %}
                      width="600"
                      height="600"
                    >
                  {%- elsif collection and collection.products.first.featured_image -%}
                    {%- assign image = collection.products.first.featured_image -%}
                    <img
                      src="{{ image | image_url: width: 600 }}"
                      srcset="
                        {{ image | image_url: width: 300 }} 300w,
                        {{ image | image_url: width: 600 }} 600w,
                        {{ image | image_url: width: 800 }} 800w
                      "
                      sizes="(max-width: 768px) 300px, 600px"
                      alt="{{ collection.title | escape }}"
                      class="collection-slider__image"
                      loading="{% if is_first %}eager{% else %}lazy{% endif %}"
                      decoding="async"
                      {% if is_first %}fetchpriority="high"{% endif %}
                      width="600"
                      height="600"
                    >
                  {%- else -%}
                    <div class="collection-slider__image" style="background: linear-gradient(135deg, #f5f5f5 0%, #e0e0e0 100%); display: flex; align-items: center; justify-content: center; height: 100%;">
                      <span style="color: #999; font-size: 14px;">Collection Image</span>
                    </div>
                  {%- endif -%}
                </div>
                <div class="collection-slider__content">
                  <h3 class="collection-slider__title richtext">
                    {%- if collection -%}
                      {{ collection.title }}
                    {%- else -%}
                      {{ 'onboarding.collection_title' | t }}
                    {%- endif -%}
                  </h3>
                </div>
              </a>
            </div>
          {%- endfor -%}
        </div>
      </div>

      {%- if section.blocks.size > 1 -%}
        <div class="collection-slider__navigation">
          <button
            class="collection-slider__arrow collection-slider__arrow--prev"
            aria-label="{{ 'general.slider.previous_slide' | t }}"
            data-slider-prev="{{ section.id }}"
            {% if section.blocks.size <= 1 %}disabled{% endif %}
          >
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
              <path d="M15 18L9 12L15 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
            </svg>
          </button>
          <button
            class="collection-slider__arrow collection-slider__arrow--next"
            aria-label="{{ 'general.slider.next_slide' | t }}"
            data-slider-next="{{ section.id }}"
            {% if section.blocks.size <= 1 %}disabled{% endif %}
          >
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
              <path d="M9 18L15 12L9 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
            </svg>
          </button>
        </div>
      {%- endif -%}
    </div>
  </div>
</div>

<script>
  class ElegantCarouselSlider {
    constructor(sectionId) {
      this.sectionId = sectionId;
      this.track = document.getElementById(`slider-track-${sectionId}`);
      this.prevBtn = document.querySelector(`[data-slider-prev="${sectionId}"]`);
      this.nextBtn = document.querySelector(`[data-slider-next="${sectionId}"]`);

      this.slides = this.track ? Array.from(this.track.children) : [];
      this.totalSlides = this.slides.length;
      this.currentIndex = 0;
      this.isAnimating = false;
      this.isVisible = true;

      if (this.totalSlides === 0) return;

      this.init();
      this.updateSlides();
    }

    init() {
      if (this.totalSlides === 0) return;

      if (this.prevBtn) {
        this.prevBtn.addEventListener('click', () => this.prevSlide());
      }

      if (this.nextBtn) {
        this.nextBtn.addEventListener('click', () => this.nextSlide());
      }

      // Only run the auto-slide timer while the carousel is actually on screen,
      // instead of animating (and painting) it forever in the background.
      this.setupVisibilityObserver();
      this.startAutoSlide();

      this.setupTouchEvents();
    }

    setupVisibilityObserver() {
      if (!('IntersectionObserver' in window)) return;

      const container = this.track.closest('.collection-slider__container');
      if (!container) return;

      const observer = new IntersectionObserver((entries) => {
        entries.forEach((entry) => {
          this.isVisible = entry.isIntersecting;
          if (this.isVisible) {
            this.startAutoSlide();
          } else {
            this.stopAutoSlide();
          }
        });
      }, { threshold: 0.1 });

      observer.observe(container);
    }

    setupTouchEvents() {
      let touchStartX = 0;
      let touchEndX = 0;

      this.track.addEventListener('touchstart', (e) => {
        touchStartX = e.changedTouches[0].screenX;
      }, { passive: true });

      this.track.addEventListener('touchend', (e) => {
        touchEndX = e.changedTouches[0].screenX;
        this.handleSwipe(touchStartX, touchEndX);
      }, { passive: true });
    }

    handleSwipe(startX, endX) {
      const swipeThreshold = 50;
      const diff = startX - endX;

      if (Math.abs(diff) > swipeThreshold) {
        if (diff > 0) {
          this.nextSlide();
        } else {
          this.prevSlide();
        }
      }
    }

    updateSlides() {
      this.slides.forEach(slide => {
        slide.classList.remove('active', 'left-1', 'left-2', 'left-3', 'right-1', 'right-2', 'right-3');
      });

      this.slides[this.currentIndex].classList.add('active');

      for (let i = 1; i <= 3; i++) {
        const leftIndex = (this.currentIndex + i) % this.totalSlides;
        if (leftIndex !== this.currentIndex) {
          this.slides[leftIndex].classList.add(`left-${i}`);
        }
      }

      for (let i = 1; i <= 3; i++) {
        const rightIndex = (this.currentIndex - i + this.totalSlides) % this.totalSlides;
        if (rightIndex !== this.currentIndex) {
          this.slides[rightIndex].classList.add(`right-${i}`);
        }
      }
    }

    prevSlide() {
      if (this.isAnimating || this.totalSlides <= 1) return;

      this.isAnimating = true;
      this.currentIndex = (this.currentIndex - 1 + this.totalSlides) % this.totalSlides;
      this.updateSlides();

      setTimeout(() => {
        this.isAnimating = false;
      }, 600);
    }

    nextSlide() {
      if (this.isAnimating || this.totalSlides <= 1) return;

      this.isAnimating = true;
      this.currentIndex = (this.currentIndex + 1) % this.totalSlides;
      this.updateSlides();

      setTimeout(() => {
        this.isAnimating = false;
      }, 600);
    }

    startAutoSlide() {
      if (this.totalSlides <= 1 || this.autoSlideInterval) return;

      this.autoSlideInterval = setInterval(() => {
        if (!this.isAnimating) {
          this.nextSlide();
        }
      }, 5000);
    }

    stopAutoSlide() {
      if (this.autoSlideInterval) {
        clearInterval(this.autoSlideInterval);
        this.autoSlideInterval = null;
      }
    }
  }

  document.addEventListener('DOMContentLoaded', () => {
    const sliders = document.querySelectorAll('.collection-slider__container');

    sliders.forEach((container) => {
      const sectionId = container.closest('[id^="shopify-section-"]')?.id?.replace('shopify-section-', '');
      if (sectionId) {
        new ElegantCarouselSlider(sectionId);
      }
    });
  });
</script>

{% schema %}
{
  "name": "3D Collection Carousel",
  "tag": "section",
  "class": "section",
  "settings": [
    {
      "type": "richtext",
      "id": "title",
      "label": "Section title",
      "default": "<p>SIGNATURE COLLECTIONS</p>"
    },
    {
      "type": "richtext",
      "id": "subtitle",
      "label": "Section subtitle",
      "default": "<p>Discover our exclusive collections</p>"
    },
    {
      "type": "select",
      "id": "text_alignment",
      "label": "Text alignment",
      "options": [
        {
          "value": "left",
          "label": "Left"
        },
        {
          "value": "center",
          "label": "Center"
        },
        {
          "value": "right",
          "label": "Right"
        }
      ],
      "default": "center"
    },
    {
      "type": "checkbox",
      "id": "enable_shadow",
      "label": "Enable card shadow",
      "info": "Turn off to remove shadows from slides and arrows.",
      "default": true
    },
    {
      "type": "checkbox",
      "id": "enable_border",
      "label": "Enable card border",
      "default": true
    },
    {
      "type": "color",
      "id": "border_color",
      "label": "Border color",
      "default": "#e5e5e5"
    },
    {
      "type": "range",
      "id": "border_width",
      "label": "Border width",
      "min": 1,
      "max": 10,
      "step": 1,
      "unit": "px",
      "default": 1
    },
    {
      "type": "range",
      "id": "card_border_radius",
      "label": "Card border radius",
      "min": 0,
      "max": 50,
      "step": 1,
      "unit": "px",
      "default": 12
    },
    {
      "type": "color",
      "id": "background_color",
      "label": "Background color",
      "default": "#ffffff"
    },
    {
      "type": "color",
      "id": "text_color",
      "label": "Text color",
      "default": "#000000"
    },
    {
      "type": "range",
      "id": "padding_top",
      "min": 0,
      "max": 200,
      "step": 4,
      "unit": "px",
      "label": "Padding top",
      "default": 80
    },
    {
      "type": "range",
      "id": "padding_bottom",
      "min": 0,
      "max": 200,
      "step": 4,
      "unit": "px",
      "label": "Padding bottom",
      "default": 80
    },
    {
      "type": "color",
      "id": "arrow_background",
      "label": "Arrow background color",
      "default": "#ffffff"
    },
    {
      "type": "color",
      "id": "arrow_color",
      "label": "Arrow color",
      "default": "#333333"
    },
    {
      "type": "color",
      "id": "arrow_border_color",
      "label": "Arrow border color",
      "default": "#e5e5e5"
    },
    {
      "type": "color",
      "id": "arrow_background_hover",
      "label": "Arrow background color (hover)",
      "default": "#333333"
    },
    {
      "type": "color",
      "id": "arrow_color_hover",
      "label": "Arrow color (hover)",
      "default": "#ffffff"
    },
    {
      "type": "color",
      "id": "arrow_border_color_hover",
      "label": "Arrow border color (hover)",
      "default": "#333333"
    }
  ],
  "blocks": [
    {
      "type": "collection",
      "name": "Collection",
      "settings": [
        {
          "type": "collection",
          "id": "collection",
          "label": "Collection"
        },
        {
          "type": "image_picker",
          "id": "image",
          "label": "Custom image",
          "info": "Optional. Uses collection image by default."
        }
      ]
    }
  ],
  "presets": [
    {
      "name": "3D Collection Carousel",
      "blocks": [
        {
          "type": "collection"
        },
        {
          "type": "collection"
        },
        {
          "type": "collection"
        },
        {
          "type": "collection"
        },
        {
          "type": "collection"
        },
        {
          "type": "collection"
        }
      ]
    }
  ]
}
{% endschema %}