Shop All

{%- comment -%}
  KAZE – Collection / Shop All section
  Layout: breadcrumb → centred title → "Refined by" filters → "View as" grid switch + Sort by → product grid → pagination
  Add via: Online Store → Themes → Edit code → Sections → Add a new section → "kaze-collection"
{%- endcomment -%}

{%- liquid
  assign sid = section.id
  assign default_cols = section.settings.columns_desktop | plus: 0
  assign current_sort = collection.sort_by | default: collection.default_sort_by
  assign active_filter_count = 0
  for filter in collection.filters
    assign active_filter_count = active_filter_count | plus: filter.active_values.size
    if filter.type == 'price_range'
      if filter.min_value.value != nil or filter.max_value.value != nil
        assign active_filter_count = active_filter_count | plus: 1
      endif
    endif
  endfor
-%}

<style>
  #kz-coll-{{ sid }} {
    --kz-bg: {{ section.settings.color_bg }};
    --kz-text: {{ section.settings.color_text }};
    --kz-muted: {{ section.settings.color_text | color_modify: 'alpha', 0.6 }};
    --kz-line: {{ section.settings.color_text | color_modify: 'alpha', 0.18 }};
    --kz-accent: {{ section.settings.color_accent }};
    --kz-cols: {{ default_cols }};
    background: var(--kz-bg);
    color: var(--kz-text);
    padding: {{ section.settings.padding_top }}px 0 {{ section.settings.padding_bottom }}px;
  }
  #kz-coll-{{ sid }} .kz-wrap { max-width: 1600px; margin: 0 auto; padding: 0 5rem; }
  @media (max-width: 749px) { #kz-coll-{{ sid }} .kz-wrap { padding: 0 1.6rem; } }

  /* Breadcrumb + title */
  #kz-coll-{{ sid }} .kz-crumb { text-align: center; font-size: 1.5rem; color: var(--kz-muted); letter-spacing: .04em; margin: 0 0 3rem; }
  #kz-coll-{{ sid }} .kz-crumb a { color: inherit; text-decoration: none; }
  #kz-coll-{{ sid }} .kz-crumb a:hover { color: var(--kz-text); }
  #kz-coll-{{ sid }} .kz-crumb span.sep { margin: 0 .8rem; }
  #kz-coll-{{ sid }} .kz-title {
    text-align: center; margin: 0 0 3.5rem; font-family: var(--font-heading-family);
    font-weight: 400; font-size: clamp(2.2rem, 2.4vw, 3rem); letter-spacing: .14em; text-transform: uppercase; color: var(--kz-text);
  }
  #kz-coll-{{ sid }} .kz-desc { text-align: center; max-width: 64rem; margin: -2rem auto 3.5rem; color: var(--kz-muted); font-size: 1.5rem; }

  /* Filter bar */
  #kz-coll-{{ sid }} .kz-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 1.6rem; padding-bottom: 3rem; border-bottom: 1px solid var(--kz-line); }
  #kz-coll-{{ sid }} .kz-filters__label { display: flex; align-items: center; gap: 1rem; font-size: 1.5rem; letter-spacing: .08em; text-transform: uppercase; }
  #kz-coll-{{ sid }} .kz-filters__label svg { width: 2.4rem; height: 2.4rem; }
  #kz-coll-{{ sid }} details.kz-dd { position: relative; }
  #kz-coll-{{ sid }} .kz-dd > summary {
    list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 2rem;
    min-width: 26rem; padding: 1.4rem 2rem; border: 1px solid var(--kz-line); background: transparent;
    font-size: 1.4rem; letter-spacing: .08em; text-transform: uppercase; color: var(--kz-text);
  }
  #kz-coll-{{ sid }} .kz-dd > summary::-webkit-details-marker { display: none; }
  #kz-coll-{{ sid }} .kz-dd > summary .kz-chev { width: 1.2rem; transition: transform .2s; }
  #kz-coll-{{ sid }} .kz-dd[open] > summary .kz-chev { transform: rotate(180deg); }
  #kz-coll-{{ sid }} .kz-dd > summary .kz-count { color: var(--kz-accent); margin-left: .4rem; }
  #kz-coll-{{ sid }} .kz-dd__panel {
    position: absolute; z-index: 20; top: calc(100% + .4rem); left: 0; min-width: 100%; width: max-content; max-width: 32rem;
    background: var(--kz-bg); border: 1px solid var(--kz-line); padding: 1.6rem 2rem; box-shadow: 0 10px 30px rgba(0,0,0,.08);
  }
  #kz-coll-{{ sid }} .kz-dd__panel label { display: flex; align-items: center; gap: 1rem; padding: .6rem 0; font-size: 1.4rem; cursor: pointer; }
  #kz-coll-{{ sid }} .kz-dd__panel label.is-disabled { opacity: .4; cursor: not-allowed; }
  #kz-coll-{{ sid }} .kz-dd__panel input[type="checkbox"] { accent-color: var(--kz-text); width: 1.6rem; height: 1.6rem; }
  #kz-coll-{{ sid }} .kz-price { display: flex; align-items: center; gap: 1rem; }
  #kz-coll-{{ sid }} .kz-price input {
    width: 11rem; padding: 1rem; border: 1px solid var(--kz-line); background: transparent; color: var(--kz-text); font-size: 1.4rem;
  }
  #kz-coll-{{ sid }} .kz-btn {
    margin-top: 1.2rem; padding: 1rem 2.4rem; border: 0; background: var(--kz-accent); color: #fff;
    font-size: 1.3rem; letter-spacing: .1em; text-transform: uppercase; cursor: pointer;
  }
  #kz-coll-{{ sid }} .kz-clear { font-size: 1.3rem; letter-spacing: .06em; text-transform: uppercase; color: var(--kz-text); text-underline-offset: .3rem; }

  /* View as + sort */
  #kz-coll-{{ sid }} .kz-toolbar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 2rem; padding: 4.5rem 0 5rem; }
  #kz-coll-{{ sid }} .kz-count-txt { font-size: 1.4rem; color: var(--kz-muted); letter-spacing: .04em; }
  #kz-coll-{{ sid }} .kz-viewas { display: flex; align-items: center; gap: 1.2rem; justify-self: center; }
  #kz-coll-{{ sid }} .kz-viewas__label { font-size: 1.6rem; letter-spacing: .06em; text-transform: uppercase; margin-right: 1rem; }
  #kz-coll-{{ sid }} .kz-viewas button {
    display: inline-flex; align-items: center; justify-content: center; gap: 2px; height: 3.6rem; padding: 0 .6rem;
    border: 1px solid var(--kz-line); background: transparent; cursor: pointer;
  }
  #kz-coll-{{ sid }} .kz-viewas button i { display: block; width: 4px; height: 2.2rem; background: var(--kz-muted); }
  #kz-coll-{{ sid }} .kz-viewas button[data-cols="1"] { flex-direction: column; width: 3.6rem; }
  #kz-coll-{{ sid }} .kz-viewas button[data-cols="1"] i { width: 2.2rem; height: 4px; }
  #kz-coll-{{ sid }} .kz-viewas button.is-active { border-color: var(--kz-text); border-width: 2px; }
  #kz-coll-{{ sid }} .kz-viewas button.is-active i { background: var(--kz-text); }
  #kz-coll-{{ sid }} .kz-sort { display: flex; align-items: center; gap: 2rem; justify-self: end; }
  #kz-coll-{{ sid }} .kz-sort label { font-size: 1.6rem; letter-spacing: .06em; text-transform: uppercase; }
  #kz-coll-{{ sid }} .kz-sort select {
    appearance: none; -webkit-appearance: none; min-width: 21rem; padding: 1.4rem 4rem 1.4rem 2rem; border: 1px solid var(--kz-line);
    background: transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23888' stroke-width='1.3'/%3E%3C/svg%3E") no-repeat right 1.6rem center;
    color: var(--kz-text); font-size: 1.6rem; font-family: inherit; cursor: pointer;
  }

  /* Grid */
  #kz-coll-{{ sid }} .kz-grid { display: grid; grid-template-columns: repeat(var(--kz-cols), minmax(0, 1fr)); gap: 5rem 4.5rem; list-style: none; padding: 0; margin: 0; }
  #kz-coll-{{ sid }} .kz-card a { color: inherit; text-decoration: none; display: block; }
  #kz-coll-{{ sid }} .kz-card__media { position: relative; overflow: hidden; aspect-ratio: {{ section.settings.image_ratio }}; background: var(--kz-line); }
  #kz-coll-{{ sid }} .kz-card__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: opacity .5s ease, transform 1.2s ease; }
  #kz-coll-{{ sid }} .kz-card__media img.kz-img2 { opacity: 0; }
  #kz-coll-{{ sid }} .kz-card:hover .kz-card__media img.kz-img2 { opacity: 1; }
  #kz-coll-{{ sid }} .kz-card:hover .kz-card__media img:only-child { transform: scale(1.04); }
  #kz-coll-{{ sid }} .kz-badge {
    position: absolute; top: 1.2rem; left: 1.2rem; z-index: 2; padding: .5rem 1.2rem; font-size: 1.1rem; letter-spacing: .1em; text-transform: uppercase;
    background: var(--kz-bg); color: var(--kz-text);
  }
  #kz-coll-{{ sid }} .kz-badge--sale { background: var(--kz-accent); color: #fff; }
  #kz-coll-{{ sid }} .kz-card__info { padding-top: 2.4rem; }
  #kz-coll-{{ sid }} .kz-card__title {
    margin: 0 0 1.6rem; font-family: var(--font-heading-family); font-weight: 400; font-size: 2rem; line-height: 1.3;
    letter-spacing: .08em; text-transform: uppercase; color: var(--kz-text);
  }
  #kz-coll-{{ sid }} .kz-card__price { font-size: 1.9rem; letter-spacing: .02em; color: var(--kz-text); }
  #kz-coll-{{ sid }} .kz-card__price s { color: var(--kz-muted); font-size: .85em; margin-left: .8rem; }

  /* List view (1 column) */
  #kz-coll-{{ sid }} .kz-grid.is-list .kz-card a { display: grid; grid-template-columns: minmax(0, 32rem) 1fr; gap: 4rem; align-items: center; }
  #kz-coll-{{ sid }} .kz-grid.is-list .kz-card__info { padding-top: 0; }

  /* Pagination + empty */
  #kz-coll-{{ sid }} .kz-pages { display: flex; justify-content: center; gap: .6rem; margin-top: 7rem; font-size: 1.5rem; }
  #kz-coll-{{ sid }} .kz-pages a, #kz-coll-{{ sid }} .kz-pages span {
    min-width: 4.2rem; height: 4.2rem; display: inline-flex; align-items: center; justify-content: center; padding: 0 1rem;
    border: 1px solid var(--kz-line); color: var(--kz-text); text-decoration: none;
  }
  #kz-coll-{{ sid }} .kz-pages .is-current { background: var(--kz-text); color: var(--kz-bg); border-color: var(--kz-text); }
  #kz-coll-{{ sid }} .kz-empty { text-align: center; padding: 6rem 0; font-size: 1.6rem; color: var(--kz-muted); }

  /* Tablet / mobile */
  @media (max-width: 989px) {
    #kz-coll-{{ sid }} .kz-toolbar { grid-template-columns: 1fr 1fr; }
    #kz-coll-{{ sid }} .kz-count-txt { display: none; }
    #kz-coll-{{ sid }} .kz-viewas { justify-self: start; }
    #kz-coll-{{ sid }} .kz-viewas button[data-cols="4"] { display: none; }
    #kz-coll-{{ sid }} .kz-grid { gap: 4rem 2.4rem; }
  }
  @media (max-width: 749px) {
    #kz-coll-{{ sid }} .kz-dd > summary { min-width: 0; padding: 1.2rem 1.4rem; }
    #kz-coll-{{ sid }} .kz-filters { gap: 1rem; }
    #kz-coll-{{ sid }} .kz-filters__label span { display: none; }
    #kz-coll-{{ sid }} .kz-toolbar { padding: 2.4rem 0 3rem; }
    #kz-coll-{{ sid }} .kz-viewas__label, #kz-coll-{{ sid }} .kz-sort label { display: none; }
    #kz-coll-{{ sid }} .kz-viewas button[data-cols="3"] { display: none; }
    #kz-coll-{{ sid }} .kz-sort select { min-width: 0; width: 100%; font-size: 1.4rem; }
    #kz-coll-{{ sid }} .kz-grid { grid-template-columns: repeat(var(--kz-cols-m, 2), minmax(0, 1fr)); gap: 3rem 1.2rem; }
    #kz-coll-{{ sid }} .kz-card__title { font-size: 1.4rem; margin-bottom: .8rem; }
    #kz-coll-{{ sid }} .kz-card__price { font-size: 1.4rem; }
    #kz-coll-{{ sid }} .kz-card__info { padding-top: 1.2rem; }
    #kz-coll-{{ sid }} .kz-grid.is-list .kz-card a { grid-template-columns: 40% 1fr; gap: 1.6rem; }
  }
</style>

<div id="kz-coll-{{ sid }}" class="kz-coll">
  <div class="kz-wrap">
    {%- paginate collection.products by section.settings.products_per_page -%}

      {%- if section.settings.show_breadcrumb -%}
        <nav class="kz-crumb" aria-label="Breadcrumb">
          <a href="{{ routes.root_url }}">Home</a><span class="sep">›</span><span>{{ collection.title | default: 'Shop All' }}</span>
        </nav>
      {%- endif -%}

      <h1 class="kz-title">{{ section.settings.title_override | default: collection.title | default: 'Shop All' }}</h1>
      {%- if section.settings.show_description and collection.description != blank -%}
        <div class="kz-desc">{{ collection.description }}</div>
      {%- endif -%}

      {%- comment -%} ---------- FILTERS ---------- {%- endcomment -%}
      <form id="kz-form-{{ sid }}" class="kz-filters" action="{{ collection.url }}" method="get">
        <input type="hidden" name="sort_by" value="{{ current_sort }}">
        {%- if section.settings.show_filters and collection.filters.size > 0 -%}
          <div class="kz-filters__label">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="M3 4h18l-7 8.5V19l-4 2v-8.5L3 4z"/></svg>
            <span>Refined by</span>
          </div>

          {%- for filter in collection.filters -%}
            {%- liquid
              assign f_active = filter.active_values.size
              if filter.type == 'price_range'
                if filter.min_value.value != nil or filter.max_value.value != nil
                  assign f_active = 1
                endif
              endif
            -%}
            <details class="kz-dd">
              <summary>
                <span>{{ filter.label }}{% if f_active > 0 %}<span class="kz-count">({{ f_active }})</span>{% endif %}</span>
                <svg class="kz-chev" viewBox="0 0 12 8" aria-hidden="true"><path d="M1 1l5 5 5-5" fill="none" stroke="currentColor" stroke-width="1.3"/></svg>
              </summary>
              <div class="kz-dd__panel">
                {%- case filter.type -%}
                  {%- when 'price_range' -%}
                    <div class="kz-price">
                      <span>{{ cart.currency.symbol }}</span>
                      <input type="number" min="0" step="1"
                        name="{{ filter.min_value.param_name }}"
                        placeholder="0"
                        {% if filter.min_value.value %}value="{{ filter.min_value.value | money_without_currency | replace: ',', '' }}"{% endif %}>
                      <span>to</span>
                      <input type="number" min="0" step="1"
                        name="{{ filter.max_value.param_name }}"
                        placeholder="{{ filter.range_max | money_without_currency | replace: ',', '' }}"
                        {% if filter.max_value.value %}value="{{ filter.max_value.value | money_without_currency | replace: ',', '' }}"{% endif %}>
                    </div>
                    <button type="submit" class="kz-btn">Apply</button>
                  {%- else -%}
                    {%- for value in filter.values -%}
                      <label class="{% if value.count == 0 and value.active == false %}is-disabled{% endif %}">
                        <input type="checkbox" name="{{ value.param_name }}" value="{{ value.value }}"
                          {% if value.active %}checked{% endif %}
                          {% if value.count == 0 and value.active == false %}disabled{% endif %}
                          data-kz-autosubmit>
                        <span>{{ value.label }} ({{ value.count }})</span>
                      </label>
                    {%- endfor -%}
                {%- endcase -%}
              </div>
            </details>
          {%- endfor -%}

          {%- if active_filter_count > 0 -%}
            <a class="kz-clear" href="{{ collection.url }}?sort_by={{ current_sort }}">Clear all</a>
          {%- endif -%}
        {%- endif -%}
      </form>

      {%- comment -%} ---------- VIEW AS + SORT ---------- {%- endcomment -%}
      <div class="kz-toolbar">
        <div class="kz-count-txt">{{ collection.products_count }} {% if collection.products_count == 1 %}product{% else %}products{% endif %}</div>

        {%- if section.settings.show_view_as -%}
          <div class="kz-viewas" role="group" aria-label="View as">
            <span class="kz-viewas__label">View as</span>
            <button type="button" data-cols="1" aria-label="List view"><i></i><i></i><i></i></button>
            <button type="button" data-cols="2" aria-label="2 columns"><i></i><i></i></button>
            <button type="button" data-cols="3" aria-label="3 columns"><i></i><i></i><i></i></button>
            <button type="button" data-cols="4" aria-label="4 columns"><i></i><i></i><i></i><i></i></button>
          </div>
        {%- else -%}
          <div></div>
        {%- endif -%}

        <div class="kz-sort">
          <label for="kz-sort-{{ sid }}">Sort by</label>
          <select id="kz-sort-{{ sid }}" data-kz-sort>
            {%- for option in collection.sort_options -%}
              <option value="{{ option.value }}" {% if option.value == current_sort %}selected{% endif %}>{{ option.name }}</option>
            {%- endfor -%}
          </select>
        </div>
      </div>

      {%- comment -%} ---------- PRODUCT GRID ---------- {%- endcomment -%}
      {%- if collection.products.size > 0 -%}
        <ul class="kz-grid" data-kz-grid>
          {%- for product in collection.products -%}
            <li class="kz-card">
              <a href="{{ product.url | within: collection }}">
                <div class="kz-card__media">
                  {%- unless product.available -%}
                    <span class="kz-badge">Sold out</span>
                  {%- else -%}
                    {%- if product.compare_at_price > product.price -%}
                      <span class="kz-badge kz-badge--sale">Sale</span>
                    {%- endif -%}
                  {%- endunless -%}

                  {%- if product.featured_media -%}
                    {{ product.featured_media | image_url: width: 1100 | image_tag:
                      loading: 'lazy',
                      widths: '360, 540, 720, 900, 1100',
                      sizes: '(min-width: 990px) 25vw, (min-width: 750px) 33vw, 50vw',
                      alt: product.featured_media.alt | default: product.title | escape }}
                    {%- if section.settings.show_second_image and product.media.size > 1 -%}
                      {{ product.media[1] | image_url: width: 1100 | image_tag:
                        loading: 'lazy',
                        class: 'kz-img2',
                        widths: '360, 540, 720, 900, 1100',
                        sizes: '(min-width: 990px) 25vw, (min-width: 750px) 33vw, 50vw',
                        alt: product.title | escape }}
                    {%- endif -%}
                  {%- else -%}
                    {{ 'product-apparel-1' | placeholder_svg_tag }}
                  {%- endif -%}
                </div>
                <div class="kz-card__info">
                  <h3 class="kz-card__title">{{ product.title }}</h3>
                  <div class="kz-card__price">
                    {%- if product.price_varies -%}From {% endif -%}
                    {{ product.price | money }}
                    {%- if product.compare_at_price > product.price -%}<s>{{ product.compare_at_price | money }}</s>{%- endif -%}
                  </div>
                </div>
              </a>
            </li>
          {%- endfor -%}
        </ul>

        {%- if paginate.pages > 1 -%}
          <nav class="kz-pages" aria-label="Pagination">
            {%- if paginate.previous -%}<a href="{{ paginate.previous.url }}" aria-label="Previous page">‹</a>{%- endif -%}
            {%- for part in paginate.parts -%}
              {%- if part.is_link -%}
                <a href="{{ part.url }}">{{ part.title }}</a>
              {%- elsif part.title == paginate.current_page -%}
                <span class="is-current" aria-current="page">{{ part.title }}</span>
              {%- else -%}
                <span>{{ part.title }}</span>
              {%- endif -%}
            {%- endfor -%}
            {%- if paginate.next -%}<a href="{{ paginate.next.url }}" aria-label="Next page">›</a>{%- endif -%}
          </nav>
        {%- endif -%}
      {%- else -%}
        <div class="kz-empty">
          No products match these filters. <a href="{{ collection.url }}">Clear filters</a>
        </div>
      {%- endif -%}

    {%- endpaginate -%}
  </div>
</div>

<script>
  (function () {
    var root = document.getElementById('kz-coll-{{ sid }}');
    if (!root) return;
    var form = root.querySelector('#kz-form-{{ sid }}');
    var grid = root.querySelector('[data-kz-grid]');
    var KEY = 'kz-view-cols';
    var defaultCols = {{ default_cols }};

    /* Filters: submit when a checkbox changes */
    root.querySelectorAll('[data-kz-autosubmit]').forEach(function (el) {
      el.addEventListener('change', function () { form.submit(); });
    });

    /* Only one dropdown open at a time; close when clicking outside */
    var dds = root.querySelectorAll('details.kz-dd');
    dds.forEach(function (d) {
      d.addEventListener('toggle', function () {
        if (d.open) dds.forEach(function (o) { if (o !== d) o.open = false; });
      });
    });
    document.addEventListener('click', function (e) {
      dds.forEach(function (d) { if (!d.contains(e.target)) d.open = false; });
    });

    /* Sort by */
    var sort = root.querySelector('[data-kz-sort]');
    if (sort) sort.addEventListener('change', function () {
      form.querySelector('input[name="sort_by"]').value = sort.value;
      form.submit();
    });

    /* View as (column switcher) */
    function setCols(n) {
      if (!grid) return;
      n = parseInt(n, 10) || defaultCols;
      var isMobile = window.matchMedia('(max-width: 749px)').matches;
      grid.classList.toggle('is-list', n === 1);
      if (isMobile) {
        grid.style.setProperty('--kz-cols-m', n === 1 ? 1 : 2);
      } else {
        grid.style.setProperty('--kz-cols', n);
      }
      root.querySelectorAll('.kz-viewas button').forEach(function (b) {
        b.classList.toggle('is-active', parseInt(b.dataset.cols, 10) === n);
      });
    }
    var saved = null;
    try { saved = localStorage.getItem(KEY); } catch (e) {}
    var startCols = saved ? parseInt(saved, 10) : (window.matchMedia('(max-width: 749px)').matches ? 2 : defaultCols);
    setCols(startCols);

    root.querySelectorAll('.kz-viewas button').forEach(function (b) {
      b.addEventListener('click', function () {
        var n = parseInt(b.dataset.cols, 10);
        setCols(n);
        try { localStorage.setItem(KEY, n); } catch (e) {}
      });
    });
  })();
</script>

{% schema %}
{
  "name": "Kaze Collection",
  "tag": "section",
  "class": "section-kaze-collection",
  "settings": [
    { "type": "header", "content": "Layout" },
    { "type": "text", "id": "title_override", "label": "Page title (leave empty to use collection name)" },
    { "type": "checkbox", "id": "show_breadcrumb", "label": "Show breadcrumb (Home › Shop All)", "default": true },
    { "type": "checkbox", "id": "show_description", "label": "Show collection description", "default": false },
    { "type": "checkbox", "id": "show_filters", "label": "Show filters (Refined by)", "default": true },
    { "type": "checkbox", "id": "show_view_as", "label": "Show 'View as' switcher", "default": true },
    {
      "type": "select", "id": "columns_desktop", "label": "Default columns on desktop", "default": "4",
      "options": [
        { "value": "2", "label": "2" },
        { "value": "3", "label": "3" },
        { "value": "4", "label": "4" }
      ]
    },
    { "type": "range", "id": "products_per_page", "label": "Products per page", "min": 8, "max": 48, "step": 4, "default": 24 },
    { "type": "header", "content": "Product cards" },
    {
      "type": "select", "id": "image_ratio", "label": "Image shape", "default": "7 / 10",
      "options": [
        { "value": "7 / 10", "label": "Tall portrait (like reference)" },
        { "value": "3 / 4", "label": "Portrait 3:4" },
        { "value": "2 / 3", "label": "Portrait 2:3" },
        { "value": "1 / 1", "label": "Square" }
      ]
    },
    { "type": "checkbox", "id": "show_second_image", "label": "Show second image on hover", "default": true },
    { "type": "header", "content": "Colours" },
    { "type": "color", "id": "color_bg", "label": "Background", "default": "#FAF6F0" },
    { "type": "color", "id": "color_text", "label": "Text", "default": "#280000" },
    { "type": "color", "id": "color_accent", "label": "Accent (buttons, sale badge)", "default": "#DC7F27" },
    { "type": "header", "content": "Spacing" },
    { "type": "range", "id": "padding_top", "label": "Top padding", "min": 0, "max": 120, "step": 4, "unit": "px", "default": 56 },
    { "type": "range", "id": "padding_bottom", "label": "Bottom padding", "min": 0, "max": 160, "step": 4, "unit": "px", "default": 96 }
  ],
  "enabled_on": { "templates": ["collection"] },
  "presets": [ { "name": "Kaze Collection" } ]
}
{% endschema %}