Tutorial: Image swatches on WooCommerce archive page

Working example of Product Swatches on WooCommerce Archive page

Example video :slight_smile:
ezgif-7dcc67bb2a5aac

PreRequisites:

  • I am using Core Framework

===

Related questions:

Based on multiple questions from me about swatches possible on the archive i decided to dig deep with my ChatGPT friends and some common sense of myself and made a working soluton for the Archive pag with a query loop:
What the script does:

  • Show all variations of a particular attribute (pa_kleur) below the image and change the main image on hover/ click
  • Show attribute nice name in decorative tooltip
  • When clicking on main image; load the product page with the selected variation
  • After filtering the swatches are triggered again to work
    == Touch devices ==
  • Desktop: on hover change swatch to main image
  • Mobile: on click change swatch to main image

Settings
I have the fallback product variations images set and Swatch Type: Image

And the Image swatches enabled in Bricks Settings => WooCommerce tab
image

My chosen attribute i want to use for archive swatches: pa_kleur

Place in your functions.php file (change attribute)

/* Show Image swatch on Archive pages */
add_action('woocommerce_after_shop_loop_item', 'show_kleur_variation_swatches_archive', 15);
function show_kleur_variation_swatches_archive() {
    global $product;

    if (!is_product() && $product && $product->is_type('variable')) {
        $attribute_name = 'pa_kleur'; // Your attribute

        $available_variations = $product->get_available_variations();

        if (empty($available_variations)) return;

        echo '<div class="variation-swatches" data-product-id="' . esc_attr($product->get_id()) . '">';

        $shown_terms = [];

        foreach ($available_variations as $variation) {
            $variation_obj = new WC_Product_Variation($variation['variation_id']);
            $attr_value = $variation['attributes']['attribute_' . $attribute_name] ?? '';
			$term = get_term_by('slug', $attr_value, $attribute_name);
			$label = $term ? $term->name : $attr_value;

            if (!$attr_value || in_array($attr_value, $shown_terms)) {
                continue;
            }

            $shown_terms[] = $attr_value;

            $thumb_url = wp_get_attachment_image_url($variation_obj->get_image_id(), 'woocommerce_thumbnail');
            $main_image_url = wp_get_attachment_image_url($variation_obj->get_image_id(), 'woocommerce_single');
            $variation_link = esc_url($product->get_permalink()) . '?attribute_' . $attribute_name . '=' . rawurlencode($attr_value);

            echo '<a href="' . $variation_link . '" 
                     class="swatch-image" 
                     data-image="' . esc_url($main_image_url) . '" 
                     title="' . esc_attr($label) . '">
                        <img src="' . esc_url($thumb_url) . '" alt="' . esc_attr($attr_value) . '" />
                  </a>';
				  
        }

        echo '</div>';
    }
}

Bricks Structure
image

Make sure you have set “{do_action:woocommerce_after_shop_loop_item}” as text field
image

In the code Block set CSS

.variation-swatches {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: flex-start;
  max-width: 100%;
}
@media (max-width: 480px) {
  .variation-swatches .swatch-image {
    flex: 0 0 calc((100% - 3 * 8px) / 4); /* 4 per row on mobile */
  }
}
.variation-swatches .swatch-image {
  flex: 0 0 calc((100% - 5 * 8px) / 6); /* 6 items per row, with 8px gaps */
  box-sizing: border-box;
  display: block;
  text-align: center;
}

.variation-swatches .swatch-image img {
  width: 100%;
  height: auto;
  max-width: 100%;
  object-fit: cover;
  border: 1px solid #ccc;
  border-radius: 4px;
  transition: border-color 0.2s ease;
  cursor: pointer;
}

.variation-swatches .swatch-image.active img {
  border-color: #000;
}

.swatch-image img {
    width: 40px;
    height: 40px;
    object-fit: cover;
    border: 1px solid #ccc;
    border-radius: 4px;
    transition: border 0.2s ease;
    cursor: pointer;
}
.swatch-image:hover img {
    border-color: #000;
}
img.attachment-large,
img.wp-post-image {
  opacity: 1 !important;
  visibility: visible !important;
  display: block !important;
  z-index: 5;
}
.swatch-image.active img {
  border: 2px solid #000;
  border-radius: 4px;
}
.swatch-image {
  position: relative;
}

.swatch-image::after {
  content: attr(title);
  position: absolute;
  bottom: 110%;
  left: 50%;
  transform: translateX(-50%);
  background: #222;
  color: #fff;
  padding: 4px 8px;
  border-radius: 4px;
  white-space: nowrap;
  font-size: 12px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s ease;
  z-index: 10;
}

.swatch-image:hover::after {
  opacity: 1;
}

In the code Block set JS

function initSwatches() {
  //console.log('initSwatches triggered');
  const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;

  document.querySelectorAll('.card-products-archive__wrapper').forEach(function (product) {
    const imageWrapper = product.querySelector('.card-products-archive__img-wrapper');
    const imageLink = imageWrapper?.querySelector('a');
    const mainImage = product.querySelector('.card-products-archive__img img');

    if (!mainImage || !imageLink) return;

    mainImage.setAttribute('data-original', mainImage.src);
    imageLink.setAttribute('data-original-href', imageLink.href);

    const swatches = product.querySelectorAll('.swatch-image');

    swatches.forEach(function (swatch) {
      const applySwatch = function () {
        const newImage = swatch.getAttribute('data-image');
        const newHref = swatch.getAttribute('href') || swatch.getAttribute('data-variation-link');

        if (mainImage && newImage) {
          mainImage.src = newImage;
          mainImage.setAttribute('src', newImage);
          mainImage.removeAttribute('srcset');
          mainImage.removeAttribute('data-src');
          mainImage.removeAttribute('sizes');
          mainImage.removeAttribute('loading');
          mainImage.classList.remove('lazyloaded', 'lazyload');
          mainImage.style.backgroundImage = 'none';
        }

        if (imageLink && newHref) {
          const originalHref = imageLink.getAttribute('data-original-href') || imageLink.href;

          try {
            const originalUrl = new URL(originalHref, window.location.origin);
            const swatchUrl = new URL(newHref, window.location.origin);
            const kleurValue = swatchUrl.searchParams.get('attribute_pa_kleur');

            if (kleurValue) {
              originalUrl.searchParams.set('attribute_pa_kleur', kleurValue);
              imageLink.href = originalUrl.toString();
            }
          } catch (error) {
            console.warn('URL update error', error);
          }
        }

        product.querySelectorAll('.swatch-image').forEach(el => el.classList.remove('active'));
        swatch.classList.add('active');
      };

      if (isTouchDevice) {
        swatch.addEventListener('click', function (e) {
          e.preventDefault();
          applySwatch();
        });
      } else {
        swatch.addEventListener('mouseover', applySwatch);
      }
    });
  });
}
document.addEventListener('DOMContentLoaded', initSwatches);
document.addEventListener('bricks/ajax/query_result/displayed', initSwatches);

Set the classes correctly :slight_smile: on the elements.
Attached the JSON file for the structure

{"id":4580,"name":"products-showcase-query-swatches","title":"Products Showcase Query Swatches","date":"2025-07-16 16:51:59","date_formatted":"July 16, 2025","author":{"name":"buildpress","avatar":"https:\/\/secure.gravatar.com\/avatar\/3aeb56480bef812e830436ffa024de418d73f99b0b53ba5e09c8a73975a50f57?s=60&d=mm&r=g","url":"https:\/\/bretonstripe.webindev.nl"},"permalink":"https:\/\/bretonstripe.webindev.nl\/template\/products-showcase-query-swatches\/","thumbnail":"https:\/\/bretonstripe.webindev.nl\/wp-content\/uploads\/bricks\/template-screenshots\/template-screenshot-4580-1752677564.webp","bundles":[],"tags":[],"type":"section","content":[{"id":"orvoch","name":"block","parent":0,"children":["daejzf","wfpvyw"],"settings":{"_cssGlobalClasses":["fruzll"],"tag":"ul"},"label":"Swatches Grid Query"},{"id":"daejzf","name":"code","parent":"orvoch","children":[],"settings":{"executeCode":true,"noRoot":true,"cssCode":".variation-swatches {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  justify-content: flex-start;\n  max-width: 100%;\n}\n@media (max-width: 480px) {\n  .variation-swatches .swatch-image {\n    flex: 0 0 calc((100% - 3 * 8px) \/ 4); \/* 4 per row on mobile *\/\n  }\n}\n.variation-swatches .swatch-image {\n  flex: 0 0 calc((100% - 5 * 8px) \/ 6); \/* 6 items per row, with 8px gaps *\/\n  box-sizing: border-box;\n  display: block;\n  text-align: center;\n}\n\n.variation-swatches .swatch-image img {\n  width: 100%;\n  height: auto;\n  max-width: 100%;\n  object-fit: cover;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  transition: border-color 0.2s ease;\n  cursor: pointer;\n}\n\n.variation-swatches .swatch-image.active img {\n  border-color: #000;\n}\n\n.swatch-image img {\n    width: 40px;\n    height: 40px;\n    object-fit: cover;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    transition: border 0.2s ease;\n    cursor: pointer;\n}\n.swatch-image:hover img {\n    border-color: #000;\n}\nimg.attachment-large,\nimg.wp-post-image {\n  opacity: 1 !important;\n  visibility: visible !important;\n  display: block !important;\n  z-index: 5;\n}\n.swatch-image.active img {\n  border: 2px solid #000;\n  border-radius: 4px;\n}\n.swatch-image {\n  position: relative;\n}\n\n.swatch-image::after {\n  content: attr(title);\n  position: absolute;\n  bottom: 110%;\n  left: 50%;\n  transform: translateX(-50%);\n  background: #222;\n  color: #fff;\n  padding: 4px 8px;\n  border-radius: 4px;\n  white-space: nowrap;\n  font-size: 12px;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.2s ease;\n  z-index: 10;\n}\n\n.swatch-image:hover::after {\n  opacity: 1;\n}\n","code":"<?php ?>","user_id":1,"time":1752677174,"javascriptCode":"function initSwatches() {\n  const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n  document.querySelectorAll('.card-products-archive__wrapper').forEach(function (product) {\n    const imageWrapper = product.querySelector('.card-products-archive__img-wrapper');\n    const imageLink = imageWrapper?.querySelector('a');\n    const mainImage = product.querySelector('.card-products-archive__img img');\n\n    if (!mainImage || !imageLink) return;\n\n    mainImage.setAttribute('data-original', mainImage.src);\n    imageLink.setAttribute('data-original-href', imageLink.href);\n\n    const swatches = product.querySelectorAll('.swatch-image');\n\n    swatches.forEach(function (swatch) {\n      const applySwatch = function () {\n        const newImage = swatch.getAttribute('data-image');\n        const newHref = swatch.getAttribute('href') || swatch.getAttribute('data-variation-link');\n\n        if (mainImage && newImage) {\n          mainImage.src = newImage;\n          mainImage.setAttribute('src', newImage);\n          mainImage.removeAttribute('srcset');\n          mainImage.removeAttribute('data-src');\n          mainImage.removeAttribute('sizes');\n          mainImage.removeAttribute('loading');\n          mainImage.classList.remove('lazyloaded', 'lazyload');\n          mainImage.style.backgroundImage = 'none';\n        }\n\n        if (imageLink && newHref) {\n          const originalHref = imageLink.getAttribute('data-original-href') || imageLink.href;\n\n          try {\n            const originalUrl = new URL(originalHref, window.location.origin);\n            const swatchUrl = new URL(newHref, window.location.origin);\n            const kleurValue = swatchUrl.searchParams.get('attribute_pa_kleur');\n\n            if (kleurValue) {\n              originalUrl.searchParams.set('attribute_pa_kleur', kleurValue);\n              imageLink.href = originalUrl.toString();\n            }\n          } catch (error) {\n            console.warn('URL update error', error);\n          }\n        }\n\n        product.querySelectorAll('.swatch-image').forEach(el => el.classList.remove('active'));\n        swatch.classList.add('active');\n      };\n\n      if (isTouchDevice) {\n        swatch.addEventListener('click', function (e) {\n          e.preventDefault();\n          applySwatch();\n        });\n      } else {\n        swatch.addEventListener('mouseover', applySwatch);\n      }\n    });\n  });\n}\ndocument.addEventListener('DOMContentLoaded', initSwatches);\ndocument.addEventListener('bricks\/ajax\/load_page\/completed', initSwatches);"},"label":"Code block JS and CSS"},{"id":"wfpvyw","name":"block","parent":"orvoch","children":["jtttpy"],"settings":{"_cssGlobalClasses":["awksfi"],"tag":"li","query":{"posts_per_page":"18","post_type":["product"],"ajax_loader_animation":"ellipsis","ajax_loader_color":{"raw":"var(--text-body)","id":"01H7SXV8GB7CBRPWMX4FH73YS2","name":"text-body"}},"hasLoop":true},"label":"Swatches Card wrapper"},{"id":"jtttpy","name":"block","parent":"wfpvyw","children":["ecjufe","pfqqxh"],"settings":{"_cssGlobalClasses":["lmiocb"],"tag":"article"},"label":"Card product"},{"id":"ecjufe","name":"block","parent":"jtttpy","children":["ywswnf","rmalzt","jikkik"],"settings":{"_cssGlobalClasses":["lgmjsj"]},"label":"Image wrapper"},{"id":"ywswnf","name":"image","parent":"ecjufe","children":[],"settings":{"image":{"useDynamicData":"{featured_image}","size":"thumbnail"},"tag":"figure","_cssGlobalClasses":["bnqoyf"],"_attributes":[{"id":"ibytce","name":"data-main-image","value":"true"}],"loading":"eager"}},{"id":"rmalzt","name":"div","parent":"ecjufe","children":["ysfdjl"],"settings":{"_cssGlobalClasses":["efugqr"],"_conditions":[[{"id":"dshyvb","key":"dynamic_data","dynamic_data":"{woo_product_sale_price}","compare":"!="}]]},"label":"Sale container"},{"id":"ysfdjl","name":"text-basic","parent":"rmalzt","children":[],"settings":{"text":"Sale","tag":"p","_cssGlobalClasses":["utryrg"],"_conditions":[[{"id":"pgwgop","key":"dynamic_data","dynamic_data":"{woo_product_sale_price}","compare":"!="}]]},"label":"Sale text"},{"id":"jikkik","name":"div","parent":"ecjufe","children":[],"settings":{"taxonomies":["category","post_tag"],"_position":"absolute","_aspectRatio":"1\/1","_width":"100%","tag":"a","link":{"type":"meta","useDynamicData":"{post_url}"}},"label":"Img link overlay"},{"id":"pfqqxh","name":"block","parent":"jtttpy","children":["caqtiv","stkvyh","vaxoaz"],"settings":{"_cssGlobalClasses":["czplqm"]},"label":"Container info"},{"id":"caqtiv","name":"post-title","parent":"pfqqxh","children":[],"settings":{"tag":"h4","_cssGlobalClasses":["kefdtj"],"linkToPost":true},"themeStyles":[]},{"id":"stkvyh","name":"product-price","parent":"pfqqxh","children":[],"settings":{"_cssGlobalClasses":["bjjiep"],"regularPriceTypography":{"color":{"raw":"var(--text-body)","id":"01H7SXV8GB7CBRPWMX4FH73YS2","name":"text-body"},"font-weight":"400"},"salePriceTypography":{"font-weight":"400","color":{"raw":"var(--primary)","id":"01GXBWJFMN0FTV5W63KFVZYHHA","name":"primary"}}},"themeStyles":[]},{"id":"vaxoaz","name":"text-basic","parent":"pfqqxh","children":[],"settings":{"text":"{do_action:woocommerce_after_shop_loop_item}"},"label":"tag after shop loop"}],"templateType":"section","global_classes":[{"id":"fruzll","name":"products-archive__grid","settings":{"_gridGap:tablet_portrait":"var(--space-xl) var(--space-s)","_gridTemplateColumns:tablet_portrait":"repeat(4, minmax(0, 1fr))","_gridTemplateColumns:mobile_landscape":"repeat(1, minmax(0, 1fr))","_padding":{"left":"0"},"_margin":{"bottom":"0","top":"0"},"_display":"grid","_gridGap":"var(--space-xl) var(--space-m)","_gridTemplateColumns":"repeat(3, minmax(0, 1fr))"},"modified":1750671339,"user_id":1},{"id":"lmiocb","name":"card-products-archive","settings":{"_rowGap":"var(--space-s)"},"modified":1750671339,"user_id":1},{"id":"lgmjsj","name":"card-products-archive__img-wrapper","settings":{"_isolation":"isolate","_position":"relative"},"modified":1750671339,"user_id":1},{"id":"bnqoyf","name":"card-products-archive__img","settings":{"_objectFit":"cover","_objectPosition":"50%","columns":"5"},"modified":1750671339,"user_id":1},{"id":"awksfi","name":"card-products-archive__wrapper","settings":[],"modified":1750671339,"user_id":1},{"id":"bjjiep","name":"card-products-archive__price","settings":{"regularPriceTypography":{"font-size":"var(--text-m)","color":{"raw":"var(--text-body)","id":"01H7SXV8GB7CBRPWMX4FH73YS2","name":"text-body"}},"salePriceTypography":{"color":{"raw":"var(--primary)","id":"01GXBWJFMN0FTV5W63KFVZYHHA","name":"primary"},"font-size":"var(--text-m)","font-weight":"500"}},"modified":1750671339,"user_id":1},{"id":"czplqm","name":"card-products-archive__info","settings":{"_direction":"column","_rowGap":"0"},"modified":1750671339,"user_id":1},{"id":"efugqr","name":"card-products-archive__sale","settings":{"_background":{"color":{"raw":"var(--dark)","id":"01H7XJZ4GBR5DD6Q0547QE5P4H","name":"dark"}},"_padding":{"bottom":".4rem","top":".4rem","left":".8rem","right":".8rem"},"_top":"var(--space-s)","_left":"var(--space-s)","_position":"absolute"},"modified":1750671339,"user_id":1},{"id":"utryrg","name":"card-products-archive__sale-text","settings":{"_typography":{"font-size":"var(--text-s)","text-transform":"uppercase","font-weight":"700","color":{"raw":"var(--light)","id":"01H7XJZ0KTXZ00FKVG3Y345XCP","name":"light"},"line-height":"150%"}},"modified":1750671339,"user_id":1},{"id":"kefdtj","name":"card-products-archive__title","settings":{"_typography":{"font-size":"var(--text-l)"},"_cssCustom":"\/*.card-products-archive__title:not(a) > a::after {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    cursor: pointer;\n    display: flex;\n}*\/","_margin":{"bottom":"0"}},"modified":1750671339,"user_id":1}],"globalVariables":[{"id":"min-screen-width","name":"min-screen-width","value":"320px","category":"corefrm"},{"id":"max-screen-width","name":"max-screen-width","value":"1400px","category":"corefrm"},{"id":"primary","name":"primary","value":"#171A60","category":"corefrm"},{"id":"secondary","name":"secondary","value":"hsla(0,94%,68%,1)","category":"corefrm"},{"id":"tertiary","name":"tertiary","value":"#F6F6F9","category":"corefrm"},{"id":"bg-body","name":"bg-body","value":"#FFFFFF","category":"corefrm"},{"id":"text-body","name":"text-body","value":"#767676","category":"corefrm"},{"id":"links","name":"links","value":"#222222","category":"corefrm"},{"id":"headings","name":"headings","value":"#171A60","category":"corefrm"},{"id":"border-primary","name":"border-primary","value":"hsla(0,0%,50%,0.25)","category":"corefrm"},{"id":"shadow-primary","name":"shadow-primary","value":"hsla(0,0%,0%,0.15)","category":"corefrm"},{"id":"dark","name":"dark","value":"#222222","category":"corefrm"},{"id":"dark-5","name":"dark-5","value":"#2222220d","category":"corefrm"},{"id":"dark-10","name":"dark-10","value":"#2222221a","category":"corefrm"},{"id":"dark-20","name":"dark-20","value":"#22222233","category":"corefrm"},{"id":"dark-30","name":"dark-30","value":"#2222224d","category":"corefrm"},{"id":"dark-40","name":"dark-40","value":"#22222266","category":"corefrm"},{"id":"dark-50","name":"dark-50","value":"#22222280","category":"corefrm"},{"id":"dark-60","name":"dark-60","value":"#22222299","category":"corefrm"},{"id":"dark-70","name":"dark-70","value":"#222222b3","category":"corefrm"},{"id":"dark-80","name":"dark-80","value":"#222222cc","category":"corefrm"},{"id":"dark-90","name":"dark-90","value":"#222222e6","category":"corefrm"},{"id":"light","name":"light","value":"hsla(85,0%,100%,1)","category":"corefrm"},{"id":"light-5","name":"light-5","value":"hsla(0,0%,100%,0.05)","category":"corefrm"},{"id":"light-10","name":"light-10","value":"hsla(0,0%,100%,0.1)","category":"corefrm"},{"id":"light-20","name":"light-20","value":"hsla(0,0%,100%,0.2)","category":"corefrm"},{"id":"light-30","name":"light-30","value":"hsla(0,0%,100%,0.3)","category":"corefrm"},{"id":"light-40","name":"light-40","value":"hsla(0,0%,100%,0.4)","category":"corefrm"},{"id":"light-50","name":"light-50","value":"hsla(0,0%,100%,0.5)","category":"corefrm"},{"id":"light-60","name":"light-60","value":"hsla(0,0%,100%,0.6)","category":"corefrm"},{"id":"light-70","name":"light-70","value":"hsla(0,0%,100%,0.7)","category":"corefrm"},{"id":"light-80","name":"light-80","value":"hsla(0,0%,100%,0.8)","category":"corefrm"},{"id":"light-90","name":"light-90","value":"hsla(0,0%,100%,0.9)","category":"corefrm"},{"id":"success","name":"success","value":"hsla(136,95%,56%,1)","category":"corefrm"},{"id":"success-5","name":"success-5","value":"hsla(136,95%,56%,0.05)","category":"corefrm"},{"id":"success-10","name":"success-10","value":"hsla(136,95%,56%,0.1)","category":"corefrm"},{"id":"success-20","name":"success-20","value":"hsla(136,95%,56%,0.2)","category":"corefrm"},{"id":"success-30","name":"success-30","value":"hsla(136,95%,56%,0.3)","category":"corefrm"},{"id":"success-40","name":"success-40","value":"hsla(136,95%,56%,0.4)","category":"corefrm"},{"id":"success-50","name":"success-50","value":"hsla(136,95%,56%,0.5)","category":"corefrm"},{"id":"success-60","name":"success-60","value":"hsla(136,95%,56%,0.6)","category":"corefrm"},{"id":"success-70","name":"success-70","value":"hsla(136,95%,56%,0.7)","category":"corefrm"},{"id":"success-80","name":"success-80","value":"hsla(136,95%,56%,0.8)","category":"corefrm"},{"id":"success-90","name":"success-90","value":"hsla(136,95%,56%,0.9)","category":"corefrm"},{"id":"error","name":"error","value":"#f92444","category":"corefrm"},{"id":"error-5","name":"error-5","value":"#f924440d","category":"corefrm"},{"id":"error-10","name":"error-10","value":"#f924441a","category":"corefrm"},{"id":"error-20","name":"error-20","value":"#f9244433","category":"corefrm"},{"id":"error-30","name":"error-30","value":"#f924444d","category":"corefrm"},{"id":"error-40","name":"error-40","value":"#f9244466","category":"corefrm"},{"id":"error-50","name":"error-50","value":"#f9244480","category":"corefrm"},{"id":"error-60","name":"error-60","value":"#f9244499","category":"corefrm"},{"id":"error-70","name":"error-70","value":"#f92444b3","category":"corefrm"},{"id":"error-80","name":"error-80","value":"#f92444cc","category":"corefrm"},{"id":"error-90","name":"error-90","value":"#f92444e6","category":"corefrm"},{"id":"space-4xs","name":"space-4xs","value":"clamp(0.52rem,calc(-0.03vw + 0.53rem),0.49rem)","category":"corefrm"},{"id":"space-3xs","name":"space-3xs","value":"clamp(0.66rem,calc(0.04vw + 0.64rem),0.7rem)","category":"corefrm"},{"id":"space-2xs","name":"space-2xs","value":"clamp(0.82rem,calc(0.16vw + 0.77rem),0.99rem)","category":"corefrm"},{"id":"space-xs","name":"space-xs","value":"clamp(1.02rem,calc(0.35vw + 0.91rem),1.4rem)","category":"corefrm"},{"id":"space-s","name":"space-s","value":"clamp(1.28rem,calc(0.65vw + 1.07rem),1.98rem)","category":"corefrm"},{"id":"space-m","name":"space-m","value":"clamp(1.6rem,calc(1.11vw + 1.24rem),2.8rem)","category":"corefrm"},{"id":"space-l","name":"space-l","value":"clamp(2rem,calc(1.81vw + 1.42rem),3.96rem)","category":"corefrm"},{"id":"space-xl","name":"space-xl","value":"clamp(2.5rem,calc(2.87vw + 1.58rem),5.6rem)","category":"corefrm"},{"id":"space-2xl","name":"space-2xl","value":"clamp(3.13rem,calc(4.44vw + 1.71rem),7.92rem)","category":"corefrm"},{"id":"space-3xl","name":"space-3xl","value":"clamp(3.91rem,calc(6.75vw + 1.75rem),11.19rem)","category":"corefrm"},{"id":"space-4xl","name":"space-4xl","value":"clamp(4.88rem,calc(10.13vw + 1.64rem),15.83rem)","category":"corefrm"},{"id":"text-xs","name":"text-xs","value":"clamp(1.26rem,calc(-0.23vw + 1.34rem),1.01rem)","category":"corefrm"},{"id":"text-s","name":"text-s","value":"clamp(1.42rem,calc(-0.07vw + 1.44rem),1.35rem)","category":"corefrm"},{"id":"text-m","name":"text-m","value":"clamp(1.6rem,calc(0.19vw + 1.54rem),1.8rem)","category":"corefrm"},{"id":"text-l","name":"text-l","value":"clamp(1.8rem,calc(0.55vw + 1.62rem),2.4rem)","category":"corefrm"},{"id":"text-xl","name":"text-xl","value":"clamp(2.02rem,calc(1.09vw + 1.68rem),3.2rem)","category":"corefrm"},{"id":"text-2xl","name":"text-2xl","value":"clamp(2.28rem,calc(1.84vw + 1.69rem),4.26rem)","category":"corefrm"},{"id":"text-3xl","name":"text-3xl","value":"clamp(2.56rem,calc(2.89vw + 1.64rem),5.68rem)","category":"corefrm"},{"id":"text-4xl","name":"text-4xl","value":"clamp(2.88rem,calc(4.34vw + 1.49rem),7.58rem)","category":"corefrm"},{"id":"hero-title-size","name":"hero-title-size","value":"var(--text-4xl)","category":"corefrm"},{"id":"post-title-size","name":"post-title-size","value":"var(--text-2xl)","category":"corefrm"},{"id":"nav-link-size","name":"nav-link-size","value":"var(--text-s)","category":"corefrm"},{"id":"header-space","name":"header-space","value":"var(--space-s)","category":"corefrm"},{"id":"btn-space","name":"btn-space","value":"var(--space-xs) var(--space-s)","category":"corefrm"},{"id":"card-space","name":"card-space","value":"var(--space-s)","category":"corefrm"},{"id":"footer-space","name":"footer-space","value":"var(--space-s) var(--space-m)","category":"corefrm"},{"id":"columns-1","name":"columns-1","value":"repeat(1,minmax(0,1fr))","category":"corefrm"},{"id":"columns-2","name":"columns-2","value":"repeat(2,minmax(0,1fr))","category":"corefrm"},{"id":"columns-3","name":"columns-3","value":"repeat(3,minmax(0,1fr))","category":"corefrm"},{"id":"columns-4","name":"columns-4","value":"repeat(4,minmax(0,1fr))","category":"corefrm"},{"id":"columns-5","name":"columns-5","value":"repeat(5,minmax(0,1fr))","category":"corefrm"},{"id":"columns-6","name":"columns-6","value":"repeat(6,minmax(0,1fr))","category":"corefrm"},{"id":"columns-7","name":"columns-7","value":"repeat(7,minmax(0,1fr))","category":"corefrm"},{"id":"columns-8","name":"columns-8","value":"repeat(8,minmax(0,1fr))","category":"corefrm"},{"id":"radius-xs","name":"radius-xs","value":"clamp(0.4rem,calc(0vw + 0.4rem),0.4rem)","category":"corefrm"},{"id":"radius-s","name":"radius-s","value":"clamp(0.6rem,calc(0.19vw + 0.54rem),0.8rem)","category":"corefrm"},{"id":"radius-m","name":"radius-m","value":"clamp(1rem,calc(0.19vw + 0.94rem),1.2rem)","category":"corefrm"},{"id":"radius-l","name":"radius-l","value":"clamp(1.6rem,calc(0.37vw + 1.48rem),2rem)","category":"corefrm"},{"id":"radius-xl","name":"radius-xl","value":"clamp(2.6rem,calc(0.56vw + 2.42rem),3.2rem)","category":"corefrm"},{"id":"radius-full","name":"radius-full","value":"999rem","category":"corefrm"},{"id":"shadow-xs","name":"shadow-xs","value":"0 1px 2px var(--shadow-primary)","category":"corefrm"},{"id":"shadow-s","name":"shadow-s","value":"0 1.5px 3px var(--shadow-primary)","category":"corefrm"},{"id":"shadow-m","name":"shadow-m","value":"0 2px 6px var(--shadow-primary)","category":"corefrm"},{"id":"shadow-l","name":"shadow-l","value":"0 3px 12px var(--shadow-primary)","category":"corefrm"},{"id":"shadow-xl","name":"shadow-xl","value":"0 6px 48px var(--shadow-primary)","category":"corefrm"}],"globalVariablesCategories":[{"id":"corefrm","name":"Core Framework"}]}

Any feedback or suggestions are welcome!