← back to Designer Wallcoverings
auto-save: 2026-06-23T17:53:42 (20 files) — shopify/_cwGRID/assets/theme.css.liquid shopify/_cwGRID/sections/collection.liquid shopify/_cwGRID/snippets/product-form-content.liquid shopify/_cwGRID/snippets/spec-sheet-button.liquid shopify/_cwGRID/templates/page.spec-sheet.liquid
72905e9324f7ca68aca6c9480fbdb0d37c819c1d · 2026-06-23 17:53:47 -0700 · Steve Abrams
Files touched
A audits/frontpage-review/dw-frontpage-desktop.jpegA audits/frontpage-review/dw-hero-viewport.jpegA audits/frontpage-review/dw-mobile-top.jpegA audits/frontpage-review/dw-scroll-1500.jpegA audits/frontpage-review/dw-scroll-2100.jpegA audits/frontpage-review/dw-scroll-760.jpegM shopify/_cwGRID/assets/theme.css.liquidM shopify/_cwGRID/sections/collection.liquidM shopify/_cwGRID/snippets/product-form-content.liquidM shopify/_cwGRID/snippets/spec-sheet-button.liquidM shopify/_cwGRID/templates/page.spec-sheet.liquidM shopify/scripts/cadence/data/cadence-cursor.jsonM shopify/scripts/cadence/data/cadence-plan-am-2026-06-23.jsonM shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.jsonA shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.jsonM shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonlA shopify/scripts/quadrille-phase2M shopify/theme-5.0-duplicate/assets/dw-pdp-size-pills.jsM shopify/theme-files/sections/collection.liquidM shopify/theme-files/snippets/dw-boost-overrides.liquidM shopify/tres-tintas-desc-backups/_done.ledgerM vendor-logos/_brands-page.htmlA vendor-logos/quadrille.pngA vendor-logos/thibaut.png
Diff
commit 72905e9324f7ca68aca6c9480fbdb0d37c819c1d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Jun 23 17:53:47 2026 -0700
auto-save: 2026-06-23T17:53:42 (20 files) — shopify/_cwGRID/assets/theme.css.liquid shopify/_cwGRID/sections/collection.liquid shopify/_cwGRID/snippets/product-form-content.liquid shopify/_cwGRID/snippets/spec-sheet-button.liquid shopify/_cwGRID/templates/page.spec-sheet.liquid
---
audits/frontpage-review/dw-frontpage-desktop.jpeg | Bin 0 -> 704055 bytes
audits/frontpage-review/dw-hero-viewport.jpeg | Bin 0 -> 710770 bytes
audits/frontpage-review/dw-mobile-top.jpeg | Bin 0 -> 212525 bytes
audits/frontpage-review/dw-scroll-1500.jpeg | Bin 0 -> 540125 bytes
audits/frontpage-review/dw-scroll-2100.jpeg | Bin 0 -> 233031 bytes
audits/frontpage-review/dw-scroll-760.jpeg | Bin 0 -> 657857 bytes
shopify/_cwGRID/assets/theme.css.liquid | 157 +--
shopify/_cwGRID/sections/collection.liquid | 358 +++---
.../_cwGRID/snippets/product-form-content.liquid | 1329 +++++++++-----------
shopify/_cwGRID/snippets/spec-sheet-button.liquid | 287 ++---
shopify/_cwGRID/templates/page.spec-sheet.liquid | 1 -
shopify/scripts/cadence/data/cadence-cursor.json | 2 +-
.../cadence/data/cadence-plan-am-2026-06-23.json | 10 +-
.../cadence/data/cadence-plan-am-2026-06-24.json | 190 +--
.../cadence/data/cadence-plan-pm-2026-06-24.json | 182 +++
.../cadence/data/upload-restore-2026-06-24.jsonl | 18 +
shopify/scripts/quadrille-phase2 | 1 +
.../assets/dw-pdp-size-pills.js | 4 +-
shopify/theme-files/sections/collection.liquid | 358 +++---
.../theme-files/snippets/dw-boost-overrides.liquid | 5 +-
shopify/tres-tintas-desc-backups/_done.ledger | 1173 -----------------
vendor-logos/_brands-page.html | 2 +-
vendor-logos/quadrille.png | Bin 0 -> 36352 bytes
vendor-logos/thibaut.png | Bin 0 -> 8759 bytes
24 files changed, 1360 insertions(+), 2717 deletions(-)
diff --git a/audits/frontpage-review/dw-frontpage-desktop.jpeg b/audits/frontpage-review/dw-frontpage-desktop.jpeg
new file mode 100644
index 00000000..cce67c6e
Binary files /dev/null and b/audits/frontpage-review/dw-frontpage-desktop.jpeg differ
diff --git a/audits/frontpage-review/dw-hero-viewport.jpeg b/audits/frontpage-review/dw-hero-viewport.jpeg
new file mode 100644
index 00000000..37f4e08a
Binary files /dev/null and b/audits/frontpage-review/dw-hero-viewport.jpeg differ
diff --git a/audits/frontpage-review/dw-mobile-top.jpeg b/audits/frontpage-review/dw-mobile-top.jpeg
new file mode 100644
index 00000000..e80a5518
Binary files /dev/null and b/audits/frontpage-review/dw-mobile-top.jpeg differ
diff --git a/audits/frontpage-review/dw-scroll-1500.jpeg b/audits/frontpage-review/dw-scroll-1500.jpeg
new file mode 100644
index 00000000..7a11265c
Binary files /dev/null and b/audits/frontpage-review/dw-scroll-1500.jpeg differ
diff --git a/audits/frontpage-review/dw-scroll-2100.jpeg b/audits/frontpage-review/dw-scroll-2100.jpeg
new file mode 100644
index 00000000..8aa75ade
Binary files /dev/null and b/audits/frontpage-review/dw-scroll-2100.jpeg differ
diff --git a/audits/frontpage-review/dw-scroll-760.jpeg b/audits/frontpage-review/dw-scroll-760.jpeg
new file mode 100644
index 00000000..fcf3a1f4
Binary files /dev/null and b/audits/frontpage-review/dw-scroll-760.jpeg differ
diff --git a/shopify/_cwGRID/assets/theme.css.liquid b/shopify/_cwGRID/assets/theme.css.liquid
index f187cc74..d3d49665 100644
--- a/shopify/_cwGRID/assets/theme.css.liquid
+++ b/shopify/_cwGRID/assets/theme.css.liquid
@@ -1790,20 +1790,11 @@ h6 {
.shopify-policy__title h1,
.shopify-policy__title .age-gate__heading {
margin: 0 0 10px 0;
- padding: 30px;
+ padding: 0 30px;
text-align: center;
font-size: 1.7142857143rem;
-webkit-font-smoothing: antialiased;
word-break: break-word;
- background-color: rgba(0, 0, 0, 0.5);
- color: #ffffff;
- border-radius: 4px;
- display: block;
- width: -webkit-fit-content;
- width: fit-content;
- max-width: 90%;
- margin-left: auto;
- margin-right: auto;
}
{%- if settings.heading-font-small-caps == true -%}
.page-title,
@@ -3479,42 +3470,9 @@ iframe {
max-width: 600px;
margin: 0 auto 20px;
font-size: 1rem;
- background-color: rgba(0, 0, 0, 0.5);
- color: #ffffff;
- padding: 20px 30px;
- border-radius: 4px;
- display: block;
- width: -webkit-fit-content;
- width: fit-content;
- max-width: 90%;
}
.collection-header-alternate .collection-description {
- max-width: 90%;
-}
-
-/* Boost AI Search & Discovery collection header: the title + description are
- overlaid on the hero background image. Put each text block on its own 50%
- opaque dark panel so it stays readable over any image (Steve 2026-06-22).
- Per-element (not the wrapper) — the wrapper's width collapses and won't
- cover the wider description text. */
-.boost-sd__header-title {
- display: inline-block !important;
- background-color: rgba(0, 0, 0, 0.55) !important;
- color: #ffffff !important;
- padding: 10px 24px !important;
- border-radius: 6px !important;
-}
-.boost-sd__header-description {
- display: inline-block !important;
- background-color: rgba(0, 0, 0, 0.55) !important;
- color: #ffffff !important;
- padding: 16px 28px !important;
- border-radius: 6px !important;
- max-width: 92% !important;
- margin-top: 10px !important;
-}
-.boost-sd__header-description * {
- color: #ffffff !important;
+ max-width: 100%;
}
@media (min-width: 770px) {
@@ -6965,7 +6923,7 @@ iframe {
text-align: left;
}
-input.mailing-list-email {
+input.input.mailing-list-email {
display: inline-block;
vertical-align: top;
height: 39px;
@@ -6973,7 +6931,7 @@ input.mailing-list-email {
padding: 9px 101px 9px 12px;
font-size: 1rem;
}
-input.mailing-list-email::placeholder {
+input.input.mailing-list-email::placeholder {
color: {{ settings.body-text-color }};
}
@@ -6987,7 +6945,7 @@ input.mailing-list-email::placeholder {
.mailing-list-submit .submit {
width: auto;
height: 39px;
- margin: 0;
+ margin: 5px 0;
padding: 1px 10px 0;
font-size: 0.9285714286rem;
line-height: 39px;
@@ -7465,7 +7423,6 @@ noscript .shopify-localization-form .disclosure-list__item--label {
margin-top: 35px;
border-left: 1px solid {{ settings.border-color }};
padding: 0 30px;
- font-size: 0;
}
@media (max-width: 1079px) {
.product-recommendations-wrapper--right {
@@ -7500,12 +7457,8 @@ noscript .shopify-localization-form .disclosure-list__item--label {
}
}
.product-recommendations-wrapper--right a {
- display: inline-block;
- vertical-align: top;
- width: 23%;
- margin: 0 1%;
- margin-bottom: 0;
- font-size: 16px;
+ display: block;
+ margin-bottom: 25px;
}
.product-recommendations-wrapper--right a:last-child {
margin-bottom: 0;
@@ -8433,61 +8386,17 @@ shopify-payment-terms {
font-family: {{ fonts_font_body_family }};
font-style: {{ fonts_font_body_style }};
font-weight: {{ fonts_font_body_weight }};
- margin: 0 auto 15px;
- padding: 15px 30px;
+ margin: 0;
+ padding: 0 30px;
text-align: center;
- color: #ffffff;
+ color: {{ settings.meta-color }};
font-size: 1rem;
- background-color: rgba(0, 0, 0, 0.5);
- border-radius: 4px;
- display: block;
- width: -webkit-fit-content;
- width: fit-content;
- max-width: 90%;
}
.breadcrumbs a {
- color: #ffffff;
- text-decoration: underline;
-}
-.breadcrumbs a:hover {
- color: #e0e0e0;
-}
-
-/* DW FIX 2026-06-23: the base .breadcrumbs rule above (white text + dark
- rgba(0,0,0,.5) overlay) is meant for breadcrumbs sitting OVER a collection
- hero image. On standard pages (product / page / cart / search / 404 / blog /
- account) there is no hero, so it rendered as an empty grey bar with invisible
- white text. Strip the overlay + use readable dark body text on those pages,
- then RE-ASSERT the dark overlay for the real hero case (.collection-header)
- so collection pages with a banner image are unchanged. */
-.breadcrumbs {
- background-color: transparent;
- color: #333333;
- border-radius: 0;
-}
-.breadcrumbs a {
- color: #333333;
+ color: {{ settings.meta-color }};
}
.breadcrumbs a:hover {
- color: #000000;
-}
-.breadcrumbs .divider {
- color: #999999;
-}
-/* Preserve the hero-overlay styling where breadcrumbs sit on a banner image. */
-.collection-header .breadcrumbs {
- background-color: rgba(0, 0, 0, 0.5);
- color: #ffffff;
- border-radius: 4px;
-}
-.collection-header .breadcrumbs a {
- color: #ffffff;
-}
-.collection-header .breadcrumbs a:hover {
- color: #e0e0e0;
-}
-.collection-header .breadcrumbs .divider {
- color: #ffffff;
+ color: {{ settings.accent-color }};
}
.filter-form {
@@ -9414,8 +9323,9 @@ input[type=checkbox].recipient-disclosure__checkbox {
}
.header-tools .aligned-right {
position: relative;
- float: right;
- text-align: right;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
}
.header-tools .aligned-right > *:first-child {
margin-left: 0;
@@ -11799,17 +11709,17 @@ body:not(.user-is-tabbing) .shopify-model-viewer-ui .shopify-model-viewer-ui__bu
position: relative;
}
-input.search-form__input {
+input.input.search-form__input {
max-width: 100%;
padding: 16px 52px 16px 18px;
margin: 0;
}
-.search-form--header input.search-form__input {
+.search-form--header input.input.search-form__input {
padding: 10px 40px 10px 12px;
font-size: 13px;
}
@media (max-width: 1079px) {
- input.search-form__input {
+ input.input.search-form__input {
font-size: 16px;
}
}
@@ -12392,33 +12302,4 @@ https://apps.shopify.com/coin
}
.age-gate__select-wrapper .select-wrapper {
max-width: none;
-}
-/* DW FIX 2026-06-23: collection HEADER title + description contrast.
- The base rules above give `.page-title` and `.collection-description` a
- translucent-black overlay (rgba(0,0,0,.5)) + white text. That treatment is
- only legible OVER a collection hero image. On the vast majority of vendor
- collections there is NO hero image (e.g. /collections/tres-tintas), so the
- block rendered as WHITE TEXT ON A MEDIUM-GREY BOX floating on a white page —
- unreadable. Strip the overlay + use readable dark text by default, then
- RE-ASSERT the dark overlay only when the collection actually has a hero
- image (theme adds `.collection-image--true` to the .collection wrapper).
- Same family as the .breadcrumbs hero-overlay fix above. */
-.page-title,
-.collection-description {
- background-color: transparent;
- color: #1a1a1a;
-}
-.collection-description,
-.collection-description * {
- color: #333333;
-}
-/* Preserve the hero-overlay treatment where there IS a banner image. */
-.collection-image--true .page-title,
-.collection-image--true .collection-description {
- background-color: rgba(0, 0, 0, 0.5);
- color: #ffffff;
-}
-.collection-image--true .collection-description,
-.collection-image--true .collection-description * {
- color: #ffffff;
-}
+}
\ No newline at end of file
diff --git a/shopify/_cwGRID/sections/collection.liquid b/shopify/_cwGRID/sections/collection.liquid
index fb5d9a95..20451845 100644
--- a/shopify/_cwGRID/sections/collection.liquid
+++ b/shopify/_cwGRID/sections/collection.liquid
@@ -36,170 +36,238 @@
{% endunless %}
{% paginate collection.products by products_per_page %}
- <!-- INFINITE SCROLL WRAPPER: required by dw-native-infinite.js -->
- <div data-dw-infinite
- data-dw-infinite-items=".collection-products"
- data-dw-infinite-next="{{ paginate.next.url }}"
- data-dw-infinite-page="{{ current_page }}">
-
- <section
- class="collection collection-image--{{ show_collection_image }}"
- data-product-hover="{{ settings.product_hover }}"
- {% if use_masonry %}data-collection-masonry{% endif %}
- data-section-id="{{ section.id }}"
- data-section-type="collection">
-
- {% if use_masonry or show_collection_image or collection.description != blank or show_sorting or show_filters %}
- <div
- class="
- collection-header
+ <section
+ class="collection collection-image--{{ show_collection_image }}"
+ data-product-hover="{{ settings.product_hover }}"
+ {% if use_masonry %}data-collection-masonry{% endif %}
+ data-section-id="{{ section.id }}"
+ data-section-type="collection">
+
+ {% if use_masonry or show_collection_image or collection.description != blank or show_sorting or show_filters %}
+ <div
+ class="
+ collection-header
+ {% if use_masonry %}
+ collection-header-alternate
+ {% endif %}
+ {% if show_filters and show_sorting %}
+ collection-header--filters-sort-enabled
+ {% endif %}
+ "
+ >
+ {% if show_collection_image %}
+ <div class="collection-featured-image">
+ {%
+ render 'rimg',
+ img: collection.image,
+ size: '1024x1024',
+ lazy: true,
+ %}
+ </div>
+ {% endif %}
+
+ <div class="collection-header-content">
{% if use_masonry %}
- collection-header-alternate
+ {% render 'breadcrumbs' %}
+ <h1 class="page-title">{{ collection.title }}</h1>
{% endif %}
- {% if show_filters and show_sorting %}
- collection-header--filters-sort-enabled
- {% endif %}
- "
- >
- {% if show_collection_image %}
- <div class="collection-featured-image">
- {%
- render 'rimg',
- img: collection.image,
- size: '1024x1024',
- lazy: true,
- %}
+
+ {% if collection.description != blank and section.settings.show_description %}
+ <div class="collection-description rte">
+ {{ collection.description }}
</div>
{% endif %}
- <div class="collection-header-content">
- {% if use_masonry %}
- {% render 'breadcrumbs' %}
- <h1 class="page-title">{{ collection.title }}</h1>
- {% endif %}
-
- {% if collection.description != blank and section.settings.show_description %}
- <div class="collection-description rte">
- {{ collection.description }}
- </div>
- {% endif %}
-
- {% if show_filters or show_sorting %}
- <div class="collection-filters">
- {% if show_filters and collection.filters.size > 0 %}
- <!-- Approach B: Horizontal filter bar (proxies to Boost's hidden controls) -->
- {% render 'collection-filters-horizontal' %}
-
- <!-- Boost native filters (hidden by Approach B CSS, powers the filtering) -->
- <div class="faceted-filters" data-faceted-filter>
- {%
- render "faceted-filters",
- filters: collection.filters,
- class_prefix: 'collection',
- %}
- </div>
- {% endif %}
- {% if show_sorting %}
- <div class="collection-sorting__wrapper">
- <label class="collection-filters__title label" for="sort-by">
- {{- 'collections.collection.sort_title' | t -}}:
- </label>
-
- <div
- class="
- collection-dropdown
- collection-dropdown--sort
- select-wrapper
- {% if collection.current_vendor %}
- vendor-collection
- {% endif %}
- "
- >
- {% assign current_sort = collection.sort_by | default: collection.default_sort_by %}
-
- <span class="selected-text"></span>
-
- <select id="sort-by" class="select" data-collection-sorting>
- {%- for option in collection.sort_options -%}
- {% if current_sort == option.value %}
- <option value="{{ option.value }}" selected="selected">{{ option.name }}</option>
- {% else %}
- <option value="{{ option.value }}">{{ option.name }}</option>
- {% endif %}
- {% endfor %}
- </select>
- </div>
- </div>
- {% endif %}
- </div>
- {% endif %}
- </div>
+ {% if show_filters or show_sorting %}
+ <div class="collection-filters">
+ {% if show_filters and collection.filters.size > 0 %}
+ <!-- Approach B: Horizontal filter bar (proxies to Boost's hidden controls) -->
+ {% render 'collection-filters-horizontal' %}
- {% if show_filters and collection.filters.size > 0 %}
- {% for filter in collection.filters %}
- {% if filter.active_values.size > 0 or filter.min_value.value or filter.max_value.value %}
- {%-
- render 'faceted-filters-active',
- show_sorting: show_sorting,
- filter: filter,
+ <!-- Boost native filters (hidden by Approach B CSS, powers the filtering) -->
+ <div class="faceted-filters" data-faceted-filter>
+ {%
+ render "faceted-filters",
filters: collection.filters,
class_prefix: 'collection',
- clear_url: collection.url,
%}
- {% break %}
+ </div>
{% endif %}
- {% endfor %}
+ {% if show_sorting %}
+ <div class="collection-sorting__wrapper">
+ <label class="collection-filters__title label" for="sort-by">
+ {{- 'collections.collection.sort_title' | t -}}:
+ </label>
+
+ <div
+ class="
+ collection-dropdown
+ collection-dropdown--sort
+ select-wrapper
+ {% if collection.current_vendor %}
+ vendor-collection
+ {% endif %}
+ "
+ >
+ {% assign current_sort = collection.sort_by | default: collection.default_sort_by %}
+
+ <span class="selected-text"></span>
+
+ <select id="sort-by" class="select" data-collection-sorting>
+ {%- for option in collection.sort_options -%}
+ {% if current_sort == option.value %}
+ <option value="{{ option.value }}" selected="selected">{{ option.name }}</option>
+ {% else %}
+ <option value="{{ option.value }}">{{ option.name }}</option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ {% endif %}
+ </div>
{% endif %}
</div>
- {% endif %}
-
- <!-- Full Collection Toolbar: Sort + Grid Density Slider -->
- {% include 'collection-toolbar' %}
- <div
- class="collection-products rows-of-{{ section.settings.products_per_row }} grid-cols-3"
- data-collection-grid
- {% if use_masonry %}data-masonry-grid{% endif %}
- >
- {%- if use_masonry -%}
- <div class="product-grid-masonry-sizer" data-masonry-sizer></div>
- {%- endif -%}
-
- {%- if collection.handle == 'all' and collection.all_vendors.size == 0 and collection.all_types.size == 0 -%}
- {%- for i in (1..section.settings.products_per_row) -%}
- {%- capture productImage -%}
- {%- cycle 'product-1', 'product-2', 'product-3' -%}
- {%- endcapture -%}
- {%- assign image = productImage | placeholder_svg_tag: 'placeholder-svg' -%}
-
- {%- render 'home-onboard-product', image: image -%}
- {%- endfor -%}
- {%- else -%}
- {% for product in collection.products %}
- {%
- render 'product-list-item',
- product: product,
- %}
- {% else %}
- {% capture continueLink %}
- <a href="{{ routes.all_products_collection_url }}">{{ 'collections.collection.continue_link' | t }}</a>
- {% endcapture %}
- <p class="empty">{{ 'collections.collection.empty_html' | t: continue_link: continueLink }}</p>
+ {% if show_filters and collection.filters.size > 0 %}
+ {% for filter in collection.filters %}
+ {% if filter.active_values.size > 0 or filter.min_value.value or filter.max_value.value %}
+ {%-
+ render 'faceted-filters-active',
+ show_sorting: show_sorting,
+ filter: filter,
+ filters: collection.filters,
+ class_prefix: 'collection',
+ clear_url: collection.url,
+ %}
+ {% break %}
+ {% endif %}
{% endfor %}
- {%- endif -%}
+ {% endif %}
</div>
- </section>
+ {% endif %}
+
+ <!-- Full Collection Toolbar: Sort + Grid Density Slider -->
+ {% include 'collection-toolbar' %}
+
+ <div
+ class="collection-products rows-of-{{ section.settings.products_per_row }} grid-cols-3"
+ data-collection-grid
+ {% if use_masonry %}data-masonry-grid{% endif %}
+ >
+ {%- if use_masonry -%}
+ <div class="product-grid-masonry-sizer" data-masonry-sizer></div>
+ {%- endif -%}
- {%
- render 'pagination',
- paginate: paginate,
- %}
- </div>
- <!-- END INFINITE SCROLL WRAPPER -->
+ {%- if collection.handle == 'all' and collection.all_vendors.size == 0 and collection.all_types.size == 0 -%}
+ {%- for i in (1..section.settings.products_per_row) -%}
+ {%- capture productImage -%}
+ {%- cycle 'product-1', 'product-2', 'product-3' -%}
+ {%- endcapture -%}
+ {%- assign image = productImage | placeholder_svg_tag: 'placeholder-svg' -%}
+ {%- render 'home-onboard-product', image: image -%}
+ {%- endfor -%}
+ {%- else -%}
+ {% for product in collection.products %}
+ {%
+ render 'product-list-item',
+ product: product,
+ %}
+ {% else %}
+ {% capture continueLink %}
+ <a href="{{ routes.all_products_collection_url }}">{{ 'collections.collection.continue_link' | t }}</a>
+ {% endcapture %}
+ <p class="empty">{{ 'collections.collection.empty_html' | t: continue_link: continueLink }}</p>
+ {% endfor %}
+ {%- endif -%}
+ </div>
+ </section>
+
+ <!-- Infinite scroll sentinel (replaces pagination) -->
+ {% if paginate.next %}
+ <div id="dw-scroll-sentinel" style="padding:20px;text-align:center;color:#999;font-size:12px;margin-top:40px;" data-next-page="{{ paginate.next.page }}">
+ <span id="dw-loading-status">Loading more products…</span>
+ </div>
+ {% endif %}
{% endpaginate %}
</div>
+<script>
+(function() {
+ var grid = document.querySelector('[data-collection-grid]');
+ var sentinel = document.getElementById('dw-scroll-sentinel');
+ if (!grid || !sentinel) return;
+
+ var currentPage = {{ paginate.current_page }};
+ var hasMore = !!sentinel;
+ var isLoading = false;
+
+ var observer = new IntersectionObserver(function(entries) {
+ entries.forEach(function(e) {
+ if (e.isIntersecting && hasMore && !isLoading) {
+ loadNextPage();
+ }
+ });
+ }, { rootMargin: '600px' });
+
+ observer.observe(sentinel);
+
+ function loadNextPage() {
+ if (isLoading || !hasMore) return;
+ isLoading = true;
+
+ var nextPage = currentPage + 1;
+ var url = new URL(window.location.href);
+ url.searchParams.set('page', nextPage);
+
+ fetch(url.toString())
+ .then(function(r) { return r.text(); })
+ .then(function(html) {
+ var p = new DOMParser();
+ var doc = p.parseFromString(html, 'text/html');
+ var nextGrid = doc.querySelector('[data-collection-grid]');
+
+ if (!nextGrid) {
+ hasMore = false;
+ document.getElementById('dw-loading-status').textContent = 'No more products';
+ return;
+ }
+
+ var items = [];
+ nextGrid.querySelectorAll('[class*="product-list-item"]').forEach(function(item) {
+ items.push(item);
+ });
+
+ if (items.length === 0) {
+ hasMore = false;
+ document.getElementById('dw-loading-status').textContent = 'All products loaded';
+ return;
+ }
+
+ items.forEach(function(item) {
+ grid.appendChild(item.cloneNode(true));
+ });
+
+ currentPage = nextPage;
+
+ var nextSentinel = doc.getElementById('dw-scroll-sentinel');
+ if (!nextSentinel) {
+ hasMore = false;
+ document.getElementById('dw-loading-status').textContent = 'All products loaded';
+ }
+
+ isLoading = false;
+ })
+ .catch(function(e) {
+ console.error('Load error:', e);
+ document.getElementById('dw-loading-status').textContent = 'Error loading more';
+ isLoading = false;
+ });
+ }
+})();
+</script>
+
<script src="{{ 'collection-grid-density.js' | asset_url }}" defer></script>
{% schema %}
@@ -265,4 +333,4 @@
]
}
-{% endschema %}
+{% endschema %}
\ No newline at end of file
diff --git a/shopify/_cwGRID/snippets/product-form-content.liquid b/shopify/_cwGRID/snippets/product-form-content.liquid
index 48b2c24e..bfadee2c 100644
--- a/shopify/_cwGRID/snippets/product-form-content.liquid
+++ b/shopify/_cwGRID/snippets/product-form-content.liquid
@@ -10,793 +10,668 @@
{% assign product_id = product.id %}
{% assign selected_variant = product.selected_or_first_available_variant %}
-{%- liquid
- assign _selected_variant_sku = selected_variant.sku | default: '' | downcase
- assign _selected_variant_title = selected_variant.title | default: '' | downcase
-
- assign _selected_variant_sku_suffix = _selected_variant_sku | slice: -7, 7
-
- assign is_sample_sku = false
- if _selected_variant_sku != blank and _selected_variant_sku_suffix == '-sample'
- assign is_sample_sku = true
- endif
-
- assign is_sample_title = false
- if _selected_variant_title contains 'sample'
- assign is_sample_title = true
- endif
-
- assign is_sample_like = false
- if is_sample_sku
- assign is_sample_like = true
- elsif is_sample_title and selected_variant.price == 0
- assign is_sample_like = true
- endif
--%}
-
-<!-- -----------020------------ -->
-{% assign prods_quantity_order_min = 1 %}
-
-{% if product.metafields['global']['v_prods_quantity_order_min'] %}
- {% if product.metafields['global']['v_prods_quantity_order_min'] != '' %}
- {% assign prods_quantity_order_min = product.metafields['global']['v_prods_quantity_order_min'] %}
- {% endif %}
-{% endif %}
-
-{% assign prods_quantity_order_units = 1 %}
-
-{% if product.metafields['global']['v_prods_quantity_order_units'] %}
- {% if product.metafields['global']['v_prods_quantity_order_units'] != '' %}
- {% assign prods_quantity_order_units = product.metafields['global']['v_prods_quantity_order_units'] %}
- {% endif %}
-{% endif %}
-
-<!-- Minimum order quantity from custom metafields (e.g. Ralph Lauren fabrics) -->
-{% assign min_order_qty = product.metafields.custom.minimum_order_quantity | default: nil %}
-{% assign min_order_unit = product.metafields.custom.minimum_order_unit | default: '' %}
-{% assign has_min_order = false %}
-{% if min_order_qty != nil and min_order_qty != blank and min_order_qty > 1 %}
- {% assign has_min_order = true %}
- {% assign min_order_qty_num = min_order_qty | plus: 0 %}
- {% if min_order_qty_num > prods_quantity_order_min %}
- {% assign prods_quantity_order_min = min_order_qty_num %}
- {% endif %}
-{% endif %}
-
-<!-- -------------------------- -->
-<script>
- setTimeout(function () {
- const qtySelector = document.querySelector('.mm_quantity .input-text.qty');
- if (qtySelector) {
- qtySelector.value = {{ prods_quantity_order_min }};
- }
- }, 1000);
-</script>
-
-{% if has_min_order %}
-<!-- Minimum order notice and validation -->
-<style>
- .min-order-notice {
- background: #fff3cd;
- border: 1px solid #ffc107;
- border-radius: 4px;
- padding: 8px 12px;
- margin: 10px 0;
- font-size: 14px;
- font-weight: 600;
- color: #856404;
- display: flex;
- align-items: center;
- gap: 6px;
- }
- .min-order-notice svg {
- flex-shrink: 0;
- }
- .min-order-error {
- background: #f8d7da;
- border: 1px solid #f5c6cb;
- color: #721c24;
- border-radius: 4px;
- padding: 8px 12px;
- margin: 8px 0 0;
- font-size: 13px;
- display: none;
- }
-</style>
-<div class="min-order-notice" data-min-order-notice>
- <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 2.5a.75.75 0 01.75.75v4a.75.75 0 01-1.5 0v-4A.75.75 0 018 3.5zm0 8a.75.75 0 100-1.5.75.75 0 000 1.5z"/></svg>
- Minimum order: {{ min_order_qty }} {{ min_order_unit }}
-</div>
-<script>
- (function() {
- var MIN_QTY = {{ min_order_qty }};
- var MIN_UNIT = {{ min_order_unit | json }};
-
- document.addEventListener('DOMContentLoaded', function() {
- // Find the product form (could be either .shopify-product-form or form with data-product-form)
- var forms = document.querySelectorAll('form[action*="/cart/add"], form[data-product-form]');
- forms.forEach(function(form) {
- form.addEventListener('submit', function(e) {
- var qtyInput = form.querySelector('.mm_quantity .input-text.qty') || form.querySelector('input[name="quantity"]');
- if (!qtyInput) return;
-
- var qty = parseInt(qtyInput.value, 10);
- if (isNaN(qty) || qty < MIN_QTY) {
- e.preventDefault();
- e.stopImmediatePropagation();
-
- // Show error message
- var errorDiv = form.querySelector('.min-order-error');
- if (!errorDiv) {
- errorDiv = document.createElement('div');
- errorDiv.className = 'min-order-error';
- var addToCartBtn = form.querySelector('.product-add-to-cart');
- if (addToCartBtn) {
- addToCartBtn.appendChild(errorDiv);
- }
- }
- errorDiv.textContent = 'Please enter a quantity of at least ' + MIN_QTY + ' ' + MIN_UNIT + '.';
- errorDiv.style.display = 'block';
-
- // Also fix the value
- qtyInput.value = MIN_QTY;
- var hqty = form.querySelector('.hquantity');
- if (hqty) hqty.value = MIN_QTY;
-
- // Hide error after 5s
- setTimeout(function() { errorDiv.style.display = 'none'; }, 5000);
- return false;
- }
- });
- });
-
- // Also enforce min on the minus button - prevent going below minimum
- jQuery(document).on('click', '.minus', function() {
- var $qty = jQuery(this).closest('.mm_quantity').find('.qty');
- var currentVal = parseInt($qty.val(), 10);
- if (currentVal < MIN_QTY) {
- $qty.val(MIN_QTY);
- jQuery(this).closest('.mm_quantity').find('.hquantity').attr('value', MIN_QTY);
- }
- });
-
- // Enforce min on blur (manual typing)
- jQuery(document).on('blur', '.mm_quantity .input-text.qty', function() {
- var currentVal = parseInt(jQuery(this).val(), 10);
- if (isNaN(currentVal) || currentVal < MIN_QTY) {
- jQuery(this).val(MIN_QTY);
- jQuery(this).closest('.mm_quantity').find('.hquantity').attr('value', MIN_QTY);
- }
- });
-
- // Hide notice when sample variant is selected
- jQuery(document).on('change', '.product-select, .single-option-selector', function() {
- var $form = jQuery(this).closest('form, [data-product-form]');
- var $selected = $form.find('.product-select option:selected, .product-select[type="hidden"]');
- var selectedText = ($selected.text() || $selected.attr('data-variant-title') || '').toLowerCase();
- var selectedSku = ($selected.attr('data-sku') || '').toLowerCase();
- var isSample = /sample/i.test(selectedText) || /-sample$/i.test(selectedSku);
-
- var $notice = jQuery('.min-order-notice[data-min-order-notice]');
- if (isSample) {
- $notice.hide();
- } else {
- $notice.show();
- }
- });
- });
- })();
-</script>
-{% endif %}
-
-{% for block in section.blocks %}
- {% case block.type %}
- {% when 'vendor' %}
- {%- capture dw_vendor_url -%}{%- render 'dw-vendor-collection-url', vendor: product.vendor -%}{%- endcapture -%}
- <a class="product-vendor" href="{{ dw_vendor_url | strip }}" {{ block.shopify_attributes }}>{{ product.vendor }}</a>
-
- {% when 'title' %}
- <h1 class="product-title" {{ block.shopify_attributes }}>
- {% if product != blank %}
- {% if link_to %}
- <a href="{{ product.url }}">
+<div class="product-form-content-wrapper">
+ {% for block in section.blocks %}
+ {% case block.type %}
+ {% when 'vendor' %}
+ <a class="product-vendor" href="{{ product.vendor | url_for_vendor }}" {{ block.shopify_attributes }}>{{ product.vendor }}</a>
+
+ {% when 'title' %}
+ <h1 class="product-title" {{ block.shopify_attributes }}>
+ {% if product != blank %}
+ {% if link_to %}
+ <a href="{{ product.url }}">
+ {{ product.title }}
+ </a>
+ {% else %}
{{ product.title }}
- </a>
+ {% endif %}
{% else %}
- {% comment %}{{ product.title }} {% endcomment %}
- <a href="https://designer-laboratory-sandbox.myshopify.com/search?q={{ product.title }}">
- {{ product.title }}
- </a>
- {% endif %}
- {% else %}
- {{ 'products.product.onboarding.title' | t }}
- {% endif %}
- </h1>
- <span class="product-sku-label">SKU: </span>
- {%- liquid
- assign sku_raw = product.selected_or_first_available_variant.sku | default: ''
- assign sku_display = sku_raw | replace: '-Sample', '' | replace: '-SAMPLE', '' | replace: '-sample', ''
- assign sku_display = sku_display | replace: '--', '-' | replace: '--', '-'
- assign sku_last_char = sku_display | slice: -1, 1
- if sku_display != blank and sku_last_char == '-'
- assign sku_display = sku_display | remove_last: '-'
- endif
- -%}
- <span class="product-sku-value">{{ sku_display }}</span>
- {% when '@app' %}
- <div class="product-app" {{ block.shopify_attributes }}>
- {% render block %}
- </div>
-
- {% when 'custom-liquid' %}
- {% if block.settings.custom_liquid != blank %}
- <div class="product__custom-liquid" {{ block.shopify_attributes }}>
- {{ block.settings.custom_liquid }}
- </div>
- {% endif %}
-
- {% when 'collapsible-tab' %}
- {% if block.settings.collapsible_tab_heading != blank %}
- <details class="collapsible-tab" {{ block.shopify_attributes }}>
- <summary class="collapsible-tab__heading">
- <span>{{ block.settings.collapsible_tab_heading | escape }}</span>
- {%
- render 'icons',
- id: 'chevron-right',
- %}
- </summary>
-
- {% if block.settings.collapsible_tab_text != blank %}
- <div class="collapsible-tab__text rte">
- {{ block.settings.collapsible_tab_text }}
- </div>
+ {{ 'products.product.onboarding.title' | t }}
{% endif %}
- </details>
- {% endif %}
-
- {% when 'tabs' %}
- {% assign tab_counter = 1 %}
- <div class="product-tabs" {{ block.shopify_attributes }}>
- {% if block.settings.show_product_description %}
- <input
- class="product-tabs__radio"
- id="product-tabs__radio-{{ section.id }}"
- name="{{ section.id }}"
- tabindex="0"
- type="radio"
- checked="checked"
- >
+ </h1>
- <label class="product-tabs__label" for="product-tabs__radio-{{ section.id }}">
- {{ 'onboarding.tab_title'| t }}
- </label>
+ {% when '@app' %}
+ <div class="product-app" {{ block.shopify_attributes }}>
+ {% render block %}
+ </div>
- <div class="product-tabs__panel rte" tabindex="0">
- {% if onboarding %}
- {{ 'onboarding.tab_content'| t }}
- {% else %}
- {% if product.description != blank %}
- {{ product.description }}
- {% else %}
- {{ 'onboarding.tab_content'| t }}
- {% endif %}
- {% endif %}
+ {% when 'custom-liquid' %}
+ {% if block.settings.custom_liquid != blank %}
+ <div class="product__custom-liquid" {{ block.shopify_attributes }}>
+ {{ block.settings.custom_liquid }}
</div>
{% endif %}
- {% for i in (1..3) %}
- {% assign tab_text_key = 'tab_text_' | append: i %}
- {% assign tab_heading_key = 'tab_heading_' | append: i %}
- {% assign tab_heading_value = block.settings[tab_heading_key] %}
- {% assign tab_text_value = block.settings[tab_text_key] %}
+ {% when 'collapsible-tab' %}
+ {% if block.settings.collapsible_tab_heading != blank %}
+ <details class="collapsible-tab" {{ block.shopify_attributes }}>
+ <summary class="collapsible-tab__heading">
+ <span>{{ block.settings.collapsible_tab_heading | escape }}</span>
+ {%
+ render 'icons',
+ id: 'chevron-right',
+ %}
+ </summary>
+
+ {% if block.settings.collapsible_tab_text != blank %}
+ <div class="collapsible-tab__text rte">
+ {{ block.settings.collapsible_tab_text }}
+ </div>
+ {% endif %}
+ </details>
+ {% endif %}
- {% if tab_heading_value != blank %}
+ {% when 'tabs' %}
+ {% assign tab_counter = 1 %}
+ <div class="product-tabs" {{ block.shopify_attributes }}>
+ {% if block.settings.show_product_description %}
<input
- class="product-tabs__radio"
- id="product-tabs__radio-{{ i }}-{{ section.id }}"
+ class="product-tabs__radio input"
+ id="product-tabs__radio-{{ section.id }}"
name="{{ section.id }}"
tabindex="0"
type="radio"
- {% if tab_counter == 1 and block.settings.show_product_description == false %}
- checked
- {% endif %}
+ checked="checked"
>
- <label class="product-tabs__label" for="product-tabs__radio-{{ i }}-{{ section.id }}">
- {{ tab_heading_value | escape }}
+ <label class="product-tabs__label label" for="product-tabs__radio-{{ section.id }}">
+ {{ 'onboarding.tab_title'| t }}
</label>
<div class="product-tabs__panel rte" tabindex="0">
- {{ tab_text_value }}
+ {% if onboarding %}
+ {{ 'onboarding.tab_content'| t }}
+ {% else %}
+ {% if product.description != blank %}
+ {{ product.description }}
+ {% else %}
+ {{ 'onboarding.tab_content'| t }}
+ {% endif %}
+ {% endif %}
</div>
-
- {% assign tab_counter = tab_counter | plus: 1 %}
{% endif %}
- {% endfor %}
- </div>
-
- {% when 'price' %}
- <div class="product__price" {{ block.shopify_attributes }}>
- {%- comment -%}
- DW trade/designer pricing tiers (2026-06-11): any customer carrying one of these
- professional tags sees the trade price display (15% off, ×0.85). This restores the
- pre-app behavior where every designer/trade tier got the discount — not just 'trade'.
- Matches *any* tag containing 'designer' (interior_designer, commercial_designer, …)
- plus the explicit tiers below. Add new tiers to the explicit list as needed.
- {%- endcomment -%}
- {%- assign dw_is_trade = false -%}
- {%- for dw_t in customer.tags -%}
- {%- assign dw_tl = dw_t | downcase | strip -%}
- {%- if dw_tl contains 'designer' or dw_tl == 'trade' or dw_tl == 'architect' or dw_tl == 'stager' or dw_tl == 'hospitality' or dw_tl == 'retailer' -%}
- {%- assign dw_is_trade = true -%}
- {%- break -%}
- {%- endif -%}
- {%- endfor -%}
- <input type="hidden" id="customer_tag" value="{% if dw_is_trade %}trade{% endif %}">
- <p class="product-price">
- {% comment %} SA Wholesale (saw_/wbuyx/"WHO") app removed 2026-06-11 — it left the price span blank. Render native variant price unconditionally. {% endcomment %}
- <!-- native price markup -->
- <meta itemprop="price" content="{{ selected_variant.price | money_without_currency }}">
- <span class="product-price-minimum money {% if dw_is_trade %}original{% endif %}">
+
+ {% for i in (1..3) %}
+ {% assign tab_text_key = 'tab_text_' | append: i %}
+ {% assign tab_heading_key = 'tab_heading_' | append: i %}
+ {% assign tab_heading_value = block.settings[tab_heading_key] %}
+ {% assign tab_text_value = block.settings[tab_text_key] %}
+
+ {% if tab_heading_value != blank %}
+ <input
+ class="product-tabs__radio input"
+ id="product-tabs__radio-{{ i }}-{{ section.id }}"
+ name="{{ section.id }}"
+ tabindex="0"
+ type="radio"
+ {% if tab_counter == 1 and block.settings.show_product_description == false %}
+ checked
+ {% endif %}
+ >
+
+ <label class="product-tabs__label label" for="product-tabs__radio-{{ i }}-{{ section.id }}">
+ {{ tab_heading_value | escape }}
+ </label>
+
+ <div class="product-tabs__panel rte" tabindex="0">
+ {{ tab_text_value }}
+ </div>
+
+ {% assign tab_counter = tab_counter | plus: 1 %}
+ {% endif %}
+ {% endfor %}
+ </div>
+
+ {% when 'price' %}
+ <div class="product__price" {{ block.shopify_attributes }}>
+ <p class="product-price">
+ <span class="product-price-minimum money">
{% if product != blank %}
{{ selected_variant.price | money }}
{% else %}
{{ 'products.product.onboarding.price' | t }}
{% endif %}
</span>
- {% if dw_is_trade %}
- <span
- class="product-price-discount"
- >
- {% assign target_product = selected_variant %}
- {% assign com_selected_variant_title = selected_variant.title | capitalize %}
- {% assign com_selected_variant_sku = selected_variant.sku | default: '' | downcase %}
- {% if com_selected_variant_title == "Sample" or com_selected_variant_sku contains "sample" %}
- {% comment %} {% render 'money', value: 0 %} {% endcomment %}
- Complimentary Sample
- {% else %}
- {% assign com_variant_first_title = product.variants[0].title | capitalize %}
- {% if com_variant_first_title == "Sample" and product.variants[1] != blank %}
- {% assign target_product = product.variants[1] %}
- {% endif %}
- {% assign discounted_price = target_product.price | times:0.85 | round: 2 %}
- {% render 'money', value: discounted_price %}
- {% endif %}
-
- </span>
- {% endif %}
- {% comment %}
<span
class="product-price-compare money original {% if selected_variant.compare_at_price > selected_variant.price %}visible{% endif %}"
>
{{ selected_variant.compare_at_price | money }}
</span>
- {% endcomment %}
- </p>
-
- {% assign variant_for_unit_price = selected_variant %}
- {% comment %}Inject unit-price begin{% endcomment %}
- {% comment %}
- @param variant_for_unit_price
- Product variant for price
- @param tax_text
- String containing 'tax included' text
- {% endcomment %}
-
- {% capture total_quantity %}
- <span class="product-price__unit-price-total-quantity" data-unit-price-quantity>
- {{ variant_for_unit_price.unit_price_measurement.quantity_value }}{{ variant_for_unit_price.unit_price_measurement.quantity_unit }}
- </span>
- {% endcapture %}
-
-
- {% capture unit_price %}
- <span class="product-price__unit-price-amount money" data-unit-price-amount>
- {{ variant_for_unit_price.unit_price | money }}
- </span>
- {% endcapture %}
- {% capture unit_measure %}
- <span class="product-price__unit-price-measure" data-unit-price-measure>
- {%- if variant_for_unit_price.unit_price_measurement.reference_value != 1 -%}
- {{ variant_for_unit_price.unit_price_measurement.reference_value }}
- {%- endif %}
- {{ variant_for_unit_price.unit_price_measurement.reference_unit }}
- </span>
- {% endcapture %}
-
- <div
- class="
- product-price__unit-price
- {% unless variant_for_unit_price.unit_price_measurement %}hidden{% endunless %}
- "
- data-unit-price
- >
- {{ 'products.product.price_per_unit_html' | t: total_quantity: total_quantity, unit_price: unit_price, unit_measure: unit_measure | strip_newlines }}
- </div>
-
- {% assign variant_for_unit_price = blank %}
- {% comment %}Inject unit-price end{% endcomment %}
-
-
- {%- capture tax_text -%}
- {{ 'products.product.tax_line_html' | t }}
- {%- endcapture -%}
+ </p>
- {%- if tax_text != blank -%}
- <div class="
- product-price__tax
- {% unless selected_variant.taxable %}hidden{% endunless %}
+ {% assign variant_for_unit_price = selected_variant %}
+ {% comment %}Inject unit-price begin{% endcomment %}
+ {% comment %}
+ @param variant_for_unit_price
+ Product variant for price
+ @param tax_text
+ String containing 'tax included' text
+ {% endcomment %}
+
+ {% capture total_quantity %}
+ <span class="product-price__unit-price-total-quantity" data-unit-price-quantity>
+ {{ variant_for_unit_price.unit_price_measurement.quantity_value }}{{ variant_for_unit_price.unit_price_measurement.quantity_unit }}
+ </span>
+ {% endcapture %}
+
+
+ {% capture unit_price %}
+ <span class="product-price__unit-price-amount money" data-unit-price-amount>
+ {{ variant_for_unit_price.unit_price | money }}
+ </span>
+ {% endcapture %}
+ {% capture unit_measure %}
+ <span class="product-price__unit-price-measure" data-unit-price-measure>
+ {%- if variant_for_unit_price.unit_price_measurement.reference_value != 1 -%}
+ {{ variant_for_unit_price.unit_price_measurement.reference_value }}
+ {%- endif %}
+ {{ variant_for_unit_price.unit_price_measurement.reference_unit }}
+ </span>
+ {% endcapture %}
+
+ <div
+ class="
+ product-price__unit-price
+ {% unless variant_for_unit_price.unit_price_measurement %}hidden{% endunless %}
"
- data-tax-line
+ data-unit-price
>
- {{ tax_text }}
+ {{ 'products.product.price_per_unit_html' | t: total_quantity: total_quantity, unit_price: unit_price, unit_measure: unit_measure | strip_newlines }}
</div>
- {%- endif -%}
-
- {{ form | payment_terms }}
- </div>
+
+ {% assign variant_for_unit_price = blank %}
+ {% comment %}Inject unit-price end{% endcomment %}
- {% when 'form' %}
- <div class="product__form" {{ block.shopify_attributes }}>
+ {%- capture tax_text -%}
+ {{ 'products.product.tax_line_html' | t }}
+ {%- endcapture -%}
- {% unless product.has_only_default_variant %}
- <div class="product-options">
- {%-
- render 'product-options-dropdown',
- product: product,
- form_id: product_id
- -%}
-
- <label
- class="
- product-option-column-1
- product-option-row-4
- product-option-quantity-label
- {% if is_sample_like %}hidden{% endif %}
+ {%- if tax_text != blank -%}
+ <div class="
+ product-price__tax
+ {% unless selected_variant.taxable %}hidden{% endunless %}
"
- for="default-variant-quantity-input"
+ data-tax-line
>
- <strong>{{ 'general.general.quantity' | t }}:</strong>
- </label>
- {% comment %}
- <input
- class="product-option-quantity"
- id="default-variant-quantity-input"
- data-product-quantity-input
- type="number"
- inputmode="numeric"
- name="quantity"
- value="1"
- >
- {% endcomment %}
- <!-- 020 -->
- <div class="mm_quantity mm_buttons_added product-option-row-4 {% if is_sample_like %}hidden{% endif %}">
- <input type="hidden" class="hquantity" name="hquantity" value="{{ prods_quantity_order_min }}">
- <input type="button" value="-" class="minus">
- <input
- type="text"
- step="{{ prods_quantity_order_units }}"
- min="{{ prods_quantity_order_min }}"
- max=""
- name="quantity"
- value="{{ prods_quantity_order_min }}"
- title="Qty"
- class="input-text qty text"
- size="4"
- pattern=""
- inputmode=""
- onkeypress="mm_validate(event)"
- >
- <input type="button" value="+" class="plus">
+ {{ tax_text }}
</div>
- <!-- -->
+ {%- endif -%}
- <div class="selector-wrapper no-js-required">
- <label for="product-select-{{ product_id }}"></label>
- <select
- class="product-select"
- name="id"
- id="product-select-{{ product_id }}"
- data-select-ignore
+ {{ form | payment_terms }}
+ </div>
+
+ {% when 'form' %}
+ <div class="product__form" {{ block.shopify_attributes }}>
+
+ {% unless product.has_only_default_variant %}
+ <div class="product-options">
+ {%-
+ render 'product-options-dropdown',
+ product: product,
+ form_id: product_id
+ -%}
+
+ <label
+ class="
+ product-option-column-1
+ product-option-row-4
+ product-option-quantity-label
+ label
+ "
+ for="default-variant-quantity-input"
>
- {% for variant in product.variants %}
- {% if variant.available %}
- {% assign com_variant_title = variant.title | capitalize %}
- {% if com_variant_title == "Sample" %}
- {% assign dl_sample_variant = variant.id %}
- {% assign dl_sample_variant_title = product.title | append: ' - ' | append: variant.title %}
- {% assign dl_sample = 'small_sample' %}
- {% endif %}
+ <strong>{{ 'general.general.quantity' | t }}:</strong>
+ </label>
- {% if com_variant_title == "Large Sample" %}
- {% assign dl_sample_variant2 = variant.id %}
- {% assign dl_sample_variant_title2 = product.title | append: ' - ' | append: variant.title %}
- {% assign dl_sample2 = 'large_sample' %}
- {% endif %}
+ <input
+ class="product-option-quantity input"
+ id="default-variant-quantity-input"
+ data-product-quantity-input
+ type="number"
+ inputmode="numeric"
+ name="quantity"
+ value="1"
+ >
- <option
- {% if variant == selected_variant %}selected="selected"{% endif %}
- value="{{ variant.id }}"
- data-variant-id="{{ variant.id }}"
- data-sku="{{ variant.sku }}"
- data-vprice="{{ variant.price }}"
- >
- {{ variant.title }} - {{ variant.price | money }}
- </option>
- {% else %}
- <option
- disabled="disabled"
- data-variant-id="{{ variant.id }}"
- value="{{ variant.id }}"
- data-sku="{{ variant.sku }}">
- {{ variant.title }} - {{ 'products.product.sold_out' | t }}
- </option>
- {% endif %}
- {% endfor %}
- </select>
+ <div class="selector-wrapper no-js-required">
+ <label class="label" for="product-select-{{ product_id }}"></label>
+ <select
+ class="product-select select"
+ name="id"
+ id="product-select-{{ product_id }}"
+ data-select-ignore
+ >
+ {% for variant in product.variants %}
+ {% if variant.available %}
+ <option
+ {% if variant == selected_variant %}selected="selected"{% endif %}
+ value="{{ variant.id }}" data-variant-id="{{ variant.id }}" data-sku="{{ variant.sku }}">
+ {{ variant.title }} - {{ variant.price | money }}
+ </option>
+ {% else %}
+ <option disabled="disabled" data-variant-id="{{ variant.id }}" value="{{ variant.id }}">
+ {{ variant.title }} - {{ 'products.product.sold_out' | t }}
+ </option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ </div>
</div>
- </div>
- {% else %}
- <div class="product-options product-options-default-only">
- <input
- class="product-select"
- name="id"
- value="{{ product.variants[0].id }}"
- type="hidden"
- data-variant-title="{{ product.variants[0].title }}"
- data-sku="{{ product.variants[0].sku }}"
- data-vprice="{{ product.variants[0].price }}"
- />
-
- <label
- class="
- product-option-column-1
- product-option-row-1
- product-option-quantity-label
- {% if is_sample_like %}hidden{% endif %}
- "
- for="quantity-input"
- >
- <strong>{{ 'general.general.quantity' | t }}:</strong>
- </label>
+ {% else %}
+ <div class="product-options product-options-default-only">
+ <input
+ class="product-select input"
+ name="id"
+ value="{{ product.variants[0].id }}"
+ type="hidden"
+ data-variant-title="{{ product.variants[0].title }}"
+ />
+
+ <label
+ class="
+ product-option-column-1
+ product-option-row-1
+ product-option-quantity-label
+ label
+ "
+ for="quantity-input"
+ >
+ <strong>{{ 'general.general.quantity' | t }}:</strong>
+ </label>
-<!-- <input
- class="product-option-quantity"
- id="quantity-input"
- data-product-quantity-input
- type="number"
- inputmode="numeric"
- name="quantity"
- value="1"
- > -->
- <!-- 020 -->
- <div class="mm_quantity mm_buttons_added product-option-row-1 {% if is_sample_like %}hidden{% endif %}">
- <input type="hidden" class="hquantity" name="hquantity" value="{{ prods_quantity_order_min }}">
- <input type="button" value="-" class="minus">
<input
- type="text"
- step="{{ prods_quantity_order_units }}"
- min="{{ prods_quantity_order_min }}"
- max=""
+ class="product-option-quantity input"
+ id="quantity-input"
+ data-product-quantity-input
+ type="number"
+ inputmode="numeric"
name="quantity"
- value="{{ prods_quantity_order_min }}"
- title="Qty"
- class="input-text qty text"
- size="4"
- pattern=""
- inputmode=""
- onkeypress="mm_validate(event)"
+ value="1"
>
- <input type="button" value="+" class="plus">
</div>
- <!-- -->
- </div>
- {% endunless %}
-
- {% for tag in product.tags %}
- {% if tag contains 'custom mural' %}
- <!-- Custom Price Calculator -->
- <div id="custom-calculator" style="display:none" data-calculatorid="62388fabd48c8"></div>
- <script>
- document.querySelector(".product-options .last_variant").innerHTML = "Custom Sizes";
-
- var appendCalc = setInterval(moveCalc, 300);
-
- function moveCalc() {
- var calc = document.getElementById("calculator");
- if (calc) {
- document
- .querySelector(".product-options")
- .insertBefore(
- document.getElementById("calculator"),
- document.querySelector(".product-options").children[2]
- );
- clearInterval(appendCalc);
- }
- }
- </script>
- <style>
- .product-options {
- display: flex;
- flex-direction: column;
- align-items: baseline;
- margin-left: 0;
- }
- .product-options .product-option-quantity-label,
- .mm_quantity.mm_buttons_added {
- display: none !important;
- }
- </style>
- {% endif %}
- {% endfor %}
-
- {% if product.available %}
- <div id="infiniteoptions-container"></div>
- <div id="uploadery-container"></div>
- {% endif %}
-
- <!-- Print PDF button -->
- {% render 'button-product-pdf-print' %}
+ {% endunless %}
- <div
- class="
- product-add-to-cart
- {% if product != blank and show_payment_button %}
- product-smart-payments
- {% endif %}
- "
- >
- {% if selected_variant.available and template.name != 'password' %}
- <!-- 020 -->
- <div class="custom-contact-message"></div>
-
- <a
- href="#"
- class="dl-contact-btn custom-popup-contact-form"
- {% if variant.price == 0 %}
- style="display:inline-block;"
- {% else %}
- style="display:none;"
- {% endif %}
- >
- Contact Us
- </a>
+ {% if product.available %}
+ <div id="infiniteoptions-container"></div>
+ <div id="uploadery-container"></div>
+ {% endif %}
- {% assign title = 'Request Sample' %}
- {% assign showonly = blank %}
- {% if product.tags contains "Showroom only" and product.price == 0 %}
- {% assign showonly = 'showonly' %}
- {% endif %}
- {% if product.tags contains "Showroom Only" and product.price == 0 %}
- {% assign showonly = 'showonly' %}
- {% endif %}
+ {% liquid
+ assign show_recipient_form = block.settings.show_gift_card_recipient_form
+ assign recipient_form_textarea_rows = 0
+ %}
- {% if is_sample_sku and dl_sample == blank and dl_sample2 == blank %}
- <a
- href=""
- data-dlvid="{{ selected_variant.id }}"
- data-dlvtitle="{{ product.title | append: ' - Sample' }}"
- class="dl-sample-btn {{ showonly }}"
- data-product-id="{{ product.id }}"
- >
- {{ title }}
- </a>
- {% endif %}
+ {% comment %}Inject @pixelunion/pxs-gift-card-recipient-form/recipient-form begin{% endcomment %}
+ {% comment %}
+ @param form {Object}
+ The form object
+
+ @param section {Object}
+ The section object
+
+ @param show_recipient_form {Boolean}
+ If true, show the gift card recipient form
+
+ @param show_recipient_form_placeholders {Boolean}
+ If true, show recipient form placeholder attributes
+
+ @param show_recipient_form_labels {Boolean}
+ If true, show recipient form input labels
+
+ @param show_recipient_form_max_characters_message {Boolean}
+ If true, show the recipient form max characters message
+
+ @param recipient_form_textarea_rows {Number}
+ A numerical value to specify the number of textarea rows
+
+ @param recipient_form_textarea_classes {String}
+ A space separated list of class names added to recipient form textarea
+
+ @param recipient_form_input_classes {String}
+ A space separated list of class names added to recipient form inputs
+
+ @param recipient_form_label_classes {String}
+ A space separated list of class names added to recipient form labels
+
+ @param recipient_form_label_position {String}
+ The recipient form input label position, either 'top', or 'bottom'
+ {% endcomment %}
+
+ {% liquid
+ assign show_recipient_form_placeholders = show_recipient_form_placeholders | default: false
+ assign show_recipient_form_labels = show_recipient_form_labels | default: true, allow_false: true
+ assign show_recipient_form_max_characters_message = show_recipient_form_max_characters_message | default: true, allow_false: true
+ assign recipient_form_textarea_rows = recipient_form_textarea_rows | default: 5
+ assign recipient_form_label_position = recipient_form_label_position | default: 'top'
+ %}
+
+ {%- if show_recipient_form and product.gift_card? -%}
+ <details class="recipient-disclosure" data-recipient-disclosure>
+ <summary class="recipient-disclosure__summary">
+ <label
+ class="recipient-disclosure__checkbox-label"
+ for="recipient-disclosure__checkbox-{{ section.id }}"
+ >
+ <input
+ class="recipient-disclosure__checkbox"
+ id="recipient-disclosure__checkbox-{{ section.id }}"
+ type="checkbox"
+ name="properties[__shopify_send_gift_card_to_recipient]"
+ tabindex="-1"
+ data-recipient-disclosure-checkbox
+ >
+
+ {%- render 'recipient-form-disclosure-icon' -%}
+
+ <span class="recipient-disclosure__checkbox-label-text">
+ {{- 'recipient.form.checkbox_label' | t -}}
+ </span>
+ </label>
+ </summary>
+
+ {% comment %} Recipient email {% endcomment %}
+ <div class="recipient-form" data-recipient-form>
+ <div class="recipient-form__field">
+ {%- if show_recipient_form_labels -%}
+ {%- capture recipient_email_label -%}
+ <label
+ class="
+ recipient-form__label
+ {{ recipient_form_label_classes }}
+ "
+ for="recipient-email-{{ section.id }}"
+ >
+ {{- 'recipient.form.email_label' | t -}}
+ <span class="recipient-form__required"> *</span>
+ </label>
+ {%- endcapture -%}
+ {%- endif -%}
+
+ {%- capture recipient_email -%}
+ <input
+ class="
+ recipient-form__input
+ recipient-form__input--email
+ {{ recipient_form_input_classes }}
+ "
+ id="recipient-email-{{ section.id }}"
+ type="email"
+ {%- if show_recipient_form_placeholders -%}
+ placeholder="{{- 'recipient.form.email_placeholder' | t -}}"
+ {%- endif -%}
+ {%- unless show_recipient_form_labels -%}
+ aria-label="{{- 'recipient.form.email_placeholder' | t -}}"
+ {%- endunless -%}
+ name="properties[Recipient email]"
+ value="{{ form.email }}"
+ data-recipient-form-input
+ data-recipient-form-email-input
+ >
+ {%- endcapture -%}
+
+ {%- capture recipient_error_message -%}
+ <span class="recipient-form__error-message" data-recipient-form-error-message>
+ {{- 'recipient.form.error_message' | t -}}
+ </span>
+ {%- endcapture -%}
+
+ {%- if recipient_form_label_position == 'top' -%}
+ <div class="recipient-form__input-wrapper">
+ {{- recipient_email_label -}}
+ {{- recipient_email -}}
+ </div>
+ {{- recipient_error_message -}}
+ {%- else -%}
+ <div class="recipient-form__input-wrapper">
+ {{- recipient_email -}}
+ {{- recipient_email_label -}}
+ </div>
+ {{- recipient_error_message -}}
+ {%- endif -%}
+ </div>
+
+ {% comment %} Recipient name {% endcomment %}
+ <div class="recipient-form__field">
+ <div class="recipient-form__input-wrapper">
+ {%- if show_recipient_form_labels -%}
+ {%- capture recipient_name_label -%}
+ <label
+ class="
+ recipient-form__label
+ {{ recipient_form_label_classes }}
+ "
+ for="recipient-name-{{ section.id }}"
+ >
+ {{- 'recipient.form.name_label' | t -}}
+ </label>
+ {%- endcapture -%}
+ {%- endif -%}
+
+ {%- capture recipient_name -%}
+ <input
+ class="
+ recipient-form__input
+ recipient-form__input--name
+ {{ recipient_form_input_classes }}
+ "
+ id="recipient-name-{{ section.id }}"
+ type="text"
+ {%- if show_recipient_form_placeholders -%}
+ placeholder="{{- 'recipient.form.name_placeholder' | t -}}"
+ {%- endif -%}
+ {%- unless show_recipient_form_labels -%}
+ aria-label="{{- 'recipient.form.name_placeholder' | t -}}"
+ {%- endunless -%}
+ name="properties[Recipient name]"
+ value="{{ form.name }}"
+ data-recipient-form-input
+ >
+ {%- endcapture -%}
+
+ {%- if recipient_form_label_position == 'top' -%}
+ {{ recipient_name_label }}
+ {{ recipient_name }}
+ {%- else -%}
+ {{ recipient_name }}
+ {{ recipient_name_label }}
+ {%- endif -%}
+ </div>
+ </div>
+
+ {% comment %} Recipient message {% endcomment %}
+ <div class="recipient-form__field">
+ <div class="recipient-form__input-wrapper">
+ {%- liquid
+ assign max_characters_length = 200
+
+ if show_recipient_form_max_characters_message
+ assign max_characters_message = 'recipient.form.max_characters' | t: max_characters: max_characters_length
+ endif
+ -%}
+
+ {%- if show_recipient_form_labels -%}
+ {%- capture recipient_message_label -%}
+ <label
+ class="
+ recipient-form__label
+ {{ recipient_form_label_classes }}
+ "
+ for="recipient-message-{{ section.id }}"
+ >
+ {{- 'recipient.form.message_label' | t -}}
+ </label>
+ {%- endcapture -%}
+ {%- endif -%}
+
+ {%- capture recipient_message -%}
+ <textarea
+ class="
+ recipient-form__input
+ recipient-form__input--message
+ {{ recipient_form_input_classes }}
+ {{ recipient_form_textarea_classes }}
+ "
+ id="recipient-message-{{ section.id }}"
+ {%- if show_recipient_form_placeholders -%}
+ placeholder="{{- 'recipient.form.message_placeholder' | t -}}"
+ {%- endif -%}
+ {%- unless show_recipient_form_labels -%}
+ aria-label="{{- 'recipient.form.message_placeholder' | t -}}"
+ {%- endunless -%}
+ name="properties[Message]"
+ {%- if recipient_form_textarea_rows != 0 -%}
+ rows="{{ recipient_form_textarea_rows }}"
+ {%- endif -%}
+ maxlength="{{ max_characters_length }}"
+ data-recipient-form-input
+ >
+ {{- form.message -}}
+ </textarea>
+ {%- endcapture -%}
+
+ {%- if recipient_form_label_position == 'top' -%}
+ {{ recipient_message_label }}
+ {{ recipient_message }}
+ {%- else -%}
+ {{ recipient_message }}
+ {{ recipient_message_label }}
+ {%- endif -%}
+ </div>
+
+ {%- if show_recipient_form_max_characters_message -%}
+ <span class="recipient-form__max-characters-message">
+ <small>
+ {{- max_characters_message -}}
+ </small>
+ </span>
+ {%- endif -%}
+ </div>
+
+ {% comment %} Recipient send on date {% endcomment %}
+ <div class="recipient-form__field">
+ <div class="recipient-form__input-wrapper">
+ {%- if show_recipient_form_labels -%}
+ {%- capture recipient_date_label -%}
+ <label
+ class="
+ recipient-form__label
+ {{ recipient_form_label_classes }}
+ "
+ for="recipient-date-{{ section.id }}"
+ >
+ {{- 'recipient.form.send_on_label' | t -}}
+ </label>
+ {%- endcapture -%}
+ {%- endif -%}
+
+ {%- capture recipient_date -%}
+ <input
+ class="
+ recipient-form__input
+ recipient-form__input--date
+ {{ recipient_form_input_classes }}
+ "
+ id="recipient-date-{{ section.id }}"
+ {%- if show_recipient_form_placeholders -%}
+ placeholder="{{- 'recipient.form.send_on_placeholder' | t -}}"
+ {%- endif -%}
+ {%- unless show_recipient_form_labels -%}
+ aria-label="{{- 'recipient.form.send_on_placeholder' | t -}}"
+ {%- endunless -%}
+ type="date"
+ name="properties[Send on]"
+ autocomplete="send_on"
+ pattern="\d{4}-\d{2}-\d{2}"
+ value="{{ form.send_on }}"
+ data-recipient-form-input
+ >
+ {%- endcapture -%}
+
+ {%- if recipient_form_label_position == 'top' -%}
+ {{ recipient_date_label }}
+ {{ recipient_date }}
+ {%- else -%}
+ {{ recipient_date }}
+ {{ recipient_date_label }}
+ {%- endif -%}
+ </div>
+ </div>
+ </div>
+ </details>
+ {%- endif -%}
+ {% comment %}Inject @pixelunion/pxs-gift-card-recipient-form/recipient-form end{% endcomment %}
- {% if dl_sample != blank and dl_sample2 != blank and dl_sample == 'small_sample' and dl_sample2 == 'large_sample' %}
- {% assign title = 'Small Sample' %}
- {% endif %}
- {% if dl_sample == 'small_sample' and dl_sample_variant !='' and dl_sample_variant_title != '' %}
- <a
- href=""
- data-dlvid="{{ dl_sample_variant }}"
- data-dlvtitle="{{ dl_sample_variant_title }}"
- class="dl-sample-btn {{ showonly }}"
- data-product-id="{{ product.id }}"
- >
- {{ title }}
- </a>
+ <div
+ class="
+ product-add-to-cart
+ {% if product != blank and show_payment_button %}
+ product-smart-payments
+ {% endif %}
+ "
+ >
+ {% if selected_variant.available and template.name != 'password' %}
+ <input class="add-to-cart input" type="submit" value="{{ 'products.product.add_to_cart' | t }}" />
+ {% else %}
+ <input class="add-to-cart disabled input" type="submit" value="{{ 'products.product.sold_out' | t }}" disabled/>
{% endif %}
- {% if dl_sample2 == 'large_sample' and dl_sample_variant2 !='' and dl_sample_variant_title2 != '' %}
- <a
- href=""
- data-dlvid="{{ dl_sample_variant2 }}"
- data-dlvtitle="{{ dl_sample_variant_title2 }}"
- class="dl-sample-btn {{ showonly }}"
- data-product-id="{{ product.id }}"
- >
- Large Sample
- </a>
+ {% if show_payment_button %}
+ {{ form | payment_button }}
{% endif %}
- {% for variant_item in product.variants %}
- {% if variant_item.price == 0 and variant_item.title contains "Sample" and variant_item.title != "Sample" %}
- {% assign showing_title = variant_item.title %}
- {% if showing_title == "Textured Vinyl Sample" %}
- {% assign showing_title = "Vinyl Sample" %}
- {% endif %}
- <a
- href=""
- data-dlvid="{{ variant_item.id }}"
- data-dlvtitle="{{ variant_item.title }}"
- class="dl-second-sample-btn {% if variant_item.id != product.selected_or_first_available_variant.id %}unavailable{% endif %} {{ showonly }}"
- data-product-id="{{ product.id }}"
- >
- Request {{ showing_title }}
- </a>
- {% endif %}
- {% endfor %}
-
-<!-- <input class="add-to-cart" type="submit" value="{{ 'products.product.add_to_cart' | t }}" /> -->
- {% assign com_first_variant_title = product.selected_or_first_available_variant.title | capitalize %}
- <input class="add-to-cart {% if is_sample_like %}hidden{% endif %} {% if product.variants.size == 1 and com_first_variant_title == "Sample" %}hidden{% endif %} {% if product.selected_or_first_available_variant.price == 0 %}unavailable{% endif %}" type="submit" value="{{ 'products.product.add_to_cart' | t }}"/>
+ </div>
+ <div class="product-message"></div>
+
+ <div data-surface-pick-up></div>
+ {%-
+ render 'modal',
+ modal_id: 'surface-pick-up',
+ modal_class: 'surface-pick-up-modal',
+ -%}
+ </div>
- {% comment %} Download PDF — moved to the RIGHT of Add to Cart (2026-06-23) {% endcomment %}
- {% render 'spec-sheet-button' %}
- {% else %}
- <input class="add-to-cart disabled" type="submit" value="{{ 'products.product.sold_out' | t }}" disabled/>
- {% endif %}
+ {% when 'social' %}
+ <div class="product__social" {{ block.shopify_attributes }}>
+ {% render 'share-buttons' %}
+ </div>
- <!--020 -->
- {% for t in product.tags %}
- {% if t == 'Customize' %}
- <a href="#" class="dl-customize-btn custom-popup-contact-form">Customize this Pattern</a>
- {% endif %}
- {% endfor %}
+ {% when 'description' %}
+ {% if product != blank and product.description != blank %}
+ <div class="product-description rte" {{ block.shopify_attributes }}>
+ {{ product.description }}
+ </div>
+ {% elsif product == blank %}
+ <div class="product-description rte" {{ block.shopify_attributes }}>
+ {{ 'products.product.onboarding.description' | t }}
+ </div>
+ {% endif %}
- {% if show_payment_button %}
- {{ form | payment_button }}
- {% endif %}
+ {%- when 'rating' -%}
+ {%- if product.metafields.reviews.rating.value != blank -%}
+ <div class="product__rating rating" {{ block.shopify_attributes }}>
+ {%
+ render 'rating-stars',
+ value: product.metafields.reviews.rating.value.rating,
+ scale_max: product.metafields.reviews.rating.value.scale_max,
+ %}
+ <p class="rating__text">
+ <span aria-hidden="true">{{ product.metafields.reviews.rating.value }} / {{ product.metafields.reviews.rating.value.scale_max }}</span>
+ </p>
+ <p class="rating__count">
+ <span aria-hidden="true">({{ product.metafields.reviews.rating_count }})</span>
+ <span class="visually-hidden">{{ product.metafields.reviews.rating_count }} {{ "general.accessibility.total_reviews" | t }}</span>
+ </p>
+ </div>
+ {%- endif -%}
- {% capture the_snippet_fave %}{% include 'socialshopwave-widget-fave' %}{% endcapture %}
- {% unless the_snippet_fave contains 'Liquid error' %}
- {{ the_snippet_fave }}
- {% endunless %}
- </div>
- <div class="product-message"></div>
-
- <div data-surface-pick-up></div>
- {%-
- render 'modal',
- modal_id: 'surface-pick-up',
- modal_class: 'surface-pick-up-modal',
- -%}
- </div>
-
- {% when 'social' %}
- <div class="product__social" {{ block.shopify_attributes }}>
- {% render 'share-buttons' %}
- </div>
-
- {% when 'description' %}
- {% if product != blank and product.description != blank %}
- <div class="product-description rte" {{ block.shopify_attributes }}>
- {{ product.description }}
- </div>
- {% elsif product == blank %}
- <div class="product-description rte" {{ block.shopify_attributes }}>
- {{ 'products.product.onboarding.description' | t }}
- </div>
- {% endif %}
-
- {%- when 'rating' -%}
- {%- if product.metafields.reviews.rating.value != blank -%}
- <div class="product__rating rating" {{ block.shopify_attributes }}>
- {%
- render 'rating-stars',
- value: product.metafields.reviews.rating.value.rating,
- scale_max: product.metafields.reviews.rating.value.scale_max,
- %}
- <p class="rating__text">
- <span aria-hidden="true">{{ product.metafields.reviews.rating.value }} / {{ product.metafields.reviews.rating.value.scale_max }}</span>
- </p>
- <p class="rating__count">
- <span aria-hidden="true">({{ product.metafields.reviews.rating_count }})</span>
- <span class="visually-hidden">{{ product.metafields.reviews.rating_count }} {{ "general.accessibility.total_reviews" | t }}</span>
- </p>
- </div>
- {%- endif -%}
- {% endcase %}
-{% endfor %}
+ {%- when 'complementary_products' -%}
+ {%
+ render 'complementary-products',
+ product: product,
+ block: block,
+ %}
+ {% endcase %}
+ {% endfor %}
+</div>
\ No newline at end of file
diff --git a/shopify/_cwGRID/snippets/spec-sheet-button.liquid b/shopify/_cwGRID/snippets/spec-sheet-button.liquid
index 6257a54e..c6030f30 100644
--- a/shopify/_cwGRID/snippets/spec-sheet-button.liquid
+++ b/shopify/_cwGRID/snippets/spec-sheet-button.liquid
@@ -1,216 +1,99 @@
{% comment %}
- Spec Sheet Button — INLINE PDF download (no page navigation, no iframe).
-
- FIX HISTORY
- -----------
- v1 (broken): fetch('/pages/spec-sheet') + DOMParser + html2canvas. DOMParser
- never runs scripts, so #pdf-content was always the "Loading Product..."
- placeholder -> 0-dim canvas -> jsPDF threw -> "Error".
-
- v2 (broken on LIVE): hidden same-origin iframe -> /pages/spec-sheet -> call its
- downloadPDF(). DEAD ON ARRIVAL: the storefront sends `X-Frame-Options: DENY`
- + CSP `frame-ancestors 'none'` STORE-WIDE (verified 2026-06-23 on /, /pages/*,
- /collections/*, /products/*). DENY blocks ALL framing — including same-origin —
- so the iframe never renders and contentDocument is inaccessible.
-
- v3 (this version — works against live CSP):
- Build the spec-sheet DOM RIGHT HERE on the product page from Liquid-injected
- product data + metafields (no fetch, no iframe, no /pages/spec-sheet
- dependency). On click we lazy-load jsPDF + html2canvas from cdnjs (the live
- CSP has NO script-src/default-src directive, so cdnjs is allowed — verified),
- render the offscreen node with html2canvas (useCORS:true; the product image
- is on cdn.shopify.com which returns `access-control-allow-origin: *`, so the
- canvas does NOT taint), and jsPDF.save() it. One click, fully self-contained.
-
- The standalone /pages/spec-sheet page still works for a direct visit (it has
- {% layout none %} so it's a clean print page), but the BUTTON no longer needs it.
+ Spec Sheet Button - With inline PDF download (no page navigation)
{% endcomment %}
-{%- liquid
- assign p = product
- assign mf = product.metafields
- # ---- Color: real color name only (spreadsheet/metafield/variant option), never AI ----
- assign spec_color = ''
- if mf.custom.color != blank
- assign spec_color = mf.custom.color
- elsif mf.global.Color != blank
- assign spec_color = mf.global.Color
- elsif mf.dwc.color != blank
- assign spec_color = mf.dwc.color
- endif
- # ---- Mfr SKU ----
- assign mfr_sku = ''
- if mf.custom.manufacturer_sku != blank
- assign mfr_sku = mf.custom.manufacturer_sku
- elsif mf.dwc.manufacturer_sku != blank
- assign mfr_sku = mf.dwc.manufacturer_sku
- endif
- # ---- DW SKU (strip -Sample) ----
- assign dw_sku = p.selected_or_first_available_variant.sku | default: p.variants.first.sku
- assign dw_sku = dw_sku | replace: '-Sample', '' | replace: '-SAMPLE', '' | replace: '-sample', ''
--%}
-
<div class="spec-sheet-controls">
- <button type="button"
- class="spec-sheet-btn pdf-download-btn"
- data-dw-spec-trigger
- aria-label="Download spec sheet PDF for {{ p.title | escape }}">
+ <button class="spec-sheet-btn pdf-download-btn"
+ onclick="downloadSpecSheetPDF(event, '{{ product.handle }}', '{{ product.title }}', '{{ product.featured_image.src }}');"
+ style="vertical-align: top;">
🖨️ Download PDF
</button>
</div>
-{%- comment %} Offscreen, fully-rendered spec sheet built from Liquid data {% endcomment -%}
-<div id="dw-spec-sheet" aria-hidden="true"
- style="position:fixed;left:-10000px;top:0;width:816px;background:#fff;z-index:-1;">
- <div class="dw-spec-page">
- <div class="dw-spec-header">
- <img class="dw-spec-logo"
- crossorigin="anonymous"
- src="https://www.designerwallcoverings.com/cdn/shop/files/Screen_Shot_2019-02-06_at_12.08.24_PM_300x172.png?v=1613539653"
- alt="Designer Wallcoverings">
- </div>
- <div class="dw-spec-body">
- <h1 class="dw-spec-title">{{ p.title | escape }}</h1>
- {%- if p.featured_image -%}
- <img class="dw-spec-img" crossorigin="anonymous"
- src="{{ p.featured_image | image_url: width: 600 }}"
- alt="{{ p.title | escape }}">
- {%- endif -%}
- <div class="dw-spec-grid">
- <div class="dw-spec-item"><strong>DW SKU:</strong><span>{{ dw_sku | escape }}</span></div>
- {%- if spec_color != blank -%}<div class="dw-spec-item"><strong>Color:</strong><span>{{ spec_color | escape }}</span></div>{%- endif -%}
- {%- if p.vendor != blank -%}<div class="dw-spec-item"><strong>Brand:</strong><span>{{ p.vendor | escape }}</span></div>{%- endif -%}
- {%- assign coll = mf.custom.collection_name | default: mf.global.Collection -%}
- {%- if coll != blank -%}<div class="dw-spec-item"><strong>Collection:</strong><span>{{ coll | escape }}</span></div>{%- endif -%}
- {%- assign comp = mf.custom.material | default: mf.global.Content | default: mf.global.Contents -%}
- {%- if comp != blank -%}<div class="dw-spec-item"><strong>Composition:</strong><span>{{ comp | escape }}</span></div>{%- endif -%}
- {%- assign w = mf.custom.width | default: mf.global.width | default: mf.global.Width -%}
- {%- if w != blank -%}<div class="dw-spec-item"><strong>Width:</strong><span>{{ w | escape }}</span></div>{%- endif -%}
- {%- assign len = mf.custom.length | default: mf.global.length | default: mf.global.Length -%}
- {%- if len != blank -%}<div class="dw-spec-item"><strong>Length:</strong><span>{{ len | escape }}</span></div>{%- endif -%}
- {%- assign rep = mf.custom.pattern_repeat | default: mf.global.repeat -%}
- {%- if rep != blank -%}<div class="dw-spec-item"><strong>Repeat:</strong><span>{{ rep | escape }}</span></div>{%- endif -%}
- {%- assign mt = mf.custom.match_type | default: mf.global.Match | default: mf.global.MATCH -%}
- {%- if mt != blank -%}<div class="dw-spec-item"><strong>Match:</strong><span>{{ mt | escape }}</span></div>{%- endif -%}
- {%- assign wt = mf.custom.product_weight | default: mf.global.Weight -%}
- {%- if wt != blank -%}<div class="dw-spec-item"><strong>Weight:</strong><span>{{ wt | escape }}</span></div>{%- endif -%}
- {%- assign fin = mf.custom.finish | default: mf.global.Finish | default: mf.global.FINISH -%}
- {%- if fin != blank -%}<div class="dw-spec-item"><strong>Finish:</strong><span>{{ fin | escape }}</span></div>{%- endif -%}
- {%- assign care = mf.custom.care | default: mf.global.Cleaning -%}
- {%- if care != blank -%}<div class="dw-spec-item"><strong>Care:</strong><span>{{ care | escape }}</span></div>{%- endif -%}
- {%- assign fire = mf.custom.fire_rating | default: mf.global.fire_rating | default: mf.global.FLAMMABILITY -%}
- {%- if fire != blank -%}<div class="dw-spec-item"><strong>Fire Rating:</strong><span>{{ fire | escape }}</span></div>{%- endif -%}
- {%- assign origin = mf.custom.origin | default: mf.global.Country -%}
- {%- if origin != blank -%}<div class="dw-spec-item"><strong>Country of Origin:</strong><span>{{ origin | escape }}</span></div>{%- endif -%}
- {%- assign uom = mf.custom.unit_of_measure | default: mf.global.unit_of_measure -%}
- {%- if uom != blank -%}<div class="dw-spec-item"><strong>Sold:</strong><span>{{ uom | escape }}</span></div>{%- endif -%}
- {%- if mfr_sku != blank -%}<div class="dw-spec-item"><strong>Extra Info:</strong><span>{{ mfr_sku | escape }}</span></div>{%- endif -%}
- </div>
- </div>
- <div class="dw-spec-footer">
- <div class="dw-spec-footer-line company">Designer Wallcoverings Purchasing Agency</div>
- <div class="dw-spec-footer-line">15442 Ventura Bl #102, Sherman Oaks, CA 91403</div>
- <div class="dw-spec-footer-line">Phone: (888) 373-4564 | info@designerwallcoverings.com | www.designerwallcoverings.com</div>
- <div class="dw-spec-footer-line italic">Purchasing Agency for the Wallcovering and Surface Material Industry</div>
- <div class="dw-spec-footer-line tiny">Spec sheet information valid only when purchased through Designer Wallcoverings Purchasing</div>
- </div>
- </div>
-</div>
-
<script>
-(function () {
- if (window.__dwSpecPdfInit) return;
- window.__dwSpecPdfInit = true;
+async function downloadSpecSheetPDF(e, handle, title, imageUrl) {
+ e?.preventDefault?.();
+ e?.stopPropagation?.();
- var JSPDF_SRC = 'https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js';
- var H2C_SRC = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js';
-
- function loadScript(src) {
- return new Promise(function (resolve, reject) {
- var existing = document.querySelector('script[src="' + src + '"]');
- if (existing) {
- if (existing.dataset.loaded === '1') return resolve();
- existing.addEventListener('load', function () { resolve(); });
- existing.addEventListener('error', function () { reject(new Error('load fail ' + src)); });
- return;
- }
- var s = document.createElement('script');
- s.src = src;
- s.async = true;
- s.addEventListener('load', function () { s.dataset.loaded = '1'; resolve(); });
- s.addEventListener('error', function () { reject(new Error('load fail ' + src)); });
- document.head.appendChild(s);
- });
+ const btn = e?.target;
+ if (btn) {
+ btn.textContent = '⏳ Generating...';
+ btn.disabled = true;
}
- function ensureLibs() {
- var need = [];
- if (typeof window.html2canvas !== 'function') need.push(loadScript(H2C_SRC));
- if (!(window.jspdf && window.jspdf.jsPDF)) need.push(loadScript(JSPDF_SRC));
- return Promise.all(need);
- }
+ try {
+ // Fetch the spec sheet HTML
+ const response = await fetch(`/pages/spec-sheet?product=${encodeURIComponent(handle)}`);
+ const html = await response.text();
- // Decode the protocol-relative shopify logo to avoid a tainting surprise; the
- // product image + logo are both cdn.shopify.com (ACAO:*), so useCORS handles them.
- async function generate(btn) {
- var node = document.getElementById('dw-spec-sheet');
- if (!node) throw new Error('spec node missing');
- // Make it renderable (html2canvas needs layout; keep it offscreen, not display:none).
- node.style.zIndex = '-1';
- node.style.visibility = 'visible';
+ // Extract the printable content
+ const parser = new DOMParser();
+ const doc = parser.parseFromString(html, 'text/html');
+ const pdfContent = doc.getElementById('pdf-content');
+
+ if (!pdfContent) {
+ throw new Error('Could not load spec sheet');
+ }
- await ensureLibs();
+ // Use html2pdf library (already loaded on spec sheet page)
+ const script1 = document.createElement('script');
+ script1.src = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js';
+ document.head.appendChild(script1);
- var canvas = await window.html2canvas(node.querySelector('.dw-spec-page'), {
+ const script2 = document.createElement('script');
+ script2.src = 'https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js';
+ document.head.appendChild(script2);
+
+ // Wait for scripts to load
+ await new Promise(resolve => {
+ script1.onload = () => {
+ script2.onload = resolve;
+ };
+ });
+
+ // Generate PDF
+ const canvas = await html2canvas(pdfContent, {
scale: 2,
useCORS: true,
allowTaint: false,
backgroundColor: '#ffffff',
- logging: false,
- windowWidth: 816
+ logging: false
+ });
+
+ const { jsPDF } = window.jspdf;
+ const imgData = canvas.toDataURL('image/png');
+ const pdf = new jsPDF({
+ orientation: 'portrait',
+ unit: 'mm',
+ format: 'letter'
});
- var jsPDF = window.jspdf.jsPDF;
- var imgData = canvas.toDataURL('image/png');
- var pdf = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'letter' });
- var imgWidth = 216;
- var imgHeight = (canvas.height * imgWidth) / canvas.width;
+ const imgWidth = 216;
+ const imgHeight = (canvas.height * imgWidth) / canvas.width;
pdf.addImage(imgData, 'PNG', 0, 0, imgWidth, imgHeight);
- var sku = (node.querySelector('.dw-spec-item span') || {}).textContent || 'spec';
- pdf.save('Designer-Wallcoverings-Los-Angeles-' + sku.trim().replace(/[^A-Za-z0-9\-]+/g, '-') + '.pdf');
- }
+ // Download with product SKU in filename
+ const sku = title.replace(/[^a-z0-9]/gi, '-').toLowerCase();
+ pdf.save(`Designer-Wallcoverings-${sku}.pdf`);
- function onClick(e) {
- var btn = e.currentTarget;
- var orig = btn.textContent;
- btn.textContent = '⏳ Generating...';
- btn.disabled = true;
- generate(btn).then(function () {
+ if (btn) {
btn.textContent = '✓ Downloaded!';
- setTimeout(function () { btn.textContent = orig; btn.disabled = false; }, 2000);
- }).catch(function (err) {
- console.error('Spec PDF generation failed:', err);
+ setTimeout(() => {
+ btn.textContent = '🖨️ Download PDF';
+ btn.disabled = false;
+ }, 2000);
+ }
+ } catch (err) {
+ console.error('PDF generation failed:', err);
+ if (btn) {
btn.textContent = '✗ Error - Try Again';
- setTimeout(function () { btn.textContent = orig; btn.disabled = false; }, 2500);
- });
- }
-
- function wire() {
- var btns = document.querySelectorAll('[data-dw-spec-trigger]');
- for (var i = 0; i < btns.length; i++) {
- if (btns[i].dataset.dwWired === '1') continue;
- btns[i].dataset.dwWired = '1';
- btns[i].addEventListener('click', onClick);
+ setTimeout(() => {
+ btn.textContent = '🖨️ Download PDF';
+ btn.disabled = false;
+ }, 2000);
}
}
-
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', wire);
- } else {
- wire();
- }
-})();
+}
</script>
<style>
@@ -218,6 +101,7 @@
display: inline-block;
margin: 0;
}
+
.spec-sheet-btn {
display: inline-block;
padding: 10px 16px;
@@ -231,30 +115,23 @@
transition: all 0.3s ease;
white-space: nowrap;
}
+
.spec-sheet-btn:hover {
background: #1e4557;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
-.spec-sheet-btn:active { transform: translateY(0); }
-.spec-sheet-btn:disabled { opacity: 0.6; cursor: not-allowed; }
-.pdf-download-btn { vertical-align: top; }
-/* Offscreen spec-sheet print styles (rendered by html2canvas, never shown to the user) */
-#dw-spec-sheet * { margin: 0; padding: 0; box-sizing: border-box; }
-#dw-spec-sheet .dw-spec-page { width: 816px; background: #fff; font-family: Arial, Helvetica, sans-serif; }
-#dw-spec-sheet .dw-spec-header { padding: 30px 40px; text-align: center; border-bottom: 2px solid #2c5f7f; }
-#dw-spec-sheet .dw-spec-logo { max-width: 200px; display: block; margin: 0 auto; }
-#dw-spec-sheet .dw-spec-body { padding: 30px 40px; }
-#dw-spec-sheet .dw-spec-title { font-size: 18px; color: #333; margin-bottom: 15px; font-weight: normal; text-align: center; text-transform: capitalize; }
-#dw-spec-sheet .dw-spec-img { max-width: 500px; max-height: 500px; object-fit: contain; display: block; margin: 0 auto 20px; width: 100%; }
-#dw-spec-sheet .dw-spec-grid { max-width: 560px; margin: 0 auto; display: grid; grid-template-columns: 1fr; gap: 10px; }
-#dw-spec-sheet .dw-spec-item { font-size: 14px; line-height: 1.6; display: flex; align-items: baseline; }
-#dw-spec-sheet .dw-spec-item strong { color: #333; font-weight: bold; margin-right: 6px; white-space: nowrap; }
-#dw-spec-sheet .dw-spec-item span { color: #555; flex: 1; }
-#dw-spec-sheet .dw-spec-footer { padding: 20px 40px; text-align: center; border-top: 2px solid #2c5f7f; background: #f9f9f9; }
-#dw-spec-sheet .dw-spec-footer-line { font-size: 10px; color: #666; margin: 3px 0; }
-#dw-spec-sheet .dw-spec-footer-line.company { font-size: 12px; font-weight: bold; color: #333; margin-bottom: 6px; }
-#dw-spec-sheet .dw-spec-footer-line.italic { font-style: italic; margin-top: 10px; }
-#dw-spec-sheet .dw-spec-footer-line.tiny { font-size: 9px; margin-top: 8px; }
+.spec-sheet-btn:active {
+ transform: translateY(0);
+}
+
+.spec-sheet-btn:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+}
+
+.pdf-download-btn {
+ vertical-align: top;
+}
</style>
diff --git a/shopify/_cwGRID/templates/page.spec-sheet.liquid b/shopify/_cwGRID/templates/page.spec-sheet.liquid
index 7681eac9..dfc7fef1 100644
--- a/shopify/_cwGRID/templates/page.spec-sheet.liquid
+++ b/shopify/_cwGRID/templates/page.spec-sheet.liquid
@@ -1,4 +1,3 @@
-{% layout none %}
{% comment %}
Simple Spec Sheet - Refined version
- Larger image (500x500px)
diff --git a/shopify/scripts/cadence/data/cadence-cursor.json b/shopify/scripts/cadence/data/cadence-cursor.json
index 626e6314..6d3696da 100644
--- a/shopify/scripts/cadence/data/cadence-cursor.json
+++ b/shopify/scripts/cadence/data/cadence-cursor.json
@@ -1,5 +1,5 @@
{
"idx": 6,
- "lastSlot": "am",
+ "lastSlot": "pm",
"lastRun": "2026-06-24"
}
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-23.json b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-23.json
index 95b93dd8..4fba9645 100644
--- a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-23.json
+++ b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-23.json
@@ -1,11 +1,11 @@
[
{
- "vendor": "Romo",
- "dw_sku": "DWRM-240001",
- "cost": 467.502,
- "retail": 846.16,
+ "vendor": "Thibaut",
+ "dw_sku": "DWTT-73402",
+ "cost": 70.2,
+ "retail": 127.06,
"sample": "4.25",
- "title": "Abaca, Alabaster Wallcoverings | Romo",
+ "title": "Mini Trellis, Beige Wallcoverings | Thibaut",
"willActivate": true
}
]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
index 91916846..4978ef69 100644
--- a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
+++ b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
@@ -1,182 +1,32 @@
[
{
- "vendor": "Romo",
- "dw_sku": "DWRM-240025",
- "cost": 542.304,
- "retail": 981.55,
+ "vendor": "Quadrille",
+ "dw_sku": "DWQC-600006",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Akata, Ochre Wallcoverings | Romo",
- "willActivate": true
- },
- {
- "vendor": "Romo",
- "dw_sku": "DWRM-240027",
- "cost": 379.5015,
- "retail": 686.88,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Sisal, Pale Beige Wallcoverings | Romo",
- "willActivate": true
- },
- {
- "vendor": "Romo",
- "dw_sku": "DWRM-240029",
- "cost": 379.5015,
- "retail": 686.88,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Sisal, Stone Wallcoverings | Romo",
- "willActivate": true
- },
- {
- "vendor": "Thibaut",
- "dw_sku": "DWTT-73414",
- "cost": 46.8,
- "retail": 84.71,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Gada Paisley, Navy Wallcoverings | Thibaut",
- "willActivate": true
- },
- {
- "vendor": "Thibaut",
- "dw_sku": "DWTT-73415",
- "cost": 46.8,
- "retail": 84.71,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Gada Paisley, Green Wallcoverings | Thibaut",
- "willActivate": true
- },
- {
- "vendor": "Thibaut",
- "dw_sku": "DWTT-73416",
- "cost": 62.1,
- "retail": 112.4,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Gibson, Grey Wallcoverings | Thibaut",
- "willActivate": true
- },
- {
- "vendor": "Zoffany",
- "dw_sku": "DWZF-187017",
- "cost": 216,
- "retail": 390.95,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Spun Silk, Paris Grey Wallcoverings | Zoffany",
- "willActivate": true
- },
- {
- "vendor": "Zoffany",
- "dw_sku": "DWZF-187019",
- "cost": 208,
- "retail": 376.47,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Moresque Glaze, Indigo Wallcoverings | Zoffany",
- "willActivate": true
- },
- {
- "vendor": "Zoffany",
- "dw_sku": "DWZF-187021",
- "cost": 216,
- "retail": 390.95,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Kensington Grasscloth, Paris Grey Wallcoverings | Zoffany",
- "willActivate": true
- },
- {
- "vendor": "Designtex",
- "dw_sku": "DWDX-220315",
- "cost": 22,
- "retail": 39.82,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Pebble, Riverbed Wallcoverings | Designtex",
- "willActivate": true
- },
- {
- "vendor": "Designtex",
- "dw_sku": "DWDX-220316",
- "cost": 22,
- "retail": 39.82,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Pebble, Cloudburst Wallcoverings | Designtex",
- "willActivate": true
- },
- {
- "vendor": "Designtex",
- "dw_sku": "DWDX-220317",
- "cost": 22,
- "retail": 39.82,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Pebble, Primp Wallcoverings | Designtex",
+ "sampleOnly": true,
+ "title": "Ophelia, Multi Raspberry Wallcoverings | Quadrille",
"willActivate": false
},
{
- "vendor": "Newwall",
- "dw_sku": "DWXW-1005020",
- "cost": 156,
- "retail": 282.35,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Uzbek Lilac, Lilac Wallcoverings | Newwall",
- "willActivate": true
- },
- {
- "vendor": "Newwall",
- "dw_sku": "DWXW-1005021",
- "cost": 156,
- "retail": 282.35,
+ "vendor": "Quadrille",
+ "dw_sku": "DWQC-600007",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Uzbek Cream, Cream Wallcoverings | Newwall",
- "willActivate": true
- },
- {
- "vendor": "Newwall",
- "dw_sku": "DWXW-1005022",
- "cost": 156,
- "retail": 282.35,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Huipil Blue, Blue Wallcoverings | Newwall",
- "willActivate": true
- },
- {
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-170673",
- "cost": 35,
- "retail": 63.35,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Allison, Blue Wallcoverings | Brewster & York",
- "willActivate": true
- },
- {
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-170674",
- "cost": 69.99,
- "retail": 126.68,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Allison, Lavender Wallcoverings | Brewster & York",
- "willActivate": true
+ "sampleOnly": true,
+ "title": "Ophelia, Multi Greens Wallcoverings | Quadrille",
+ "willActivate": false
},
{
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-170675",
- "cost": 35,
- "retail": 63.35,
+ "vendor": "Quadrille",
+ "dw_sku": "DWQC-600008",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Allison, Pink Wallcoverings | Brewster & York",
- "willActivate": true
+ "sampleOnly": true,
+ "title": "Ophelia, Multi Blues on White Wallcoverings | Quadrille",
+ "willActivate": false
}
]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json b/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json
new file mode 100644
index 00000000..91916846
--- /dev/null
+++ b/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json
@@ -0,0 +1,182 @@
+[
+ {
+ "vendor": "Romo",
+ "dw_sku": "DWRM-240025",
+ "cost": 542.304,
+ "retail": 981.55,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Akata, Ochre Wallcoverings | Romo",
+ "willActivate": true
+ },
+ {
+ "vendor": "Romo",
+ "dw_sku": "DWRM-240027",
+ "cost": 379.5015,
+ "retail": 686.88,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Sisal, Pale Beige Wallcoverings | Romo",
+ "willActivate": true
+ },
+ {
+ "vendor": "Romo",
+ "dw_sku": "DWRM-240029",
+ "cost": 379.5015,
+ "retail": 686.88,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Sisal, Stone Wallcoverings | Romo",
+ "willActivate": true
+ },
+ {
+ "vendor": "Thibaut",
+ "dw_sku": "DWTT-73414",
+ "cost": 46.8,
+ "retail": 84.71,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Gada Paisley, Navy Wallcoverings | Thibaut",
+ "willActivate": true
+ },
+ {
+ "vendor": "Thibaut",
+ "dw_sku": "DWTT-73415",
+ "cost": 46.8,
+ "retail": 84.71,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Gada Paisley, Green Wallcoverings | Thibaut",
+ "willActivate": true
+ },
+ {
+ "vendor": "Thibaut",
+ "dw_sku": "DWTT-73416",
+ "cost": 62.1,
+ "retail": 112.4,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Gibson, Grey Wallcoverings | Thibaut",
+ "willActivate": true
+ },
+ {
+ "vendor": "Zoffany",
+ "dw_sku": "DWZF-187017",
+ "cost": 216,
+ "retail": 390.95,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Spun Silk, Paris Grey Wallcoverings | Zoffany",
+ "willActivate": true
+ },
+ {
+ "vendor": "Zoffany",
+ "dw_sku": "DWZF-187019",
+ "cost": 208,
+ "retail": 376.47,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Moresque Glaze, Indigo Wallcoverings | Zoffany",
+ "willActivate": true
+ },
+ {
+ "vendor": "Zoffany",
+ "dw_sku": "DWZF-187021",
+ "cost": 216,
+ "retail": 390.95,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Kensington Grasscloth, Paris Grey Wallcoverings | Zoffany",
+ "willActivate": true
+ },
+ {
+ "vendor": "Designtex",
+ "dw_sku": "DWDX-220315",
+ "cost": 22,
+ "retail": 39.82,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Pebble, Riverbed Wallcoverings | Designtex",
+ "willActivate": true
+ },
+ {
+ "vendor": "Designtex",
+ "dw_sku": "DWDX-220316",
+ "cost": 22,
+ "retail": 39.82,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Pebble, Cloudburst Wallcoverings | Designtex",
+ "willActivate": true
+ },
+ {
+ "vendor": "Designtex",
+ "dw_sku": "DWDX-220317",
+ "cost": 22,
+ "retail": 39.82,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Pebble, Primp Wallcoverings | Designtex",
+ "willActivate": false
+ },
+ {
+ "vendor": "Newwall",
+ "dw_sku": "DWXW-1005020",
+ "cost": 156,
+ "retail": 282.35,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Uzbek Lilac, Lilac Wallcoverings | Newwall",
+ "willActivate": true
+ },
+ {
+ "vendor": "Newwall",
+ "dw_sku": "DWXW-1005021",
+ "cost": 156,
+ "retail": 282.35,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Uzbek Cream, Cream Wallcoverings | Newwall",
+ "willActivate": true
+ },
+ {
+ "vendor": "Newwall",
+ "dw_sku": "DWXW-1005022",
+ "cost": 156,
+ "retail": 282.35,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Huipil Blue, Blue Wallcoverings | Newwall",
+ "willActivate": true
+ },
+ {
+ "vendor": "Brewster & York",
+ "dw_sku": "DWBR-170673",
+ "cost": 35,
+ "retail": 63.35,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Allison, Blue Wallcoverings | Brewster & York",
+ "willActivate": true
+ },
+ {
+ "vendor": "Brewster & York",
+ "dw_sku": "DWBR-170674",
+ "cost": 69.99,
+ "retail": 126.68,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Allison, Lavender Wallcoverings | Brewster & York",
+ "willActivate": true
+ },
+ {
+ "vendor": "Brewster & York",
+ "dw_sku": "DWBR-170675",
+ "cost": 35,
+ "retail": 63.35,
+ "sample": "4.25",
+ "sampleOnly": false,
+ "title": "Allison, Pink Wallcoverings | Brewster & York",
+ "willActivate": true
+ }
+]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
index 6c7268b2..8edde8a4 100644
--- a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
+++ b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
@@ -4,3 +4,21 @@
{"table":"quadrille_house_catalog","mfr_sku":"307210F-04","dw_sku":"DWQC-600003","shopify_product_id":"7866917617715","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-16-38-713Z","ts":"2026-06-24T00:16:43.636Z"}
{"table":"quadrille_house_catalog","mfr_sku":"307210F-02","dw_sku":"DWQC-600004","shopify_product_id":"7866917650483","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-16-38-713Z","ts":"2026-06-24T00:16:47.419Z"}
{"table":"quadrille_house_catalog","mfr_sku":"307210F-01","dw_sku":"DWQC-600005","shopify_product_id":"7866917683251","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-16-38-713Z","ts":"2026-06-24T00:16:51.059Z"}
+{"table":"romo_catalog","mfr_sku":"MW104/04","dw_sku":"DWRM-240025","shopify_product_id":"7866926694451","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:06.389Z"}
+{"table":"romo_catalog","mfr_sku":"MW105/02","dw_sku":"DWRM-240027","shopify_product_id":"7866926727219","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:10.002Z"}
+{"table":"romo_catalog","mfr_sku":"MW105/04","dw_sku":"DWRM-240029","shopify_product_id":"7866926759987","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:13.791Z"}
+{"table":"thibaut_catalog","mfr_sku":"AT78787","dw_sku":"DWTT-73414","shopify_product_id":"7866926792755","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:17.892Z"}
+{"table":"thibaut_catalog","mfr_sku":"AT78784","dw_sku":"DWTT-73415","shopify_product_id":"7866926825523","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:21.570Z"}
+{"table":"thibaut_catalog","mfr_sku":"AT78791","dw_sku":"DWTT-73416","shopify_product_id":"7866926858291","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:25.208Z"}
+{"table":"zoffany_catalog","mfr_sku":"ZRHW312903","dw_sku":"DWZF-187017","shopify_product_id":"7866926891059","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:28.843Z"}
+{"table":"zoffany_catalog","mfr_sku":"ZHIW312994","dw_sku":"DWZF-187019","shopify_product_id":"7866926923827","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:32.388Z"}
+{"table":"zoffany_catalog","mfr_sku":"ZHIW313003","dw_sku":"DWZF-187021","shopify_product_id":"7866926956595","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:35.959Z"}
+{"table":"designtex_catalog","mfr_sku":"8300752","dw_sku":"DWDX-220315","shopify_product_id":"7866926989363","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:39.607Z"}
+{"table":"designtex_catalog","mfr_sku":"8300801","dw_sku":"DWDX-220316","shopify_product_id":"7866927022131","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:43.244Z"}
+{"table":"designtex_catalog","mfr_sku":"8300951","dw_sku":"DWDX-220317","shopify_product_id":"7866927054899","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:45.358Z"}
+{"table":"newwall_catalog","mfr_sku":"A00814","dw_sku":"DWXW-1005020","shopify_product_id":"7866927087667","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:49.349Z"}
+{"table":"newwall_catalog","mfr_sku":"A00815","dw_sku":"DWXW-1005021","shopify_product_id":"7866927120435","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:53.236Z"}
+{"table":"newwall_catalog","mfr_sku":"A00817","dw_sku":"DWXW-1005022","shopify_product_id":"7866927218739","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:40:56.912Z"}
+{"table":"brewster_catalog","mfr_sku":"2657-22224","dw_sku":"DWBR-170673","shopify_product_id":"7866927251507","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:41:00.866Z"}
+{"table":"brewster_catalog","mfr_sku":"2657-22226","dw_sku":"DWBR-170674","shopify_product_id":"7866927317043","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:41:04.777Z"}
+{"table":"brewster_catalog","mfr_sku":"2657-22225","dw_sku":"DWBR-170675","shopify_product_id":"7866927349811","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:41:08.540Z"}
diff --git a/shopify/scripts/quadrille-phase2 b/shopify/scripts/quadrille-phase2
new file mode 160000
index 00000000..426ae3e5
--- /dev/null
+++ b/shopify/scripts/quadrille-phase2
@@ -0,0 +1 @@
+Subproject commit 426ae3e5bd3e442bcf56c904f4ee9b8b55186164
diff --git a/shopify/theme-5.0-duplicate/assets/dw-pdp-size-pills.js b/shopify/theme-5.0-duplicate/assets/dw-pdp-size-pills.js
index 19daab50..2095c593 100644
--- a/shopify/theme-5.0-duplicate/assets/dw-pdp-size-pills.js
+++ b/shopify/theme-5.0-duplicate/assets/dw-pdp-size-pills.js
@@ -129,9 +129,7 @@
function hideRedundantReadout() {
if (!document.querySelector('.dw-size-pills')) return; // only on enhanced PDPs
Array.prototype.forEach.call(document.querySelectorAll('.last_variant'), function (el) {
- // The theme forces display:flex !important on .last_variant, so a plain inline
- // hide is outranked — set the inline value WITH !important so it wins.
- el.style.setProperty('display', 'none', 'important');
+ el.style.display = 'none';
});
}
diff --git a/shopify/theme-files/sections/collection.liquid b/shopify/theme-files/sections/collection.liquid
index fb5d9a95..20451845 100644
--- a/shopify/theme-files/sections/collection.liquid
+++ b/shopify/theme-files/sections/collection.liquid
@@ -36,170 +36,238 @@
{% endunless %}
{% paginate collection.products by products_per_page %}
- <!-- INFINITE SCROLL WRAPPER: required by dw-native-infinite.js -->
- <div data-dw-infinite
- data-dw-infinite-items=".collection-products"
- data-dw-infinite-next="{{ paginate.next.url }}"
- data-dw-infinite-page="{{ current_page }}">
-
- <section
- class="collection collection-image--{{ show_collection_image }}"
- data-product-hover="{{ settings.product_hover }}"
- {% if use_masonry %}data-collection-masonry{% endif %}
- data-section-id="{{ section.id }}"
- data-section-type="collection">
-
- {% if use_masonry or show_collection_image or collection.description != blank or show_sorting or show_filters %}
- <div
- class="
- collection-header
+ <section
+ class="collection collection-image--{{ show_collection_image }}"
+ data-product-hover="{{ settings.product_hover }}"
+ {% if use_masonry %}data-collection-masonry{% endif %}
+ data-section-id="{{ section.id }}"
+ data-section-type="collection">
+
+ {% if use_masonry or show_collection_image or collection.description != blank or show_sorting or show_filters %}
+ <div
+ class="
+ collection-header
+ {% if use_masonry %}
+ collection-header-alternate
+ {% endif %}
+ {% if show_filters and show_sorting %}
+ collection-header--filters-sort-enabled
+ {% endif %}
+ "
+ >
+ {% if show_collection_image %}
+ <div class="collection-featured-image">
+ {%
+ render 'rimg',
+ img: collection.image,
+ size: '1024x1024',
+ lazy: true,
+ %}
+ </div>
+ {% endif %}
+
+ <div class="collection-header-content">
{% if use_masonry %}
- collection-header-alternate
+ {% render 'breadcrumbs' %}
+ <h1 class="page-title">{{ collection.title }}</h1>
{% endif %}
- {% if show_filters and show_sorting %}
- collection-header--filters-sort-enabled
- {% endif %}
- "
- >
- {% if show_collection_image %}
- <div class="collection-featured-image">
- {%
- render 'rimg',
- img: collection.image,
- size: '1024x1024',
- lazy: true,
- %}
+
+ {% if collection.description != blank and section.settings.show_description %}
+ <div class="collection-description rte">
+ {{ collection.description }}
</div>
{% endif %}
- <div class="collection-header-content">
- {% if use_masonry %}
- {% render 'breadcrumbs' %}
- <h1 class="page-title">{{ collection.title }}</h1>
- {% endif %}
-
- {% if collection.description != blank and section.settings.show_description %}
- <div class="collection-description rte">
- {{ collection.description }}
- </div>
- {% endif %}
-
- {% if show_filters or show_sorting %}
- <div class="collection-filters">
- {% if show_filters and collection.filters.size > 0 %}
- <!-- Approach B: Horizontal filter bar (proxies to Boost's hidden controls) -->
- {% render 'collection-filters-horizontal' %}
-
- <!-- Boost native filters (hidden by Approach B CSS, powers the filtering) -->
- <div class="faceted-filters" data-faceted-filter>
- {%
- render "faceted-filters",
- filters: collection.filters,
- class_prefix: 'collection',
- %}
- </div>
- {% endif %}
- {% if show_sorting %}
- <div class="collection-sorting__wrapper">
- <label class="collection-filters__title label" for="sort-by">
- {{- 'collections.collection.sort_title' | t -}}:
- </label>
-
- <div
- class="
- collection-dropdown
- collection-dropdown--sort
- select-wrapper
- {% if collection.current_vendor %}
- vendor-collection
- {% endif %}
- "
- >
- {% assign current_sort = collection.sort_by | default: collection.default_sort_by %}
-
- <span class="selected-text"></span>
-
- <select id="sort-by" class="select" data-collection-sorting>
- {%- for option in collection.sort_options -%}
- {% if current_sort == option.value %}
- <option value="{{ option.value }}" selected="selected">{{ option.name }}</option>
- {% else %}
- <option value="{{ option.value }}">{{ option.name }}</option>
- {% endif %}
- {% endfor %}
- </select>
- </div>
- </div>
- {% endif %}
- </div>
- {% endif %}
- </div>
+ {% if show_filters or show_sorting %}
+ <div class="collection-filters">
+ {% if show_filters and collection.filters.size > 0 %}
+ <!-- Approach B: Horizontal filter bar (proxies to Boost's hidden controls) -->
+ {% render 'collection-filters-horizontal' %}
- {% if show_filters and collection.filters.size > 0 %}
- {% for filter in collection.filters %}
- {% if filter.active_values.size > 0 or filter.min_value.value or filter.max_value.value %}
- {%-
- render 'faceted-filters-active',
- show_sorting: show_sorting,
- filter: filter,
+ <!-- Boost native filters (hidden by Approach B CSS, powers the filtering) -->
+ <div class="faceted-filters" data-faceted-filter>
+ {%
+ render "faceted-filters",
filters: collection.filters,
class_prefix: 'collection',
- clear_url: collection.url,
%}
- {% break %}
+ </div>
{% endif %}
- {% endfor %}
+ {% if show_sorting %}
+ <div class="collection-sorting__wrapper">
+ <label class="collection-filters__title label" for="sort-by">
+ {{- 'collections.collection.sort_title' | t -}}:
+ </label>
+
+ <div
+ class="
+ collection-dropdown
+ collection-dropdown--sort
+ select-wrapper
+ {% if collection.current_vendor %}
+ vendor-collection
+ {% endif %}
+ "
+ >
+ {% assign current_sort = collection.sort_by | default: collection.default_sort_by %}
+
+ <span class="selected-text"></span>
+
+ <select id="sort-by" class="select" data-collection-sorting>
+ {%- for option in collection.sort_options -%}
+ {% if current_sort == option.value %}
+ <option value="{{ option.value }}" selected="selected">{{ option.name }}</option>
+ {% else %}
+ <option value="{{ option.value }}">{{ option.name }}</option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ {% endif %}
+ </div>
{% endif %}
</div>
- {% endif %}
-
- <!-- Full Collection Toolbar: Sort + Grid Density Slider -->
- {% include 'collection-toolbar' %}
- <div
- class="collection-products rows-of-{{ section.settings.products_per_row }} grid-cols-3"
- data-collection-grid
- {% if use_masonry %}data-masonry-grid{% endif %}
- >
- {%- if use_masonry -%}
- <div class="product-grid-masonry-sizer" data-masonry-sizer></div>
- {%- endif -%}
-
- {%- if collection.handle == 'all' and collection.all_vendors.size == 0 and collection.all_types.size == 0 -%}
- {%- for i in (1..section.settings.products_per_row) -%}
- {%- capture productImage -%}
- {%- cycle 'product-1', 'product-2', 'product-3' -%}
- {%- endcapture -%}
- {%- assign image = productImage | placeholder_svg_tag: 'placeholder-svg' -%}
-
- {%- render 'home-onboard-product', image: image -%}
- {%- endfor -%}
- {%- else -%}
- {% for product in collection.products %}
- {%
- render 'product-list-item',
- product: product,
- %}
- {% else %}
- {% capture continueLink %}
- <a href="{{ routes.all_products_collection_url }}">{{ 'collections.collection.continue_link' | t }}</a>
- {% endcapture %}
- <p class="empty">{{ 'collections.collection.empty_html' | t: continue_link: continueLink }}</p>
+ {% if show_filters and collection.filters.size > 0 %}
+ {% for filter in collection.filters %}
+ {% if filter.active_values.size > 0 or filter.min_value.value or filter.max_value.value %}
+ {%-
+ render 'faceted-filters-active',
+ show_sorting: show_sorting,
+ filter: filter,
+ filters: collection.filters,
+ class_prefix: 'collection',
+ clear_url: collection.url,
+ %}
+ {% break %}
+ {% endif %}
{% endfor %}
- {%- endif -%}
+ {% endif %}
</div>
- </section>
+ {% endif %}
+
+ <!-- Full Collection Toolbar: Sort + Grid Density Slider -->
+ {% include 'collection-toolbar' %}
+
+ <div
+ class="collection-products rows-of-{{ section.settings.products_per_row }} grid-cols-3"
+ data-collection-grid
+ {% if use_masonry %}data-masonry-grid{% endif %}
+ >
+ {%- if use_masonry -%}
+ <div class="product-grid-masonry-sizer" data-masonry-sizer></div>
+ {%- endif -%}
- {%
- render 'pagination',
- paginate: paginate,
- %}
- </div>
- <!-- END INFINITE SCROLL WRAPPER -->
+ {%- if collection.handle == 'all' and collection.all_vendors.size == 0 and collection.all_types.size == 0 -%}
+ {%- for i in (1..section.settings.products_per_row) -%}
+ {%- capture productImage -%}
+ {%- cycle 'product-1', 'product-2', 'product-3' -%}
+ {%- endcapture -%}
+ {%- assign image = productImage | placeholder_svg_tag: 'placeholder-svg' -%}
+ {%- render 'home-onboard-product', image: image -%}
+ {%- endfor -%}
+ {%- else -%}
+ {% for product in collection.products %}
+ {%
+ render 'product-list-item',
+ product: product,
+ %}
+ {% else %}
+ {% capture continueLink %}
+ <a href="{{ routes.all_products_collection_url }}">{{ 'collections.collection.continue_link' | t }}</a>
+ {% endcapture %}
+ <p class="empty">{{ 'collections.collection.empty_html' | t: continue_link: continueLink }}</p>
+ {% endfor %}
+ {%- endif -%}
+ </div>
+ </section>
+
+ <!-- Infinite scroll sentinel (replaces pagination) -->
+ {% if paginate.next %}
+ <div id="dw-scroll-sentinel" style="padding:20px;text-align:center;color:#999;font-size:12px;margin-top:40px;" data-next-page="{{ paginate.next.page }}">
+ <span id="dw-loading-status">Loading more products…</span>
+ </div>
+ {% endif %}
{% endpaginate %}
</div>
+<script>
+(function() {
+ var grid = document.querySelector('[data-collection-grid]');
+ var sentinel = document.getElementById('dw-scroll-sentinel');
+ if (!grid || !sentinel) return;
+
+ var currentPage = {{ paginate.current_page }};
+ var hasMore = !!sentinel;
+ var isLoading = false;
+
+ var observer = new IntersectionObserver(function(entries) {
+ entries.forEach(function(e) {
+ if (e.isIntersecting && hasMore && !isLoading) {
+ loadNextPage();
+ }
+ });
+ }, { rootMargin: '600px' });
+
+ observer.observe(sentinel);
+
+ function loadNextPage() {
+ if (isLoading || !hasMore) return;
+ isLoading = true;
+
+ var nextPage = currentPage + 1;
+ var url = new URL(window.location.href);
+ url.searchParams.set('page', nextPage);
+
+ fetch(url.toString())
+ .then(function(r) { return r.text(); })
+ .then(function(html) {
+ var p = new DOMParser();
+ var doc = p.parseFromString(html, 'text/html');
+ var nextGrid = doc.querySelector('[data-collection-grid]');
+
+ if (!nextGrid) {
+ hasMore = false;
+ document.getElementById('dw-loading-status').textContent = 'No more products';
+ return;
+ }
+
+ var items = [];
+ nextGrid.querySelectorAll('[class*="product-list-item"]').forEach(function(item) {
+ items.push(item);
+ });
+
+ if (items.length === 0) {
+ hasMore = false;
+ document.getElementById('dw-loading-status').textContent = 'All products loaded';
+ return;
+ }
+
+ items.forEach(function(item) {
+ grid.appendChild(item.cloneNode(true));
+ });
+
+ currentPage = nextPage;
+
+ var nextSentinel = doc.getElementById('dw-scroll-sentinel');
+ if (!nextSentinel) {
+ hasMore = false;
+ document.getElementById('dw-loading-status').textContent = 'All products loaded';
+ }
+
+ isLoading = false;
+ })
+ .catch(function(e) {
+ console.error('Load error:', e);
+ document.getElementById('dw-loading-status').textContent = 'Error loading more';
+ isLoading = false;
+ });
+ }
+})();
+</script>
+
<script src="{{ 'collection-grid-density.js' | asset_url }}" defer></script>
{% schema %}
@@ -265,4 +333,4 @@
]
}
-{% endschema %}
+{% endschema %}
\ No newline at end of file
diff --git a/shopify/theme-files/snippets/dw-boost-overrides.liquid b/shopify/theme-files/snippets/dw-boost-overrides.liquid
index df7ec126..ec14bd07 100644
--- a/shopify/theme-files/snippets/dw-boost-overrides.liquid
+++ b/shopify/theme-files/snippets/dw-boost-overrides.liquid
@@ -36,9 +36,8 @@ body.dw-filters-collapsed .boost-sd__product-list[class*="grid--"]{grid-template
.dw-filter-toggle:hover{background:#f5f5f5}
.dw-filter-toggle svg{width:14px;height:14px}
-/* (removed 2026-06-23) dead guard `.shopify-section > .dw-grid-slider{display:none !important}`
- hid the ONLY slider site-wide — it's injected into the Boost toolbar row which is a direct
- child of .shopify-section. JS dedup loop already hides stray sliders. DTD verdict A. */
+/* Hide static grid slider from main section — dynamic one is injected into Boost toolbar */
+.shopify-section > .dw-grid-slider{display:none !important}
/* Hide old dw-gc grid control — replaced by toolbar grid slider */
.dw-gc{display:none !important}
diff --git a/shopify/tres-tintas-desc-backups/_done.ledger b/shopify/tres-tintas-desc-backups/_done.ledger
index 83cd648d..e69de29b 100644
--- a/shopify/tres-tintas-desc-backups/_done.ledger
+++ b/shopify/tres-tintas-desc-backups/_done.ledger
@@ -1,1173 +0,0 @@
-7433013624883
-7433013690419
-7433013821491
-7433014050867
-7433014149171
-7433014313011
-7433014345779
-7433014607923
-7433014640691
-7433014673459
-7433014706227
-7433014706227
-7433014738995
-7433014738995
-7433014771763
-7433014804531
-7433014837299
-7433014771763
-7433014804531
-7433014870067
-7433014837299
-7433014902835
-7433014870067
-7433014902835
-7433014935603
-7433014935603
-7433014968371
-7433014968371
-7433015001139
-7433015001139
-7433015066675
-7433015066675
-7433015099443
-7433015099443
-7433015132211
-7433015132211
-7433015164979
-7433015164979
-7433015230515
-7433015230515
-7433015263283
-7433015263283
-7433015296051
-7433015296051
-7433015328819
-7433015328819
-7433015361587
-7433015361587
-7433015427123
-7433015427123
-7433015492659
-7433015492659
-7433015525427
-7433015525427
-7433015558195
-7433015558195
-7433015623731
-7433015623731
-7433015656499
-7433015656499
-7433015689267
-7433015689267
-7863632592947
-7863632592947
-7863632625715
-7863632658483
-7863632625715
-7863632658483
-7863632691251
-7863632691251
-7863632724019
-7863632724019
-7863632887859
-7863632887859
-7863632953395
-7863632953395
-7863632986163
-7863632986163
-7863633018931
-7863633018931
-7863633051699
-7863633051699
-7863633084467
-7863633084467
-7863633117235
-7863633117235
-7863633150003
-7863633150003
-7863633215539
-7863633215539
-7863633248307
-7863633248307
-7863633281075
-7863633281075
-7863633313843
-7863633313843
-7863633379379
-7863633379379
-7863633412147
-7863633412147
-7863633444915
-7863633477683
-7863633510451
-7863633543219
-7863633575987
-7863633608755
-7863633641523
-7863633674291
-7863633707059
-7863633739827
-7863633772595
-7863633444915
-7863633805363
-7863633477683
-7863633870899
-7863633510451
-7863633903667
-7863633543219
-7863633936435
-7863633575987
-7863633608755
-7863633969203
-7863633641523
-7863634001971
-7863633674291
-7863634034739
-7863634067507
-7863634100275
-7863634133043
-7863634165811
-7863634198579
-7863634231347
-7863634329651
-7863634362419
-7863634395187
-7863634427955
-7863634460723
-7863634493491
-7863634526259
-7863634559027
-7863634591795
-7863634624563
-7863634657331
-7863634722867
-7863634755635
-7863634788403
-7863634821171
-7863634853939
-7863634886707
-7863634919475
-7863634952243
-7863633707059
-7863634985011
-7863633739827
-7863635017779
-7863633772595
-7863633805363
-7863635050547
-7863633870899
-7863635083315
-7863633903667
-7863635116083
-7863633936435
-7863635148851
-7863635181619
-7863633969203
-7863635214387
-7863634001971
-7863634034739
-7863635247155
-7863634067507
-7863635279923
-7863634100275
-7863634133043
-7863635312691
-7863634165811
-7863635345459
-7863634198579
-7863635378227
-7863634231347
-7863634329651
-7863635410995
-7863634362419
-7863635443763
-7863634395187
-7863635476531
-7863634427955
-7863634460723
-7863635509299
-7863634493491
-7863635574835
-7863634526259
-7863634559027
-7863635607603
-7863634591795
-7863635640371
-7863634624563
-7863634657331
-7863635673139
-7863634722867
-7863635705907
-7863634755635
-7863635738675
-7863634788403
-7863635771443
-7863634821171
-7863634853939
-7863635804211
-7863634886707
-7863634919475
-7863634952243
-7863634985011
-7863635017779
-7863635050547
-7863635083315
-7863635116083
-7863635148851
-7863635181619
-7863635214387
-7863635247155
-7863635279923
-7863635312691
-7863635345459
-7863635378227
-7863635410995
-7863635836979
-7863635443763
-7863635869747
-7863635476531
-7863635935283
-7863635509299
-7863635574835
-7863635607603
-7863635968051
-7863635640371
-7863636000819
-7863635673139
-7863635705907
-7863636033587
-7863635738675
-7863636066355
-7863635771443
-7863636099123
-7863635804211
-7863636131891
-7863635836979
-7863635869747
-7863636164659
-7863635935283
-7863636197427
-7863635968051
-7863636230195
-7863636000819
-7863636033587
-7863636262963
-7863636066355
-7863636295731
-7863636099123
-7863636328499
-7863636131891
-7863636164659
-7863636361267
-7863636197427
-7863636426803
-7863636230195
-7863636262963
-7863636459571
-7863636295731
-7863636492339
-7863636328499
-7863636361267
-7863636525107
-7863636426803
-7863636557875
-7863636459571
-7863636590643
-7863636492339
-7863636656179
-7863636525107
-7863636557875
-7863636688947
-7863636590643
-7863636721715
-7863636656179
-7863636754483
-7863636688947
-7863636787251
-7863636721715
-7863636754483
-7863636820019
-7863636787251
-7863636852787
-7863636820019
-7863636852787
-7863636885555
-7863636885555
-7863636918323
-7863636918323
-7863636951091
-7863636951091
-7863636983859
-7863636983859
-7863637016627
-7863637016627
-7863637049395
-7863637049395
-7863637082163
-7863637114931
-7863637147699
-7863637180467
-7863637213235
-7863637278771
-7863637377075
-7863637475379
-7863637540915
-7863637639219
-7863637671987
-7863637737523
-7863637770291
-7863637803059
-7863637835827
-7863637868595
-7863637901363
-7863637934131
-7863637966899
-7863637999667
-7863638032435
-7863638065203
-7863638097971
-7863637114931
-7863638130739
-7863637147699
-7863638163507
-7863638229043
-7863638261811
-7863637180467
-7863638294579
-7863637213235
-7863637278771
-7863637377075
-7863638327347
-7863637475379
-7863638360115
-7863637540915
-7863638392883
-7863637639219
-7863638458419
-7863637671987
-7863638491187
-7863637737523
-7863638523955
-7863637770291
-7863638556723
-7863637803059
-7863638589491
-7863637835827
-7863638622259
-7863637868595
-7863638655027
-7863637901363
-7863638687795
-7863637934131
-7863638720563
-7863637966899
-7863638753331
-7863637999667
-7863638786099
-7863638032435
-7863638818867
-7863638065203
-7863638097971
-7863638851635
-7863638130739
-7863638884403
-7863638163507
-7863638917171
-7863638229043
-7863638949939
-7863638261811
-7863638982707
-7863638294579
-7863638327347
-7863639015475
-7863638360115
-7863639048243
-7863638392883
-7863639081011
-7863638458419
-7863639146547
-7863638491187
-7863639179315
-7863638523955
-7863639212083
-7863638556723
-7863639244851
-7863638589491
-7863638622259
-7863639310387
-7863638655027
-7863639343155
-7863638687795
-7863639375923
-7863638720563
-7863638753331
-7863639408691
-7863638786099
-7863639441459
-7863638818867
-7863639474227
-7863638851635
-7863639506995
-7863638884403
-7863638917171
-7863639539763
-7863638949939
-7863638982707
-7863639015475
-7863639572531
-7863639048243
-7863639605299
-7863639081011
-7863639638067
-7863639146547
-7863639179315
-7863639670835
-7863639212083
-7863639703603
-7863639244851
-7863639736371
-7863639310387
-7863639343155
-7863639375923
-7863639769139
-7863639408691
-7863639801907
-7863639834675
-7863639932979
-7863639441459
-7863639965747
-7863639474227
-7863639506995
-7863639998515
-7863639539763
-7863640064051
-7863639572531
-7863640096819
-7863639605299
-7863640129587
-7863639638067
-7863639670835
-7863640162355
-7863639703603
-7863640195123
-7863639736371
-7863639769139
-7863640227891
-7863639801907
-7863640260659
-7863639834675
-7863640293427
-7863639932979
-7863639965747
-7863640326195
-7863639998515
-7863640358963
-7863640064051
-7863640424499
-7863640096819
-7863640129587
-7863640490035
-7863640162355
-7863640522803
-7863640555571
-7863640195123
-7863640588339
-7863640227891
-7863640260659
-7863640621107
-7863640293427
-7863640653875
-7863640326195
-7863640358963
-7863640686643
-7863640424499
-7863640719411
-7863640490035
-7863640883251
-7863640522803
-7863640555571
-7863640916019
-7863640588339
-7863640948787
-7863640621107
-7863640981555
-7863640653875
-7863640686643
-7863641047091
-7863640719411
-7863641112627
-7863640883251
-7863641145395
-7863640916019
-7863641178163
-7863640948787
-7863640981555
-7863641210931
-7863641047091
-7863641243699
-7863641112627
-7863641145395
-7863641178163
-7863641210931
-7863641276467
-7863641243699
-7863641309235
-7863641276467
-7863641309235
-7863641342003
-7863641342003
-7863641374771
-7863641374771
-7863641407539
-7863641407539
-7863641440307
-7863641440307
-7863641505843
-7863641505843
-7863641538611
-7863641538611
-7863641571379
-7863641571379
-7863641604147
-7863641604147
-7863641669683
-7863641669683
-7866122666035
-7866122666035
-7866122698803
-7866122698803
-7866122731571
-7866122731571
-7866122797107
-7866122797107
-7866122862643
-7866122862643
-7866122928179
-7866122928179
-7866122960947
-7866122960947
-7866122993715
-7866122993715
-7866123059251
-7866123059251
-7866123255859
-7866123255859
-7866123288627
-7866123288627
-7866123321395
-7866123321395
-7866123354163
-7866123354163
-7866123386931
-7866123386931
-7866123550771
-7866123550771
-7866123583539
-7866123583539
-7866123616307
-7866123616307
-7866123649075
-7866123649075
-7866123681843
-7866123681843
-7866123714611
-7866123714611
-7866123747379
-7866123747379
-7866123780147
-7866123780147
-7866123845683
-7866123878451
-7866123911219
-7866123845683
-7866123943987
-7866123878451
-7866123911219
-7866123976755
-7866123943987
-7866124009523
-7866123976755
-7866124009523
-7866124075059
-7866124075059
-7866124140595
-7866124140595
-7866124173363
-7866124173363
-7866124206131
-7866124206131
-7866124271667
-7866124271667
-7866124337203
-7866124337203
-7866124402739
-7866124402739
-7866124435507
-7866124435507
-7866124468275
-7866124468275
-7866124501043
-7866124501043
-7866124533811
-7866124533811
-7866124599347
-7866124599347
-7866124632115
-7866124632115
-7866124664883
-7866124664883
-7866124697651
-7866124697651
-7866124730419
-7866124730419
-7866124763187
-7866124763187
-7866124795955
-7866124795955
-7866124861491
-7866124861491
-7866124927027
-7866124927027
-7866124959795
-7866124959795
-7866124992563
-7866124992563
-7866125025331
-7866125025331
-7866347454515
-7866347454515
-7866347487283
-7866347487283
-7866347520051
-7866347520051
-7866347552819
-7866347552819
-7866347585587
-7866347585587
-7866347618355
-7866347618355
-7866347651123
-7866347651123
-7866347683891
-7866347683891
-7866347716659
-7866347716659
-7866347749427
-7866347749427
-7866347782195
-7866347782195
-7866347814963
-7866347814963
-7866347847731
-7866347847731
-7866347880499
-7866347880499
-7866347913267
-7866347913267
-7866347946035
-7866347946035
-7866348011571
-7866348011571
-7866348044339
-7866348044339
-7866348077107
-7866348077107
-7866348109875
-7866348109875
-7866348142643
-7866348142643
-7866348175411
-7866348175411
-7866348208179
-7866348208179
-7866348240947
-7866348240947
-7866348339251
-7866348339251
-7866348437555
-7866348437555
-7866348470323
-7866348470323
-7866348503091
-7866348503091
-7866348535859
-7866348535859
-7866348568627
-7866348568627
-7866348601395
-7866348601395
-7866348634163
-7866348634163
-7866348666931
-7866348666931
-7866348699699
-7866348699699
-7866348732467
-7866348732467
-7866348765235
-7866348765235
-7866348798003
-7866348798003
-7866348830771
-7866348830771
-7866348863539
-7866348863539
-7866348929075
-7866348929075
-7866348961843
-7866348961843
-7866348994611
-7866348994611
-7866349027379
-7866349027379
-7866349060147
-7866349060147
-7866349092915
-7866349092915
-7866349125683
-7866349125683
-7866349158451
-7866349158451
-7866349191219
-7866349191219
-7866349223987
-7866349223987
-7866349256755
-7866349256755
-7866349289523
-7866349289523
-7866349322291
-7866349322291
-7866349355059
-7866349355059
-7866349387827
-7866349387827
-7866349420595
-7866349420595
-7866349453363
-7866349453363
-7866349486131
-7866349486131
-7866349518899
-7866349518899
-7866349551667
-7866349551667
-7866349584435
-7866349584435
-7866349617203
-7866349617203
-7866349649971
-7866349649971
-7866349682739
-7866349682739
-7866349715507
-7866349715507
-7866349781043
-7866349781043
-7866349813811
-7866349813811
-7866349846579
-7866349846579
-7866349879347
-7866349879347
-7866349912115
-7866349912115
-7866349944883
-7866349944883
-7866349977651
-7866349977651
-7866350010419
-7866350010419
-7866350043187
-7866350043187
-7866350075955
-7866350075955
-7866350108723
-7866350108723
-7866350141491
-7866350141491
-7866350174259
-7866350174259
-7866350207027
-7866350207027
-7866350239795
-7866350239795
-7866350272563
-7866350272563
-7866350305331
-7866350305331
-7866350338099
-7866350338099
-7866350370867
-7866350370867
-7866350403635
-7866350403635
-7866350436403
-7866350436403
-7866350469171
-7866350469171
-7866350501939
-7866350501939
-7866350534707
-7866350534707
-7866350567475
-7866350567475
-7866350600243
-7866350600243
-7866350633011
-7866350633011
-7866350665779
-7866350665779
-7866350698547
-7866350698547
-7866350731315
-7866350731315
-7866350764083
-7866350764083
-7866350796851
-7866350796851
-7866350829619
-7866350829619
-7866350862387
-7866350862387
-7866350895155
-7866350895155
-7866350927923
-7866350927923
-7866350960691
-7866350960691
-7866350993459
-7866350993459
-7866351026227
-7866351026227
-7866351058995
-7866351058995
-7866351124531
-7866351124531
-7866351157299
-7866351157299
-7866351190067
-7866351190067
-7866351222835
-7866351222835
-7866351255603
-7866351255603
-7866351616051
-7866351616051
-7866352074803
-7866352074803
-7866352566323
-7866352566323
-7866352664627
-7866352664627
-7866352730163
-7866352730163
-7866352762931
-7866352762931
-7866352795699
-7866352795699
-7866352828467
-7866352828467
-7866352861235
-7866352861235
-7866352894003
-7866352894003
-7866352926771
-7866352926771
-7866352959539
-7866352959539
-7866352992307
-7866352992307
-7866353057843
-7866353057843
-7866353090611
-7866353090611
-7866353123379
-7866353123379
-7866353156147
-7866353156147
-7866353188915
-7866353188915
-7866353221683
-7866353221683
-7866353254451
-7866353254451
-7866353287219
-7866353287219
-7866353319987
-7866353352755
-7866353319987
-7866353385523
-7866353352755
-7866353418291
-7866353385523
-7866353451059
-7866353418291
-7866353451059
-7866353483827
-7866353483827
-7866353516595
-7866353516595
-7866353549363
-7866353549363
-7866353582131
-7866353582131
-7866353614899
-7866353614899
-7866353647667
-7866353647667
-7866353680435
-7866353680435
-7866353713203
-7866353713203
-7866353745971
-7866353745971
-7866353778739
-7866353778739
-7866353811507
-7866353811507
-7866353844275
-7866353844275
-7866353909811
-7866353909811
-7866353942579
-7866353942579
-7866353975347
-7866353975347
-7866354008115
-7866354008115
-7866354040883
-7866354040883
-7866354073651
-7866354073651
-7866354106419
-7866354106419
-7866354139187
-7866354139187
-7866354171955
-7866354171955
-7866354237491
-7866354237491
-7866354270259
-7866354270259
-7866354303027
-7866354303027
-7866354335795
-7866354335795
-7866354368563
-7866354368563
-7866354401331
-7866354401331
-7866354434099
-7866354434099
-7866354466867
-7866354466867
-7866354499635
-7866354499635
-7866354532403
-7866354532403
-7866354565171
-7866354565171
-7866354597939
-7866354597939
-7866354630707
-7866354630707
-7866354663475
-7866354663475
-7866354696243
-7866354696243
-7866354729011
-7866354729011
-7866354761779
-7866354761779
-7866354794547
-7866354794547
-7866354827315
-7866354827315
-7866354860083
-7866354860083
-7866354892851
-7866354892851
-7866354925619
-7866354925619
-7866354958387
-7866354958387
-7866354991155
-7866354991155
-7866355023923
-7866355023923
-7866355056691
-7866355056691
-7866355089459
-7866355089459
-7866355122227
-7866355122227
-7866355154995
-7866355154995
-7866355220531
-7866355220531
-7866355286067
-7866355286067
-7866355318835
-7866355318835
-7866355351603
-7866355351603
-7866355384371
-7866355384371
-7866355417139
-7866355417139
-7866355449907
-7866355449907
-7866355482675
-7866355482675
-7866355515443
-7866355515443
-7866355548211
-7866355548211
-7866355580979
-7866355580979
-7866355613747
-7866355613747
-7866355646515
-7866355679283
-7866355646515
-7866355712051
-7866355679283
-7866355712051
-7866355744819
-7866355744819
-7866355777587
-7866355777587
-7866355810355
-7866355810355
-7866355843123
-7866355875891
-7866355843123
-7866355875891
-7866355908659
-7866355908659
-7866355941427
-7866355941427
-7866355974195
-7866355974195
-7866356006963
-7866356006963
-7866356039731
-7866356039731
-7866356072499
-7866356072499
-7866356105267
-7866356105267
-7866356138035
-7866356138035
-7866356170803
-7866356170803
-7866356203571
-7866356203571
-7866356236339
-7866356236339
-7866356269107
-7866356269107
-7866356301875
-7866356301875
-7866356334643
-7866356334643
-7866356367411
-7866356367411
-7866356400179
-7866356400179
-7866356432947
-7866356432947
-7866356465715
-7866356465715
-7866356498483
-7866356498483
-7866356531251
-7866356531251
-7866356564019
-7866356564019
-7866356596787
-7866356596787
-7866356629555
-7866356629555
-7866356662323
-7866356662323
-7866356695091
-7866356695091
-7866356727859
-7866356727859
-7866356760627
-7866356760627
-7866356793395
-7866356793395
-7866356826163
-7866356826163
-7866356858931
-7866356858931
-7866356891699
-7866356891699
-7866356924467
-7866356924467
-7866356957235
-7866356957235
-7866356990003
-7866356990003
-7866357022771
-7866357022771
-7866357055539
-7866357055539
-7866357088307
-7866357088307
-7866357121075
-7866357121075
-7866357153843
-7866357153843
-7866357186611
-7866357186611
-7866357252147
-7866357252147
-7866357284915
-7866357284915
-7866357317683
-7866357317683
-7866357350451
-7866357350451
-7866357383219
-7866357383219
-7866357415987
-7866357415987
-7866357448755
-7866357448755
-7866357481523
-7866357481523
-7866357514291
-7866357514291
-7866357547059
-7866357547059
-7866357579827
-7866357579827
-7866357612595
-7866357612595
-7866357645363
-7866357645363
-7866357678131
-7866357678131
-7866357710899
-7866357710899
-7866357743667
-7866357743667
-7866357776435
-7866357776435
-7866357809203
-7866357809203
-7866357841971
-7866357841971
-7866357874739
-7866357874739
-7866357907507
-7866357907507
-7866357940275
-7866357940275
-7866357973043
-7866357973043
diff --git a/vendor-logos/_brands-page.html b/vendor-logos/_brands-page.html
index b80b3013..6211ed08 100644
--- a/vendor-logos/_brands-page.html
+++ b/vendor-logos/_brands-page.html
@@ -8,6 +8,6 @@
<div style="max-width:1400px;margin:0 auto;padding:20px 30px;position:relative;z-index:0;">
<h2 style="text-align:center;font-family:inherit;margin-bottom:20px;font-weight:300;letter-spacing:2px;font-size:22px;">OUR BRANDS & VENDORS</h2>
<p style="text-align:center;font-size:14px;color:#666;margin-bottom:24px;">67 curated brands — click to browse their collections</p>
-<div class="dw-brands-grid"><a href="/collections/1838-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="1838 Wallpapers"><img alt="1838 Wallpapers" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/1838-wallcoverings-shopify.png?v=1771978022" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/andrew-martin-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Andrew Martin"><img alt="Andrew Martin" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/andrew-martin-logo.png?v=1771983218" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/anna-french" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Anna French"><img alt="Anna French" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/anna-french.png?v=1771979259" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/anthology-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Anthology"><img alt="Anthology" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/anthology-logo-text.png?v=1771980967" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/architectural-fabrics" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Architectural Fabrics"><img alt="Architectural Fabrics" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/arc-com-digital-solutions.png?v=1771978027" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/armani-casa-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Armani Casa"><img alt="Armani Casa" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/armani-casa-logo.png?v=1771983137" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/arte" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Arte"><img alt="Arte" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/arte-specialty.png?v=1771980380" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/borastapeter-scandinavian-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Borastapeter"><img alt="Borastapeter" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/borastapeter_bf1482b7-cbb8-4aa1-bf5d-46fa08e5050b.png?v=1771983217" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/brewster-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Brewster"><img alt="Brewster" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/brewster.png?v=1771979280" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/brunschwig-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Brunschwig & Fils"><img alt="Brunschwig & Fils" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/brunschwig-fils.png?v=1771979287" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/carnegie-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Carnegie"><img alt="Carnegie" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/carnegie-fabrics.png?v=1771978190" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/china-seas-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="China Seas"><img alt="China Seas" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/china-seas.png?v=1771979293" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/christian-lacroix-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Christian Lacroix"><img alt="Christian Lacroix" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/christian-lacroix.png?v=1771979431" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/clarke-clarke" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Clarke And Clarke"><img alt="Clarke And Clarke" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/clarkeandclarke_480x480.png?v=1618201668" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/cole-and-son" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Cole & Son"><img alt="Cole & Son" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/cole-son.png?v=1771978045" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/colefax-and-fowler" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Colefax and Fowler"><img alt="Colefax and Fowler" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/colefax-and-fowler.png?v=1771978192" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/cowtan-tout-wallpaper-collection" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Cowtan & Tout"><img alt="Cowtan & Tout" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/colefax-and-fowler.png?v=1771978192" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/de-gournay-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="De Gournay"><img alt="De Gournay" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/de-gournay.png?v=1771978196" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/designers-guild-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Designers Guild"><img alt="Designers Guild" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/designers-guild.webp?v=1771978051" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/donghia-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Donghia"><img alt="Donghia" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/donghia.png?v=1771979300" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/elitis-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Elitis"><img alt="Elitis" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/elitis-panoramic_52925ba3-9927-41e1-8c2f-19d40c22439b.png?v=1771980902" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/fabricut-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Fabricut"><img alt="Fabricut" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fabricut-stroheim-shopify.jpg?v=1771978059" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/farrow-ball-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Farrow & Ball"><img alt="Farrow & Ball" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/farrow-ball_aec54a33-1f0f-41a9-a118-4ea526500af0.png?v=1771980733" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/fornasetti" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Fornasetti"><img alt="Fornasetti" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fornasetti.png?v=1771979307" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/franquemont-london" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Franquemont London"><img alt="Franquemont London" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/franquemont-london.png?v=1771981532" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/fromental-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Fromental"><img alt="Fromental" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fromental.png?v=1771983122" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/gaston-y-daniela" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Gaston y Daniela"><img alt="Gaston y Daniela" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gaston-y-daniela.png?v=1771979314" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/graham-and-brown-exclusive-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Graham & Brown"><img alt="Graham & Brown" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/graham-brown.png?v=1771978875" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/groundworks-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Groundworks"><img alt="Groundworks" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/groundworks-shopify_6e1e0b88-984c-4e64-bb0b-79d271a09823.png?v=1771983216" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/harlequin-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Harlequin"><img alt="Harlequin" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/harlequin.jpg?v=1771978074" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/hygge-and-west" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Hygge & West"><img alt="Hygge & West" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/hygge-west.png?v=1771978076" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/innovations-usa" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Innovations"><img alt="Innovations" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/innovations-shopify_ee5c39e5-8e74-4276-a814-21cfd2e88acb.png?v=1771980901" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/koroseal-wallpaper-collection" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Koroseal"><img alt="Koroseal" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/arbor-wood-wallcoverings.png?v=1771978024" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/kravet" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Kravet"><img alt="Kravet" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kravet-logo.png?v=1771983130" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/lee-jofa" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Lee Jofa"><img alt="Lee Jofa" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/lee-jofa_df3791bd-3d74-48a4-9cbe-fb6edeccf222.png?v=1771983214" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/maharam-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Maharam"><img alt="Maharam" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/maharam.png?v=1771978213" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/matthew-williamson-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Matthew Williamson"><img alt="Matthew Williamson" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/matthew-williamson.png?v=1771979329" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/maya-romanoff" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Maya Romanoff"><img alt="Maya Romanoff" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/maya-romanoff.png?v=1771979335" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mdc-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="MDC"><img alt="MDC" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mdc.png?v=1771979321" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/milton-and-king" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Milton & King"><img alt="Milton & King" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/milton-king.png?v=1771978215" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mind-the-gap" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Mind the Gap"><img alt="Mind the Gap" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mind-the-gap.png?v=1771978088" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/missoni-home" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Missoni"><img alt="Missoni" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/missoni-home_e5019ea8-6552-4a79-85ff-26a2023bb102.png?v=1771983075" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mr-perswall-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Mr Perswall"><img alt="Mr Perswall" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mr-perswall_e644a848-daaa-4243-8e70-e41cdf82272e.png?v=1771983092" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mulberry-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Mulberry"><img alt="Mulberry" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mulberry-home.png?v=1771978605" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/nina-campbell-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Nina Campbell"><img alt="Nina Campbell" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina-campbell-shopify.jpg?v=1771978096" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/newmor-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Newmor"><img alt="Newmor" loading="lazy" src="https://newmor.com/wp-content/themes/newmor/assets/images/newmor-logo-1.svg" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/nobilis-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Nobilis"><img alt="Nobilis" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nobilis.png?v=1771978217" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/newmor-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Newmor"><img alt="Newmor" loading="lazy" src="https://newmor.com/wp-content/themes/newmor/assets/images/newmor-logo-1.svg" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/osborne-little-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Osborne & Little"><img alt="Osborne & Little" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/osborne-little-shopify.png?v=1771978100" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/phillip-jeffries-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Phillip Jeffries"><img alt="Phillip Jeffries" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/phillip-jeffries.png?v=1771979005" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/pierre-frey-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Pierre Frey"><img alt="Pierre Frey" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/pierre-frey.png?v=1771978223" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/ralph-lauren-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Ralph Lauren"><img alt="Ralph Lauren" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ralph-lauren_175c0d4f-f904-4248-917e-75fbb18a4201.png?v=1771980405" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/rebel-walls-murals" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Rebel Walls"><img alt="Rebel Walls" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/rebel-walls_4dc95a13-4288-48af-a212-4be25532c715.png?v=1771982930" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/roberto-cavalli-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Roberto Cavalli"><img alt="Roberto Cavalli" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/roberto-cavalli_766041a9-54d7-4bb8-b29c-8c0705cb8c88.png?v=1771983213" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/romo-europe-wallpapaper-collections" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Romo"><img alt="Romo" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/romo.png?v=1771978225" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/sanderson-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Sanderson"><img alt="Sanderson" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sanderson-logo-text.png?v=1771980965" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/schumacher-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Schumacher"><img alt="Schumacher" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/schumacher-shopify.png?v=1771978111" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/stout-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Stout"><img alt="Stout" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sb-logo2_480x480.gif?v=1618201668" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/stroheim-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Stroheim"><img alt="Stroheim" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fabricut-stroheim-shopify.jpg?v=1771978059" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/the-graduate-collection" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="The Graduate Collection"><img alt="The Graduate Collection" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/graduate-collection-shopify.jpg?v=1771978067" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/thibaut-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Thibaut"><img alt="Thibaut" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/thibaut.png?v=1771978235" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/threads-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Threads"><img alt="Threads" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/threads.png?v=1771978824" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/versace-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Versace"><img alt="Versace" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/versace-home-shopify.png?v=1771978118" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/wolf-gordon-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Wolf Gordon"><img alt="Wolf Gordon" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wolf-gordon.png?v=1771978124" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/york-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="York"><img alt="York" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/york-wallcoverings.png?v=1771978126" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/zoffany-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Zoffany"><img alt="Zoffany" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/zoffany.png?v=1771978814" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/zuber-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Zuber"><img alt="Zuber" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/zuber.png?v=1771978131" style="max-width:100%;max-height:160px;object-fit:contain;"/></a>
+<div class="dw-brands-grid"><a href="/collections/1838-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="1838 Wallpapers"><img alt="1838 Wallpapers" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/1838-wallcoverings-shopify.png?v=1771978022" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/andrew-martin-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Andrew Martin"><img alt="Andrew Martin" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/andrew-martin-logo.png?v=1771983218" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/anna-french" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Anna French"><img alt="Anna French" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/anna-french.png?v=1771979259" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/anthology-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Anthology"><img alt="Anthology" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/anthology-logo-text.png?v=1771980967" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/architectural-fabrics" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Architectural Fabrics"><img alt="Architectural Fabrics" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/arc-com-digital-solutions.png?v=1771978027" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/armani-casa-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Armani Casa"><img alt="Armani Casa" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/armani-casa-logo.png?v=1771983137" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/arte" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Arte"><img alt="Arte" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/arte-specialty.png?v=1771980380" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/borastapeter-scandinavian-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Borastapeter"><img alt="Borastapeter" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/borastapeter_bf1482b7-cbb8-4aa1-bf5d-46fa08e5050b.png?v=1771983217" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/brewster-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Brewster"><img alt="Brewster" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/brewster.png?v=1771979280" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/brunschwig-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Brunschwig & Fils"><img alt="Brunschwig & Fils" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/brunschwig-fils.png?v=1771979287" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/carnegie-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Carnegie"><img alt="Carnegie" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/carnegie-fabrics.png?v=1771978190" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/china-seas-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="China Seas"><img alt="China Seas" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/china-seas.png?v=1771979293" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/christian-lacroix-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Christian Lacroix"><img alt="Christian Lacroix" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/christian-lacroix.png?v=1771979431" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/clarke-clarke" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Clarke And Clarke"><img alt="Clarke And Clarke" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/clarkeandclarke_480x480.png?v=1618201668" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/cole-and-son" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Cole & Son"><img alt="Cole & Son" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/cole-son.png?v=1771978045" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/colefax-and-fowler" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Colefax and Fowler"><img alt="Colefax and Fowler" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/colefax-and-fowler.png?v=1771978192" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/cowtan-tout-wallpaper-collection" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Cowtan & Tout"><img alt="Cowtan & Tout" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/colefax-and-fowler.png?v=1771978192" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/de-gournay-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="De Gournay"><img alt="De Gournay" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/de-gournay.png?v=1771978196" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/designers-guild-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Designers Guild"><img alt="Designers Guild" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/designers-guild.webp?v=1771978051" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/donghia-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Donghia"><img alt="Donghia" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/donghia.png?v=1771979300" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/elitis-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Elitis"><img alt="Elitis" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/elitis-panoramic_52925ba3-9927-41e1-8c2f-19d40c22439b.png?v=1771980902" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/fabricut-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Fabricut"><img alt="Fabricut" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fabricut-stroheim-shopify.jpg?v=1771978059" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/farrow-ball-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Farrow & Ball"><img alt="Farrow & Ball" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/farrow-ball_aec54a33-1f0f-41a9-a118-4ea526500af0.png?v=1771980733" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/fornasetti" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Fornasetti"><img alt="Fornasetti" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fornasetti.png?v=1771979307" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/franquemont-london" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Franquemont London"><img alt="Franquemont London" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/franquemont-london.png?v=1771981532" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/fromental-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Fromental"><img alt="Fromental" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fromental.png?v=1771983122" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/gaston-y-daniela" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Gaston y Daniela"><img alt="Gaston y Daniela" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gaston-y-daniela.png?v=1771979314" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/graham-and-brown-exclusive-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Graham & Brown"><img alt="Graham & Brown" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/graham-brown.png?v=1771978875" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/groundworks-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Groundworks"><img alt="Groundworks" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/groundworks-shopify_6e1e0b88-984c-4e64-bb0b-79d271a09823.png?v=1771983216" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/harlequin-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Harlequin"><img alt="Harlequin" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/harlequin.jpg?v=1771978074" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/hygge-and-west" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Hygge & West"><img alt="Hygge & West" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/hygge-west.png?v=1771978076" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/innovations-usa" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Innovations"><img alt="Innovations" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/innovations-shopify_ee5c39e5-8e74-4276-a814-21cfd2e88acb.png?v=1771980901" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/koroseal-wallpaper-collection" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Koroseal"><img alt="Koroseal" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/arbor-wood-wallcoverings.png?v=1771978024" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/kravet" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Kravet"><img alt="Kravet" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kravet-logo.png?v=1771983130" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/lee-jofa" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Lee Jofa"><img alt="Lee Jofa" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/lee-jofa_df3791bd-3d74-48a4-9cbe-fb6edeccf222.png?v=1771983214" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/maharam-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Maharam"><img alt="Maharam" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/maharam.png?v=1771978213" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/matthew-williamson-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Matthew Williamson"><img alt="Matthew Williamson" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/matthew-williamson.png?v=1771979329" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/maya-romanoff" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Maya Romanoff"><img alt="Maya Romanoff" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/maya-romanoff.png?v=1771979335" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mdc-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="MDC"><img alt="MDC" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mdc.png?v=1771979321" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/milton-and-king" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Milton & King"><img alt="Milton & King" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/milton-king.png?v=1771978215" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mind-the-gap" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Mind the Gap"><img alt="Mind the Gap" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mind-the-gap.png?v=1771978088" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/missoni-home" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Missoni"><img alt="Missoni" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/missoni-home_e5019ea8-6552-4a79-85ff-26a2023bb102.png?v=1771983075" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mr-perswall-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Mr Perswall"><img alt="Mr Perswall" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mr-perswall_e644a848-daaa-4243-8e70-e41cdf82272e.png?v=1771983092" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/mulberry-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Mulberry"><img alt="Mulberry" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mulberry-home.png?v=1771978605" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/nina-campbell-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Nina Campbell"><img alt="Nina Campbell" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina-campbell-shopify.jpg?v=1771978096" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/newmor-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Newmor"><img alt="Newmor" loading="lazy" src="https://newmor.com/wp-content/themes/newmor/assets/images/newmor-logo-1.svg" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/nobilis-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Nobilis"><img alt="Nobilis" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nobilis.png?v=1771978217" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/osborne-little-wallpapers" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Osborne & Little"><img alt="Osborne & Little" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/osborne-little-shopify.png?v=1771978100" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/phillip-jeffries-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Phillip Jeffries"><img alt="Phillip Jeffries" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/phillip-jeffries.png?v=1771979005" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/pierre-frey-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Pierre Frey"><img alt="Pierre Frey" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/pierre-frey.png?v=1771978223" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/quadrille-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Quadrille"><img alt="Quadrille" loading="lazy" src="https://quadrillefabrics.s3.us-east-2.amazonaws.com/Logos/Quadrille-logo.webp" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/ralph-lauren-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Ralph Lauren"><img alt="Ralph Lauren" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ralph-lauren_175c0d4f-f904-4248-917e-75fbb18a4201.png?v=1771980405" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/rebel-walls-murals" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Rebel Walls"><img alt="Rebel Walls" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/rebel-walls_4dc95a13-4288-48af-a212-4be25532c715.png?v=1771982930" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/roberto-cavalli-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Roberto Cavalli"><img alt="Roberto Cavalli" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/roberto-cavalli_766041a9-54d7-4bb8-b29c-8c0705cb8c88.png?v=1771983213" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/romo-europe-wallpapaper-collections" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Romo"><img alt="Romo" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/romo.png?v=1771978225" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/sanderson-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Sanderson"><img alt="Sanderson" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sanderson-logo-text.png?v=1771980965" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/schumacher-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Schumacher"><img alt="Schumacher" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/schumacher-shopify.png?v=1771978111" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/stout-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Stout"><img alt="Stout" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sb-logo2_480x480.gif?v=1618201668" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/stroheim-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Stroheim"><img alt="Stroheim" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fabricut-stroheim-shopify.jpg?v=1771978059" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/the-graduate-collection" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="The Graduate Collection"><img alt="The Graduate Collection" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/graduate-collection-shopify.jpg?v=1771978067" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/thibaut-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Thibaut"><img alt="Thibaut" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/thibaut.png?v=1771978235" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/threads-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Threads"><img alt="Threads" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/threads.png?v=1771978824" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/versace-wallpaper" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Versace"><img alt="Versace" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/versace-home-shopify.png?v=1771978118" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/wolf-gordon-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Wolf Gordon"><img alt="Wolf Gordon" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wolf-gordon.png?v=1771978124" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/york-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="York"><img alt="York" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/york-wallcoverings.png?v=1771978126" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/zoffany-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Zoffany"><img alt="Zoffany" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/zoffany.png?v=1771978814" style="max-width:100%;max-height:160px;object-fit:contain;"/></a><a href="/collections/zuber-wallcoverings" onmouseover="this.style.boxShadow='0 4px 12px rgba(0,0,0,0.15)';this.style.borderColor='#ccc';this.style.transform='translateY(-2px)'" onmouseout="this.style.boxShadow='none';this.style.borderColor='#eee';this.style.transform='none'" style="position:relative;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;border:1px solid #eee;border-radius:6px;text-decoration:none;min-height:160px;transition:all 0.2s;" title="Zuber"><img alt="Zuber" loading="lazy" src="https://cdn.shopify.com/s/files/1/0015/4117/7456/files/zuber.png?v=1771978131" style="max-width:100%;max-height:160px;object-fit:contain;"/></a>
</div>
</div>
\ No newline at end of file
diff --git a/vendor-logos/quadrille.png b/vendor-logos/quadrille.png
new file mode 100644
index 00000000..bca47622
Binary files /dev/null and b/vendor-logos/quadrille.png differ
diff --git a/vendor-logos/thibaut.png b/vendor-logos/thibaut.png
new file mode 100644
index 00000000..707c589d
Binary files /dev/null and b/vendor-logos/thibaut.png differ
← 6ea722b2 brand-router: repoint Quadrille to live smart collection /co
·
back to Designer Wallcoverings
·
brand-router: neutralize deleted hardcoded page 79444574259 310e37f1 →