[object Object]

← back to Designer Wallcoverings

auto-save: 2026-07-28T12:30:33 (8 files) — DW-Programming/150dpi/index.html DW-Programming/150dpi/package-lock.json DW-Programming/150dpi/package.json DW-Programming/KravetDesignTagger/server.js DW-Programming/TOOLS-DEBUG-LEDGER.md

6542c69a3c2ce0d0c39493a9c3152a117e0a7356 · 2026-07-28 12:30:42 -0700 · Steve Abrams

Files touched

Diff

commit 6542c69a3c2ce0d0c39493a9c3152a117e0a7356
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jul 28 12:30:42 2026 -0700

    auto-save: 2026-07-28T12:30:33 (8 files) — DW-Programming/150dpi/index.html DW-Programming/150dpi/package-lock.json DW-Programming/150dpi/package.json DW-Programming/KravetDesignTagger/server.js DW-Programming/TOOLS-DEBUG-LEDGER.md
---
 DW-Programming/150dpi/index.html                   |    2 +-
 DW-Programming/150dpi/package-lock.json            |  386 ++++---
 DW-Programming/150dpi/package.json                 |    4 +-
 DW-Programming/KravetDesignTagger/server.js        |   39 +-
 DW-Programming/TOOLS-DEBUG-LEDGER.md               |    8 +-
 DW-Programming/ThibautTagger/server.js             |   32 +-
 shopify/scripts/data/tk135/fullrun-vision.tsv      |  570 ++++++++++
 .../snippets/dw-boost-overrides.liquid             | 1146 ++++++++++++++++++++
 8 files changed, 1969 insertions(+), 218 deletions(-)

diff --git a/DW-Programming/150dpi/index.html b/DW-Programming/150dpi/index.html
index 2127572a..9cb97e18 100644
--- a/DW-Programming/150dpi/index.html
+++ b/DW-Programming/150dpi/index.html
@@ -5923,7 +5923,7 @@
                 loader.classList.remove('active');
                 document.body.classList.remove('loading');
                 comparison.classList.add('active');
-                resetBtn.style.display = 'inline-block';
+                if (resetBtn) resetBtn.style.display = 'inline-block';
 
                 // Complete conversion process
                 if (window.currentConversionProcessId) {
diff --git a/DW-Programming/150dpi/package-lock.json b/DW-Programming/150dpi/package-lock.json
index f8b00c34..4af4c0c5 100644
--- a/DW-Programming/150dpi/package-lock.json
+++ b/DW-Programming/150dpi/package-lock.json
@@ -11,11 +11,11 @@
       "dependencies": {
         "archiver": "^7.0.1",
         "axios": "^1.6.2",
-        "better-sqlite3": "^12.6.0",
+        "better-sqlite3": "^12.11.1",
         "cors": "^2.8.5",
         "express": "^4.18.2",
         "pg": "^8.16.3",
-        "puppeteer": "^21.11.0"
+        "puppeteer": "^24.43.1"
       },
       "devDependencies": {
         "nodemon": "^3.0.2"
@@ -151,33 +151,33 @@
       }
     },
     "node_modules/@puppeteer/browsers": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz",
-      "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==",
+      "version": "2.13.2",
+      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.2.tgz",
+      "integrity": "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "debug": "4.3.4",
-        "extract-zip": "2.0.1",
-        "progress": "2.0.3",
-        "proxy-agent": "6.3.1",
-        "tar-fs": "3.0.4",
-        "unbzip2-stream": "1.4.3",
-        "yargs": "17.7.2"
+        "debug": "^4.4.3",
+        "extract-zip": "^2.0.1",
+        "progress": "^2.0.3",
+        "proxy-agent": "^6.5.0",
+        "semver": "^7.7.4",
+        "tar-fs": "^3.1.1",
+        "yargs": "^17.7.2"
       },
       "bin": {
         "browsers": "lib/cjs/main-cli.js"
       },
       "engines": {
-        "node": ">=16.3.0"
+        "node": ">=18"
       }
     },
     "node_modules/@puppeteer/browsers/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -189,9 +189,9 @@
       }
     },
     "node_modules/@puppeteer/browsers/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "license": "MIT"
     },
     "node_modules/@tootallnate/quickjs-emscripten": {
@@ -201,13 +201,13 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "25.0.3",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
-      "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
+      "version": "26.1.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
+      "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "undici-types": "~7.16.0"
+        "undici-types": "~8.3.0"
       }
     },
     "node_modules/@types/yauzl": {
@@ -465,9 +465,9 @@
       }
     },
     "node_modules/b4a": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
-      "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz",
+      "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==",
       "license": "Apache-2.0",
       "peerDependencies": {
         "react-native-b4a": "*"
@@ -498,6 +498,76 @@
         }
       }
     },
+    "node_modules/bare-fs": {
+      "version": "4.7.4",
+      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz",
+      "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "bare-events": "^2.5.4",
+        "bare-path": "^3.0.0",
+        "bare-stream": "^2.6.4",
+        "bare-url": "^2.2.2",
+        "fast-fifo": "^1.3.2"
+      },
+      "engines": {
+        "bare": ">=1.16.0"
+      },
+      "peerDependencies": {
+        "bare-buffer": "*"
+      },
+      "peerDependenciesMeta": {
+        "bare-buffer": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/bare-path": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz",
+      "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==",
+      "license": "Apache-2.0",
+      "optional": true
+    },
+    "node_modules/bare-stream": {
+      "version": "2.13.3",
+      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.3.tgz",
+      "integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "b4a": "^1.8.1",
+        "streamx": "^2.25.0",
+        "teex": "^1.0.1"
+      },
+      "peerDependencies": {
+        "bare-abort-controller": "*",
+        "bare-buffer": "*",
+        "bare-events": "*"
+      },
+      "peerDependenciesMeta": {
+        "bare-abort-controller": {
+          "optional": true
+        },
+        "bare-buffer": {
+          "optional": true
+        },
+        "bare-events": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/bare-url": {
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.6.tgz",
+      "integrity": "sha512-iQxPClE07hETVpbRoX7JXX3v/ZQViCxe/SYCxylRLzdEx1xJAufPptfiOqR8tqiCtmbtMDANKWszzjLu1PMAZQ==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "bare-path": "^3.0.0"
+      }
+    },
     "node_modules/base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -519,18 +589,18 @@
       "license": "MIT"
     },
     "node_modules/basic-ftp": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
-      "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz",
+      "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==",
       "license": "MIT",
       "engines": {
         "node": ">=10.0.0"
       }
     },
     "node_modules/better-sqlite3": {
-      "version": "12.6.0",
-      "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.6.0.tgz",
-      "integrity": "sha512-FXI191x+D6UPWSze5IzZjhz+i9MK9nsuHsmTX9bXVl52k06AfZ2xql0lrgIUuzsMsJ7Vgl5kIptvDgBLIV3ZSQ==",
+      "version": "12.11.1",
+      "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz",
+      "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
@@ -538,7 +608,7 @@
         "prebuild-install": "^7.1.1"
       },
       "engines": {
-        "node": "20.x || 22.x || 23.x || 24.x || 25.x"
+        "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x"
       }
     },
     "node_modules/binary-extensions": {
@@ -734,13 +804,13 @@
       "license": "ISC"
     },
     "node_modules/chromium-bidi": {
-      "version": "0.5.8",
-      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.8.tgz",
-      "integrity": "sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz",
+      "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "mitt": "3.0.1",
-        "urlpattern-polyfill": "10.0.0"
+        "mitt": "^3.0.1",
+        "zod": "^3.24.1"
       },
       "peerDependencies": {
         "devtools-protocol": "*"
@@ -999,15 +1069,6 @@
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/cross-fetch": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
-      "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
-      "license": "MIT",
-      "dependencies": {
-        "node-fetch": "^2.6.12"
-      }
-    },
     "node_modules/cross-spawn": {
       "version": "7.0.6",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -1116,9 +1177,9 @@
       }
     },
     "node_modules/devtools-protocol": {
-      "version": "0.0.1232444",
-      "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz",
-      "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==",
+      "version": "0.0.1608973",
+      "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1608973.tgz",
+      "integrity": "sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ==",
       "license": "BSD-3-Clause"
     },
     "node_modules/dunder-proto": {
@@ -1975,9 +2036,9 @@
       "license": "ISC"
     },
     "node_modules/ip-address": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
-      "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
+      "version": "10.3.1",
+      "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz",
+      "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==",
       "license": "MIT",
       "engines": {
         "node": ">= 12"
@@ -2325,9 +2386,9 @@
       }
     },
     "node_modules/netmask": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
-      "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz",
+      "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.4.0"
@@ -2345,26 +2406,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/node-fetch": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
-      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
-      "license": "MIT",
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/nodemon": {
       "version": "3.1.11",
       "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz",
@@ -2852,19 +2893,19 @@
       }
     },
     "node_modules/proxy-agent": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz",
-      "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
+      "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
       "license": "MIT",
       "dependencies": {
-        "agent-base": "^7.0.2",
+        "agent-base": "^7.1.2",
         "debug": "^4.3.4",
-        "http-proxy-agent": "^7.0.0",
-        "https-proxy-agent": "^7.0.2",
+        "http-proxy-agent": "^7.0.1",
+        "https-proxy-agent": "^7.0.6",
         "lru-cache": "^7.14.1",
-        "pac-proxy-agent": "^7.0.1",
+        "pac-proxy-agent": "^7.1.0",
         "proxy-from-env": "^1.1.0",
-        "socks-proxy-agent": "^8.0.2"
+        "socks-proxy-agent": "^8.0.5"
       },
       "engines": {
         "node": ">= 14"
@@ -2917,48 +2958,51 @@
       }
     },
     "node_modules/puppeteer": {
-      "version": "21.11.0",
-      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.11.0.tgz",
-      "integrity": "sha512-9jTHuYe22TD3sNxy0nEIzC7ZrlRnDgeX3xPkbS7PnbdwYjl2o/z/YuCrRBwezdKpbTDTJ4VqIggzNyeRcKq3cg==",
-      "deprecated": "< 24.15.0 is no longer supported",
+      "version": "24.43.1",
+      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.43.1.tgz",
+      "integrity": "sha512-/FSOViCrqRdb1HDocpsM9Z1giA71gTQPUt3SpHGVRALKAy/rJr1fLFYZW9F23qPxqVxTHQnbh/5B5opJST3kAw==",
       "hasInstallScript": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@puppeteer/browsers": "1.9.1",
-        "cosmiconfig": "9.0.0",
-        "puppeteer-core": "21.11.0"
+        "@puppeteer/browsers": "2.13.2",
+        "chromium-bidi": "14.0.0",
+        "cosmiconfig": "^9.0.0",
+        "devtools-protocol": "0.0.1608973",
+        "puppeteer-core": "24.43.1",
+        "typed-query-selector": "^2.12.2"
       },
       "bin": {
-        "puppeteer": "lib/esm/puppeteer/node/cli.js"
+        "puppeteer": "lib/cjs/puppeteer/node/cli.js"
       },
       "engines": {
-        "node": ">=16.13.2"
+        "node": ">=18"
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "21.11.0",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.11.0.tgz",
-      "integrity": "sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==",
+      "version": "24.43.1",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.43.1.tgz",
+      "integrity": "sha512-T5ScUMAsmhdNbgDR41AGESYeS6V9MSgetkSnVhhW+gXvzC42VesKCn5ld87gAZDJ6vLHL9GkRvY9WtQWSnwFbw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@puppeteer/browsers": "1.9.1",
-        "chromium-bidi": "0.5.8",
-        "cross-fetch": "4.0.0",
-        "debug": "4.3.4",
-        "devtools-protocol": "0.0.1232444",
-        "ws": "8.16.0"
+        "@puppeteer/browsers": "2.13.2",
+        "chromium-bidi": "14.0.0",
+        "debug": "^4.4.3",
+        "devtools-protocol": "0.0.1608973",
+        "typed-query-selector": "^2.12.2",
+        "webdriver-bidi-protocol": "0.4.1",
+        "ws": "^8.20.0"
       },
       "engines": {
-        "node": ">=16.13.2"
+        "node": ">=18"
       }
     },
     "node_modules/puppeteer-core/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -2970,9 +3014,9 @@
       }
     },
     "node_modules/puppeteer-core/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "license": "MIT"
     },
     "node_modules/qs": {
@@ -3131,9 +3175,9 @@
       "license": "MIT"
     },
     "node_modules/semver": {
-      "version": "7.7.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
-      "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+      "version": "7.8.5",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+      "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
       "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
@@ -3367,12 +3411,12 @@
       }
     },
     "node_modules/socks": {
-      "version": "2.8.7",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz",
-      "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==",
+      "version": "2.8.9",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz",
+      "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==",
       "license": "MIT",
       "dependencies": {
-        "ip-address": "^10.0.1",
+        "ip-address": "^10.1.1",
         "smart-buffer": "^4.2.0"
       },
       "engines": {
@@ -3446,9 +3490,9 @@
       }
     },
     "node_modules/streamx": {
-      "version": "2.23.0",
-      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
-      "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+      "version": "2.28.0",
+      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz",
+      "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==",
       "license": "MIT",
       "dependencies": {
         "events-universal": "^1.0.0",
@@ -3542,14 +3586,17 @@
       }
     },
     "node_modules/tar-fs": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
-      "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.3.tgz",
+      "integrity": "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==",
       "license": "MIT",
       "dependencies": {
-        "mkdirp-classic": "^0.5.2",
         "pump": "^3.0.0",
         "tar-stream": "^3.1.5"
+      },
+      "optionalDependencies": {
+        "bare-fs": "^4.0.1",
+        "bare-path": "^3.0.0"
       }
     },
     "node_modules/tar-stream": {
@@ -3563,6 +3610,16 @@
         "streamx": "^2.15.0"
       }
     },
+    "node_modules/teex": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+      "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "streamx": "^2.12.5"
+      }
+    },
     "node_modules/text-decoder": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
@@ -3572,12 +3629,6 @@
         "b4a": "^1.6.4"
       }
     },
-    "node_modules/through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
-      "license": "MIT"
-    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -3610,12 +3661,6 @@
         "nodetouch": "bin/nodetouch.js"
       }
     },
-    "node_modules/tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "license": "MIT"
-    },
     "node_modules/tslib": {
       "version": "2.8.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -3647,15 +3692,11 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/unbzip2-stream": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
-      "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
-      "license": "MIT",
-      "dependencies": {
-        "buffer": "^5.2.1",
-        "through": "^2.3.8"
-      }
+    "node_modules/typed-query-selector": {
+      "version": "2.12.2",
+      "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz",
+      "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==",
+      "license": "MIT"
     },
     "node_modules/undefsafe": {
       "version": "2.0.5",
@@ -3665,9 +3706,9 @@
       "license": "MIT"
     },
     "node_modules/undici-types": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
-      "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
+      "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
       "license": "MIT",
       "optional": true
     },
@@ -3680,12 +3721,6 @@
         "node": ">= 0.8"
       }
     },
-    "node_modules/urlpattern-polyfill": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
-      "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==",
-      "license": "MIT"
-    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -3710,21 +3745,11 @@
         "node": ">= 0.8"
       }
     },
-    "node_modules/webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "license": "MIT",
-      "dependencies": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
-      }
+    "node_modules/webdriver-bidi-protocol": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz",
+      "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==",
+      "license": "Apache-2.0"
     },
     "node_modules/which": {
       "version": "2.0.2",
@@ -3783,9 +3808,9 @@
       "license": "ISC"
     },
     "node_modules/ws": {
-      "version": "8.16.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
-      "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+      "version": "8.21.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz",
+      "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==",
       "license": "MIT",
       "engines": {
         "node": ">=10.0.0"
@@ -3822,9 +3847,9 @@
       }
     },
     "node_modules/yargs": {
-      "version": "17.7.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
-      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "version": "17.7.3",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz",
+      "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
       "license": "MIT",
       "dependencies": {
         "cliui": "^8.0.1",
@@ -3911,6 +3936,15 @@
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
+    },
+    "node_modules/zod": {
+      "version": "3.25.76",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+      "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/colinhacks"
+      }
     }
   }
 }
diff --git a/DW-Programming/150dpi/package.json b/DW-Programming/150dpi/package.json
index b0f1cf05..b40ef1f0 100644
--- a/DW-Programming/150dpi/package.json
+++ b/DW-Programming/150dpi/package.json
@@ -22,11 +22,11 @@
   "dependencies": {
     "archiver": "^7.0.1",
     "axios": "^1.6.2",
-    "better-sqlite3": "^12.6.0",
+    "better-sqlite3": "^12.11.1",
     "cors": "^2.8.5",
     "express": "^4.18.2",
     "pg": "^8.16.3",
-    "puppeteer": "^21.11.0"
+    "puppeteer": "^24.43.1"
   },
   "devDependencies": {
     "nodemon": "^3.0.2"
diff --git a/DW-Programming/KravetDesignTagger/server.js b/DW-Programming/KravetDesignTagger/server.js
index 8d4f2e3f..4ef48556 100644
--- a/DW-Programming/KravetDesignTagger/server.js
+++ b/DW-Programming/KravetDesignTagger/server.js
@@ -3,13 +3,17 @@ const cors = require('cors');
 const path = require('path');
 
 const app = express();
-const PORT = 3851;
+const PORT = process.env.PORT || 8109;
 
 // Configuration
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_ACCESS_TOKEN = (process.env.SHOPIFY_ADMIN_TOKEN || '');
 const API_VERSION = '2024-01';
-const ANTHROPIC_API_KEY = "${ANTHROPIC_API_KEY}";
+// Vision backend: Gemini per repo mandate (DTD 2026-07-28 verdict B, 4-0 — replaced Claude Vision)
+const GEMINI_API_KEY = process.env.GEMINI_API_KEY || '';
+if (!GEMINI_API_KEY) console.warn('WARN: GEMINI_API_KEY not set — image analysis will fail');
+const DRY_RUN = process.env.DRY_RUN === '1';
+if (DRY_RUN) console.warn('DRY_RUN=1 — Shopify tag pushes will be captured, not sent');
 
 const fs = require('fs');
 
@@ -84,22 +88,16 @@ async function analyzeImageWithClaude(imageUrl, productTitle) {
   try {
     const { base64, mediaType } = await fetchImageAsBase64(imageUrl);
 
-    const response = await fetch('https://api.anthropic.com/v1/messages', {
+    const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent?key=${GEMINI_API_KEY}`, {
       method: 'POST',
-      headers: {
-        'Content-Type': 'application/json',
-        'x-api-key': ANTHROPIC_API_KEY,
-        'anthropic-version': '2023-06-01'
-      },
+      headers: { 'Content-Type': 'application/json' },
       body: JSON.stringify({
-        model: 'claude-opus-4-8',
-        max_tokens: 1200,
-        messages: [{
+        generationConfig: { maxOutputTokens: 1200, thinkingConfig: { thinkingBudget: 0 } },
+        contents: [{
           role: 'user',
-          content: [
-            { type: 'image', source: { type: 'base64', media_type: mediaType, data: base64 } },
+          parts: [
+            { inline_data: { mime_type: mediaType, data: base64 } },
             {
-              type: 'text',
               text: `You are an expert interior designer analyzing a wallpaper/wallcovering image for e-commerce tagging.
 Product: "${productTitle}"
 
@@ -137,20 +135,21 @@ Return ONLY valid JSON, no markdown code blocks.`
     const result = await response.json();
 
     // Debug: log the API response
-    console.log('Claude API response:', JSON.stringify(result, null, 2).substring(0, 500));
+    console.log('Gemini API response:', JSON.stringify(result, null, 2).substring(0, 500));
 
     // Check for errors
     if (result.error) {
-      console.error('Claude API error:', result.error);
+      console.error('Gemini API error:', result.error);
       return null;
     }
 
-    if (!result.content || !result.content[0] || !result.content[0].text) {
+    const geminiText = result.candidates?.[0]?.content?.parts?.map(p => p.text || '').join('') || '';
+    if (!geminiText) {
       console.error('Unexpected API response structure:', JSON.stringify(result).substring(0, 500));
       return null;
     }
 
-    let content = result.content[0].text;
+    let content = geminiText;
     // Remove markdown if present
     content = content.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim();
     return JSON.parse(content);
@@ -288,6 +287,10 @@ async function fetchKravetDesignProducts() {
 
 async function updateProductTags(productId, tags) {
   const tagsString = tags.join(', ');
+  if (DRY_RUN) {
+    console.log(`DRY_RUN would-push tags for product ${productId}: ${tagsString}`);
+    return true;
+  }
   const response = await fetch(
     `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}/products/${productId}.json`,
     {
diff --git a/DW-Programming/TOOLS-DEBUG-LEDGER.md b/DW-Programming/TOOLS-DEBUG-LEDGER.md
index c43bfdb6..92c08cf1 100644
--- a/DW-Programming/TOOLS-DEBUG-LEDGER.md
+++ b/DW-Programming/TOOLS-DEBUG-LEDGER.md
@@ -9,14 +9,14 @@ Rules: set DOING before touching a tool; advance a checkbox ONLY on evidence pro
 | system-dashboard | P1 | VERIFIED | 8116 | x | x | x | x | x | x | e7c8ee3 | marker "DW System Dashboard"; PORT env||8116; functional /api/pm2 = real pm2 jlist data; /api/system uses Linux-only uptime -p/free -m — degrades gracefully on macOS (non-fatal) |
 | VendorDashboard-V2 | P1 | VERIFIED | 8115 | x | x | x | x | x | x | e1fe286 | marker "Vendor Dashboard V2 - Streamlined"; deps OK (npm ls clean, no install needed); PORT env||8115 (was 9832); functional /api/vendors = 463 live vendors from dw_unified registry+scraper join |
 | pm2-dashboard | P1 | VERIFIED | 8117 | x | x | x | x | x | x | 917040e | marker "DW PM2 Dashboard"; own basic auth admin/ADMIN_PASSWORD env (401 unauth, 200 auth) — start env needs ADMIN_PASSWORD; PORT env||8117 (was 7401); functional /api/pm2 = 82 live pm2 processes |
-| ThibautTagger | P1 | BLOCKED-GATED | 8110 | x | x | x | x | x | | 012f591 | marker "Thibaut Wallpaper Tagger"; fixed literal "${ANTHROPIC_API_KEY}" string → env read; fixed vendor query "Thibaut Wallpaper" (0 products) → "Thibaut" (4956); added DRY_RUN=1 would-push guard; anthropic-version untouched; f BLOCKED: ANTHROPIC_API_KEY has ZERO API credit (Max plan only) — analyze/7865534906419 returned clean API billing error, $0 spent. Missing: funded Anthropic API credit (or port tool to claude CLI) |
+| ThibautTagger | P1 | VERIFIED | 8110 | x | x | x | x | x | x | 26a2a89 | marker "Thibaut Wallpaper Tagger"; P1 fixed env-key artifact + dead vendor query ("Thibaut Wallpaper"→"Thibaut", 4956 products) + DRY_RUN guard (012f591); P2+ ported analyze Claude→Gemini gemini-3.5-flash per DTD i2 verdict B 4-0 (repo vision mandate; also unblocks zero-credit Anthropic gate); functional: real Gemini tag JSON on 7865534906419 (Sage/Olive/Ivory, Muted), DRY_RUN no write |
 | PhillipeRomanoTagger | P1 | VERIFIED | 8111 | x | x | x | x | x | x | 18bb2ad | marker "Philippe Romano Tagger - Gemini AI"; better-sqlite3 11.x gyp-failed on node 26 → bumped to 12.11.1 (builds clean); fixed undefined SHOPIFY_API_URL (refresh-ai ReferenceError), 3rd token var → SHOPIFY_TOKEN, bad default domain designer-wallcoverings→designer-laboratory-sandbox, literal ${GOOGLE_API_KEY} fallback → env+warn; PORT env||8111 (was 3160); own basic auth admin/ADMIN_PASSWORD (401/200); functional: GET /api/refresh-ai/7877188452403 (read-only) → valid Gemini tag JSON (Warm Taupe/Horizontal Stria/Grasscloth, 15 tags), no Shopify write |
 | schumacher-updater-dashboard | P1 | VERIFIED | 8113 | x | x | x | x | x | x | 25e41a2 | marker "Schumacher DWSW Updater"; PORT env||8113 (was 9898); START ENV MUST SET ADMIN_PASSWORD (basic auth admin/$ADMIN_PASSWORD; tested with DW2024!, 401/200); functional: start→update→status round-trip reflected in-memory state (processed=1, active=1), then reset; pure progress receiver — no DB/external APIs |
 | architectural-updater | P1 | VERIFIED | 8114 | x | x | x | x | x | x | bc35f04 | marker "Architectural Wallcoverings Updater"; PORT chain ARCH_UPDATER_PORT||PORT||8114 (was ||9897); own basic auth admin/ADMIN_PASSWORD (401/200); functional: /api/vendors = 250 live vendors via Shopify GraphQL (read-only); dotenv hardcodes /root/... Kamatera path (no-op on Mac — env passed at start instead, noted not fixed) |
 | DW-Dashboard | P1 | STATIC-OK | 8118 | | x | x | x | x | x | 0809d22 | marker "Fortune 2000 Product Inquiries"; STATIC (no server, no install — a n/a); fixed fetch filename /fortune-inquiries.json → /fortune-companies-emails.json (data file on disk); json serves 200 with 356 records; KNOWN LIMITATION: /api/get-email/:id backend never existed (email-body modal will error — not a defect to fix); tested via throwaway python3 -m http.server 8118, stopped |
-| KravetDesignTagger | P2 | PENDING | 8109 | | | | | | | | server.js:12 literal "${ANTHROPIC_API_KEY}" → env read + warn |
+| KravetDesignTagger | P2 | VERIFIED | 8109 | x | x | x | x | x | x | 1da18d9 | marker "Kravet Design Wallpaper Tagger"; literal "${ANTHROPIC_API_KEY}" artifact removed; analyze ported Claude→Gemini gemini-3.5-flash per DTD i2 verdict B (4-0); PORT env||8109 (was 3851); DRY_RUN guard added; npm install 70 pkgs clean; functional: real Gemini tag JSON on DWKK-153878 / W3606-3 (Sage Green/Ivory/Celadon, Botanical), DRY_RUN no write |
 | maya-romanoff-updater | P2 | VERIFIED | 8112 | x | x | x | x | x | x | 4b60d50 | marker "Maya Romanoff Enhanced Updater"; literal '${GOOGLE_API_KEY}'/'${SLACK_WEBHOOK_URL}' → env reads + startup warns + Slack-send guard; PORT env||8112 (was 9900); NOTE survey wrong: NO /root/ paths or dotenv load exist in server.js (dotenv is an unused dep; env passed at start); CREATE INDEX on mirror table died 42501 (repl_user owns maya_romanoff_updates) → made non-fatal .catch like the ALTER; own basic auth admin/ADMIN_PASSWORD (401/200); functional: GET /api/recrawl/preview = 250 real active Maya Romanoff products via Shopify GraphQL read-only (94 flagged needing recrawl), NO writes; puppeteer postinstall blocked by npm allow-scripts (Chromium not downloaded — scrape paths would need it, not exercised) |
-| 150dpi | P2 | PENDING | 8108 | | | | | | | | resolveChrome() replaces 4 hardcoded /usr/bin/google-chrome sites |
+| 150dpi | P2 | VERIFIED | 8108 | x | x | x | x | x | x | dadaaa9 | marker "150 DPI Converter - 24\" Wide"; resolveChrome() (CHROME_PATH env → darwin app → linux → puppeteer default) replaced 4 hardcoded sites; PORT env||8108 (was 3150); FOUND+FIXED real bug: dead resetBtn ref (id removed in past redesign) crashed EVERY conversion inside toBlob callback; functional E2E: headless Chrome drove real client, 1200×1200 → 3600×3600 = 24"@150dpi sips-verified; images DB = PG dw_unified (15 rows); Spoonflower upload untouched (gated) |
 | ImportNewSkufromURL | P3 | PENDING | 8101 | | | | | | | | healthy; re-port only; functional = 1 URL → DRAFT → delete |
 | ImagetoRoomSetting | P3 | PENDING | 8105 | | | | | | | | install + build; HF token flagged for /secrets |
 | SearchByColorWheel | P3 | PENDING | 8107 | | | | | | | | pages/ router; install |
@@ -40,6 +40,8 @@ Rules: set DOING before touching a tool; advance a checkbox ONLY on evidence pro
 |---|---|---|---|---|
 | 2026-07-28 | ThibautTagger | Anthropic messages (opus vision) | 0.05 | 0.00 (rejected — zero credit balance, no inference ran) |
 | 2026-07-28 | PhillipeRomanoTagger | Gemini gemini-3.5-flash (1 vision + 2 text) | 0.02 | ~0.01 (logged to ~/.claude/cost-ledger.jsonl) |
+| 2026-07-28 | KravetDesignTagger | Gemini gemini-3.5-flash (1 vision) | 0.01 | ~0.005 |
+| 2026-07-28 | ThibautTagger | Gemini gemini-3.5-flash (1 vision) | 0.01 | ~0.005 |
 
 ## Gated items drafted (pending-approval)
 (none yet)
diff --git a/DW-Programming/ThibautTagger/server.js b/DW-Programming/ThibautTagger/server.js
index 29bbdee3..25b69199 100644
--- a/DW-Programming/ThibautTagger/server.js
+++ b/DW-Programming/ThibautTagger/server.js
@@ -9,8 +9,9 @@ const PORT = process.env.PORT || 8110;
 const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
 const SHOPIFY_ACCESS_TOKEN = (process.env.SHOPIFY_ADMIN_TOKEN || '');
 const API_VERSION = '2024-07';
-const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || '';
-if (!ANTHROPIC_API_KEY) console.warn('WARNING: ANTHROPIC_API_KEY not set — image analysis will fail');
+// Vision backend: Gemini per repo mandate (DTD 2026-07-28 verdict B, 4-0 — replaced Claude Vision)
+const GEMINI_API_KEY = process.env.GEMINI_API_KEY || '';
+if (!GEMINI_API_KEY) console.warn('WARNING: GEMINI_API_KEY not set — image analysis will fail');
 
 const fs = require('fs');
 
@@ -85,22 +86,16 @@ async function analyzeImageWithClaude(imageUrl, productTitle) {
   try {
     const { base64, mediaType } = await fetchImageAsBase64(imageUrl);
 
-    const response = await fetch('https://api.anthropic.com/v1/messages', {
+    const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent?key=${GEMINI_API_KEY}`, {
       method: 'POST',
-      headers: {
-        'Content-Type': 'application/json',
-        'x-api-key': ANTHROPIC_API_KEY,
-        'anthropic-version': '2023-06-01'
-      },
+      headers: { 'Content-Type': 'application/json' },
       body: JSON.stringify({
-        model: 'claude-opus-4-8',
-        max_tokens: 1200,
-        messages: [{
+        generationConfig: { maxOutputTokens: 1200, thinkingConfig: { thinkingBudget: 0 } },
+        contents: [{
           role: 'user',
-          content: [
-            { type: 'image', source: { type: 'base64', media_type: mediaType, data: base64 } },
+          parts: [
+            { inline_data: { mime_type: mediaType, data: base64 } },
             {
-              type: 'text',
               text: `You are an expert interior designer analyzing a wallpaper/wallcovering image for e-commerce tagging.
 Product: "${productTitle}"
 
@@ -138,20 +133,21 @@ Return ONLY valid JSON, no markdown code blocks.`
     const result = await response.json();
 
     // Debug: log the API response
-    console.log('Claude API response:', JSON.stringify(result, null, 2).substring(0, 500));
+    console.log('Gemini API response:', JSON.stringify(result, null, 2).substring(0, 500));
 
     // Check for errors
     if (result.error) {
-      console.error('Claude API error:', result.error);
+      console.error('Gemini API error:', result.error);
       return null;
     }
 
-    if (!result.content || !result.content[0] || !result.content[0].text) {
+    const geminiText = result.candidates?.[0]?.content?.parts?.map(p => p.text || '').join('') || '';
+    if (!geminiText) {
       console.error('Unexpected API response structure:', JSON.stringify(result).substring(0, 500));
       return null;
     }
 
-    let content = result.content[0].text;
+    let content = geminiText;
     // Remove markdown if present
     content = content.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim();
     return JSON.parse(content);
diff --git a/shopify/scripts/data/tk135/fullrun-vision.tsv b/shopify/scripts/data/tk135/fullrun-vision.tsv
index 39f64dff..1469332b 100644
--- a/shopify/scripts/data/tk135/fullrun-vision.tsv
+++ b/shopify/scripts/data/tk135/fullrun-vision.tsv
@@ -36617,3 +36617,573 @@ gid://shopify/Product/1502363189360	Abstract	https://cdn.shopify.com/s/files/1/0
 gid://shopify/Product/7871527485491	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36574_1611_ed302937-cd2b-4cd2-82df-c025cce358aa.jpg?v=1782841227	vision:qwen2.5vl:7b
 gid://shopify/Product/6829074219059	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prw-920648-peb-009.jpg?v=1781716314	vision:qwen2.5vl:7b
 gid://shopify/Product/7882745217075	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0162662_hempfield-weave-beige-loomed-wallpaper.jpg?v=1783865388	vision:qwen2.5vl:7b
+gid://shopify/Product/7865239502899	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0037255_natalie-taupe-faux-grasscloth.jpg?v=1781980478	vision:qwen2.5vl:7b
+gid://shopify/Product/1497235128432	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/acfc064a2e42fdbc0b2fa6748cd4108d.jpg?v=1572309620	vision:qwen2.5vl:7b
+gid://shopify/Product/1498022740080	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/7af649875cf33771854e1531a06a3e87.jpg?v=1745458995	vision:qwen2.5vl:7b
+gid://shopify/Product/7422861279283	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BF10682_675_75ad2c55-a558-4f00-86a6-fb4c308bf043.jpg?v=1726531518	vision:qwen2.5vl:7b
+gid://shopify/Product/7785760063539	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZW142-07-lacquer-wallcovering-cognac_01_09fd59d8-7b99-4b1c-9860-ee8ebcd25f6a.jpg?v=1771819613	vision:qwen2.5vl:7b
+gid://shopify/Product/7584914145331	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LINSEY_JUTE_SE21-19.jpg?v=1751951836	vision:qwen2.5vl:7b
+gid://shopify/Product/6685841555507	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PSW1206RL.jpg?v=1740775117	vision:qwen2.5vl:7b
+gid://shopify/Product/7896257396787	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KT-ARENA-002_0.jpg?v=1784731562	vision:qwen2.5vl:7b
+gid://shopify/Product/7879889289267	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36988_1101_09547737-0ae1-46f8-bd58-ecefc4611747.jpg?v=1783622438	vision:qwen2.5vl:7b
+gid://shopify/Product/7898788593715	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBWW01_51f933d6-917e-4ef7-90a2-db94623871f1.jpg?v=1785082078	vision:qwen2.5vl:7b
+gid://shopify/Product/7880951038003	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-sauvages-pampa-9affa5ff991225d9fac136ed3907_49ef9d9a-a569-4b1f-b286-c9d483ea4dc5.jpg?v=1783790778	vision:qwen2.5vl:7b
+gid://shopify/Product/1502363418736	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9ee96cc8fcacd8289879ff3d56fc689c.jpg?v=1745455807	vision:qwen2.5vl:7b
+gid://shopify/Product/1502363680880	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/43b343cfef199ffff747da6d9673804e.jpg?v=1745455804	vision:qwen2.5vl:7b
+gid://shopify/Product/7881297166387	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T279_edf9a6b7-df7d-437b-b7f7-12d6d459d04d.jpg?v=1783780805	vision:qwen2.5vl:7b
+gid://shopify/Product/7882840571955	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/4de864f5326bd220bf61efc745304d4e.jpg?v=1783881649	vision:qwen2.5vl:7b
+gid://shopify/Product/1502367154288	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/961c9b60bc3c86e52ab1c4f637585393.jpg?v=1745455800	vision:qwen2.5vl:7b
+gid://shopify/Product/7876465164339	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36663_24_7bc4d7db-5540-4de7-b675-37e3b408a31d.jpg?v=1783183224	vision:qwen2.5vl:7b
+gid://shopify/Product/7876592599091	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36672_16_058162bd-3ea8-432b-8512-1241c34f571f.jpg?v=1783215635	vision:qwen2.5vl:7b
+gid://shopify/Product/7885586563123	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T72877_3f1867ed-7c56-4500-9d61-27bcb5bcbe42.jpg?v=1784112015	vision:qwen2.5vl:7b
+gid://shopify/Product/6829077004339	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prw-920666-pla-005.jpg?v=1781716369	vision:qwen2.5vl:7b
+gid://shopify/Product/7584925155379	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ILLUSIVE-KATYDID_LSV1-10_7c7fd5ef-5dd2-4fb0-9524-f4062b861798.jpg?v=1751951423	vision:qwen2.5vl:7b
+gid://shopify/Product/7375698886707	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_7a83d033-9b46-4f16-885b-cbfbc851230e.png?v=1722463254	vision:qwen2.5vl:7b
+gid://shopify/Product/1497965559920	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/428190270b85b057c6e40d7d20018c00.jpg?v=1745459195	vision:qwen2.5vl:7b
+gid://shopify/Product/7879809171507	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T20845.jpg?v=1783604411	vision:qwen2.5vl:7b
+gid://shopify/Product/7429970886707	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wp20005_-_the_acrobats.jpg?v=1748368425	vision:qwen2.5vl:7b
+gid://shopify/Product/7887507030067	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0158767_lorn-stone-faux-grasscloth-wallpaper.jpg?v=1784295494	vision:qwen2.5vl:7b
+gid://shopify/Product/7384926617651	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/B_37_113_L_LaquredBark_HR_CMYK_f009e942-e60a-4b05-9657-9f0d58556a52.jpg?v=1738861112	vision:qwen2.5vl:7b
+gid://shopify/Product/7375726149683	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_7721e6fc-ebab-4187-b3ad-0050c97fff99.png?v=1722462394	vision:qwen2.5vl:7b
+gid://shopify/Product/7880942354483	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-wall-marqueteries-wall-seve-6b82880be282dd6b9d85e1e97287_40e5a71a-e794-43ce-92df-2cd15825e954.jpg?v=1783789834	vision:qwen2.5vl:7b
+gid://shopify/Product/7879691763763	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0060378_nicolette-green-floral-trail-wallpaper_4b75d5a8-55ae-4d03-90c7-9ec22a9a20bb.jpg?v=1783593649	vision:qwen2.5vl:7b
+gid://shopify/Product/7858761859123	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T13092.jpg?v=1781225630	vision:qwen2.5vl:7b
+gid://shopify/Product/1496137007216	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/5fb43efddfe3d10d2e0373acc37bd102.jpg?v=1572309210	vision:qwen2.5vl:7b
+gid://shopify/Product/7864806572083	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/y47642dv.jpg?v=1781895201	vision:qwen2.5vl:7b
+gid://shopify/Product/7879714242611	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T20843_27354867-eda4-4212-b7e1-dd2979a96b1a.jpg?v=1783597247	vision:qwen2.5vl:7b
+gid://shopify/Product/7388470804531	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BLQ-02_6fe84d49-3bf8-493b-b80d-615dc753efa6.jpg?v=1736206980	vision:qwen2.5vl:7b
+gid://shopify/Product/7716425728051	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/hex-paper-marine.jpg?v=1763707191	vision:qwen2.5vl:7b
+gid://shopify/Product/7424887423027	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8015118_11_eac8cece-0a0a-427d-a31e-e51bbdd694f4.jpg?v=1753290730	vision:qwen2.5vl:7b
+gid://shopify/Product/7876819779635	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PU2903-2-Teal_b44c4064-6e9c-4202-9543-5532034b3f96.jpg?v=1783269645	vision:qwen2.5vl:7b
+gid://shopify/Product/7864795529267	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az52806ss.jpg?v=1781894510	vision:qwen2.5vl:7b
+gid://shopify/Product/7880966930483	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100011.jpg?v=1783750052	vision:qwen2.5vl:7b
+gid://shopify/Product/7897173753907	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Crystalline-Ametrine_embellished_-2CC.jpg?v=1784829004	vision:qwen2.5vl:7b
+gid://shopify/Product/7896479203379	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBGE09.jpg?v=1784741748	vision:qwen2.5vl:7b
+gid://shopify/Product/7864804638771	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az53186ps.jpg?v=1781895092	vision:qwen2.5vl:7b
+gid://shopify/Product/6679729307699	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/RS13871_image1.jpg?v=1756313091	vision:qwen2.5vl:7b
+gid://shopify/Product/7865301925939	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT15110_2d00c209-bf78-47e7-b509-7a4e343d0fd4.jpg?v=1782009641	vision:qwen2.5vl:7b
+gid://shopify/Product/7776894615603	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/19106-6.jpg?v=1770828087	vision:qwen2.5vl:7b
+gid://shopify/Product/6679679270963	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R17661_image2.jpg?v=1756326671	vision:qwen2.5vl:7b
+gid://shopify/Product/1500764045424	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6828b8fcc55f7881217cf3f8ca65c769_b3d25b4a-d88d-4474-9d5c-84d93afe8095.jpg?v=1572310425	vision:qwen2.5vl:7b
+gid://shopify/Product/7864795299891	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az52847un.jpg?v=1781894488	vision:qwen2.5vl:7b
+gid://shopify/Product/7880972664883	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100184.jpg?v=1783750680	vision:qwen2.5vl:7b
+gid://shopify/Product/7421481254963	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/114_22042_CS_51d37de6-78f4-47af-8a56-80d89ef1711c.jpg?v=1753305353	vision:qwen2.5vl:7b
+gid://shopify/Product/7896295899187	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/apreski-sunset-repeated-patterns-coordonne.jpg?v=1784736762	vision:qwen2.5vl:7b
+gid://shopify/Product/7876020502579	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10388_e10b9e67-a7e6-449b-9909-851369f20d1c.jpg?v=1783100441	vision:qwen2.5vl:7b
+gid://shopify/Product/1497149177968	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/73a7e783134eceae156a6238df55edcf.jpg?v=1572309571	vision:qwen2.5vl:7b
+gid://shopify/Product/1500764635248	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/b037e762a41592a3e7430b3aef96b035_7aac6fa3-bfd2-4b76-a580-1377e7686cae.jpg?v=1572310425	vision:qwen2.5vl:7b
+gid://shopify/Product/7881369124915	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T313_1cf20f15-6970-4e18-b3ca-65bc20c0edd8.jpg?v=1783798809	vision:qwen2.5vl:7b
+gid://shopify/Product/7851173118003	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R18853_interior1.webp?v=1780557602	vision:qwen2.5vl:7b
+gid://shopify/Product/7864379965491	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Hera-Charity-1024x914.jpg?v=1781823366	vision:qwen2.5vl:7b
+gid://shopify/Product/7880969224243	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100081.jpg?v=1783750274	vision:qwen2.5vl:7b
+gid://shopify/Product/7896482086963	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBML07.jpg?v=1784741993	vision:qwen2.5vl:7b
+gid://shopify/Product/7874077458483	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0089140_trevor-grey-leaf-trellis-wallpaper.jpg?v=1782992420	vision:qwen2.5vl:7b
+gid://shopify/Product/7896487002163	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBMY03.jpg?v=1784742092	vision:qwen2.5vl:7b
+gid://shopify/Product/7866347683891	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/M4903-1_01.jpg?v=1782182861	vision:qwen2.5vl:7b
+gid://shopify/Product/7882753638451	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0161738_tribeca-charcoal-texture-stripe-wallpaper.jpg?v=1783865835	vision:qwen2.5vl:7b
+gid://shopify/Product/7865293471795	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/9251_878f02a7-4c6a-43f7-9012-56a5c6585e7d.jpg?v=1782006037	vision:qwen2.5vl:7b
+gid://shopify/Product/6679660167219	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R16461_image2.jpg?v=1756327121	vision:qwen2.5vl:7b
+gid://shopify/Product/1500765454448	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/cdc6b168e0b914d889890da7b3bdf972_041149ad-64b0-4d1e-8ad6-598f45d916f5.jpg?v=1572310436	vision:qwen2.5vl:7b
+gid://shopify/Product/7424891093043	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8015128_4_5a0b0422-4647-4526-9fa1-9581b420f2a2.jpg?v=1753290605	vision:qwen2.5vl:7b
+gid://shopify/Product/1500765847664	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/659c35dd01e3e015d9958ba00c08bdb3_5b9b0ecf-1775-42b7-9291-b0691cd90421.jpg?v=1572310436	vision:qwen2.5vl:7b
+gid://shopify/Product/7882842243123	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/083076b9bb532f29448eb33b13861df4.jpg?v=1783881788	vision:qwen2.5vl:7b
+gid://shopify/Product/7896488116275	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBPW16.jpg?v=1784742209	vision:qwen2.5vl:7b
+gid://shopify/Product/1499479507056	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/38bb8b7d05e0d53d6b94fe71a53d3076.jpg?v=1745458155	vision:qwen2.5vl:7b
+gid://shopify/Product/1499480621168	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/50337d1b29331ea1e9df93163487b8e6.jpg?v=1745458139	vision:qwen2.5vl:7b
+gid://shopify/Product/1496129568880	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ba084318d99df6981e7c7279b63d08f8.jpg?v=1572309209	vision:qwen2.5vl:7b
+gid://shopify/Product/1499481112688	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/c4572acd2640df4004055ecc218588fd.jpg?v=1745458134	vision:qwen2.5vl:7b
+gid://shopify/Product/1500766273648	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/3e0a3020fda236fb46a9b52d7815b57a_438360b5-fe14-4874-80e4-7f3e63e343fe.jpg?v=1572310436	vision:qwen2.5vl:7b
+gid://shopify/Product/7882842734643	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8fca2fe0a95955d4b7787bbb25bc8284.jpg?v=1783881802	vision:qwen2.5vl:7b
+gid://shopify/Product/7874488401971	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36656_13_26277139-a0b3-4216-8574-bf1123b243b6.jpg?v=1783064445	vision:qwen2.5vl:7b
+gid://shopify/Product/7887505948723	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0161565_mystic-pink-celestial-wallpaper.jpg?v=1784295430	vision:qwen2.5vl:7b
+gid://shopify/Product/7879424278579	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36899_21_e779f3af-55f7-46c5-8786-c16f1f32a566.jpg?v=1783543232	vision:qwen2.5vl:7b
+gid://shopify/Product/7896489426995	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBSR05.jpg?v=1784742358	vision:qwen2.5vl:7b
+gid://shopify/Product/1497201541232	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/06022dbb6913997ef1140ab6119e59b7.jpg?v=1572309595	vision:qwen2.5vl:7b
+gid://shopify/Product/7876491935795	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36663_30_c177e198-3051-4ca7-8c05-214a253a8a6b.jpg?v=1783190407	vision:qwen2.5vl:7b
+gid://shopify/Product/7876351590451	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0037908_poise-beige-linen-wallpaper.jpg?v=1783161633	vision:qwen2.5vl:7b
+gid://shopify/Product/7896399806515	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/limestone-view-summer-coordonne.jpg?v=1784738402	vision:qwen2.5vl:7b
+gid://shopify/Product/7896490508339	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBHU12.jpg?v=1784742472	vision:qwen2.5vl:7b
+gid://shopify/Product/7896490442803	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBHU08.jpg?v=1784742463	vision:qwen2.5vl:7b
+gid://shopify/Product/7896490115123	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBHU02.jpg?v=1784742437	vision:qwen2.5vl:7b
+gid://shopify/Product/6948087431219	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34150.jpg?v=1781831488	vision:qwen2.5vl:7b
+gid://shopify/Product/7867761066035	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT79154_7b468849-3221-46b9-8a0b-dbef6711ffb7.jpg?v=1782391261	vision:qwen2.5vl:7b
+gid://shopify/Product/7879875919923	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T20861_3381c3e6-26f3-41f9-ae31-c4914cba3211.jpg?v=1783618847	vision:qwen2.5vl:7b
+gid://shopify/Product/7882783588403	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T34072.jpg?v=1783874414	vision:qwen2.5vl:7b
+gid://shopify/Product/7870934384691	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36543_2111_1ed381a6-616f-4dc6-a5af-b9148be9e20f.jpg?v=1782808843	vision:qwen2.5vl:7b
+gid://shopify/Product/7870798069811	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/A02-DZ-04W-Dazzle-Wallpaper_Black-1.jpg?v=1782787250	vision:qwen2.5vl:7b
+gid://shopify/Product/7898781417523	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBML05_43d928ff-e486-43c9-8434-84488214bf7c.jpg?v=1785081433	vision:qwen2.5vl:7b
+gid://shopify/Product/7882759864371	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0152643_loom-forest-wallpaper.jpg?v=1783866192	vision:qwen2.5vl:7b
+gid://shopify/Product/7876473978931	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10528.jpg?v=1783186821	vision:qwen2.5vl:7b
+gid://shopify/Product/7430016401459	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Screenshot_2024-10-02_at_1.11.32_PM.png?v=1748367735	vision:qwen2.5vl:7b
+gid://shopify/Product/7886395867187	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0163090_anara-green-geo-faux-grasscloth-wallpaper.jpg?v=1784209122	vision:qwen2.5vl:7b
+gid://shopify/Product/1497082003568	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/d4afc2dafec4d1cf18646925587ddd7d.jpg?v=1572309546	vision:qwen2.5vl:7b
+gid://shopify/Product/7873451622451	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10330_0f9f2b62-aacc-4870-beb4-049e63fc7b9d.jpg?v=1782949211	vision:qwen2.5vl:7b
+gid://shopify/Product/7876798971955	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10917_09a44106-d936-4c11-b1f5-d465fa3257ac.jpg?v=1783262440	vision:qwen2.5vl:7b
+gid://shopify/Product/7896491687987	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBTU07.jpg?v=1784742619	vision:qwen2.5vl:7b
+gid://shopify/Product/7884297764915	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/lawrence-black-peel-and-stick-floor-tiles-jeffrey.jpg?v=1783981222	vision:qwen2.5vl:7b
+gid://shopify/Product/7896491556915	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBTU09.jpg?v=1784742606	vision:qwen2.5vl:7b
+gid://shopify/Product/7896493228083	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBVA03.jpg?v=1784742675	vision:qwen2.5vl:7b
+gid://shopify/Product/7692042633267	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/marburg-papis-loveday_842ce57f-cf3b-45a5-9699-1184f839762a.jpg?v=1761150625	vision:qwen2.5vl:7b
+gid://shopify/Product/6936685510707	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-CM-07_69e6f486-79a0-4b4d-b6db-63d2ec0989f9.jpg?v=1733891587	vision:qwen2.5vl:7b
+gid://shopify/Product/7692058263603	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/marburg-papis-loveday_85def0c2-7562-4006-8ebc-706b526ea47d.jpg?v=1761151765	vision:qwen2.5vl:7b
+gid://shopify/Product/7876474339379	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0037871_feliz-seafoam-beaded-ogee-wallpaper.jpg?v=1783186839	vision:qwen2.5vl:7b
+gid://shopify/Product/7896493981747	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBVC10.jpg?v=1784742737	vision:qwen2.5vl:7b
+gid://shopify/Product/7887507488819	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0158823_amir-black-embossed-wallpaper.jpg?v=1784295524	vision:qwen2.5vl:7b
+gid://shopify/Product/7898787381299	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBVC08_fa43851f-a5e4-4764-a7ff-ed4800d5af5e.jpg?v=1785081968	vision:qwen2.5vl:7b
+gid://shopify/Product/7422092738611	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2022110_821_20f7858e-4602-4187-b2d1-282da682d37a.jpg?v=1726175162	vision:qwen2.5vl:7b
+gid://shopify/Product/7868750102579	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6694801__37237.1713201978.jpg?v=1782460041	vision:qwen2.5vl:7b
+gid://shopify/Product/7880942682163	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-wall-rayures-jumelles-wall-colonne-111b01b570922b5e95fcbc8c6a34.jpg?v=1783789876	vision:qwen2.5vl:7b
+gid://shopify/Product/7897177948211	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Helicon---Roter_ff14572e-6d19-4a5f-8541-870572c4b22e.png?v=1784829300	vision:qwen2.5vl:7b
+gid://shopify/Product/7865239470131	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0038284_valiant-aqua-faux-grasscloth-geometric-wallpaper.jpg?v=1781980476	vision:qwen2.5vl:7b
+gid://shopify/Product/1499589247088	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwr-52785-sample-steuben-embossed-vertical-durable-vinyl-hollywood-wallcoverings.jpg?v=1775734822	vision:qwen2.5vl:7b
+gid://shopify/Product/7859488555059	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/WOOD_N_007_MINT.jpg?v=1781282780	vision:qwen2.5vl:7b
+gid://shopify/Product/7880967323699	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100023.jpg?v=1783750088	vision:qwen2.5vl:7b
+gid://shopify/Product/6860103909427	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-11-04at1.53.36PM.png?v=1747254105	vision:qwen2.5vl:7b
+gid://shopify/Product/1499629846640	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/06fc3373983ae5f295e8362bfcae6fbb.jpg?v=1745458003	vision:qwen2.5vl:7b
+gid://shopify/Product/7897186598963	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Vandalia_Bainbridge_Room_Comp.jpg?v=1784829875	vision:qwen2.5vl:7b
+gid://shopify/Product/7896495226931	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBWS06.jpg?v=1784742838	vision:qwen2.5vl:7b
+gid://shopify/Product/7882754129971	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0162592_vanishing-point-seafoam-striated-wallpaper.jpg?v=1783865870	vision:qwen2.5vl:7b
+gid://shopify/Product/7871767707699	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/A04-RD-01W_Rome-Deco-Wallpaper_White_e4b3093c-fb9e-4167-be00-c1d3d186ab4c.jpg?v=1782848408	vision:qwen2.5vl:7b
+gid://shopify/Product/1500095545456	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/417164fa181ee7627d7ba0b6696fb406.jpg?v=1745423345	vision:qwen2.5vl:7b
+gid://shopify/Product/7882801971251	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/1c089f03be9b58dd2969990497a603ca.jpg?v=1783878993	vision:qwen2.5vl:7b
+gid://shopify/Product/7897171427379	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AWASH-Theopetra.jpg?v=1784828878	vision:qwen2.5vl:7b
+gid://shopify/Product/7817256173619	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/c7484a5969cb2f84743daec0e65bd75c.jpg?v=1776041110	vision:qwen2.5vl:7b
+gid://shopify/Product/7898788724787	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBWW05_f67a2dd7-af23-43f8-ad5b-e68ed3f08c6f.jpg?v=1785082091	vision:qwen2.5vl:7b
+gid://shopify/Product/1496803803248	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/739c606219aac29c77d17175512b8b1b.jpg?v=1775104599	vision:qwen2.5vl:7b
+gid://shopify/Product/7870482776115	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT15108_1e89807e-f032-49da-b980-eae808c1fc40.jpg?v=1782744041	vision:qwen2.5vl:7b
+gid://shopify/Product/6936703795251	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-SB-14_ac00d9a2-d5e0-408c-9628-f994bc1724b7.jpg?v=1733890405	vision:qwen2.5vl:7b
+gid://shopify/Product/1497407717488	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/dc6b2cc6e89265ae447873cbbd773ef5_09bf5045-c3f9-41e6-8e2a-c0e043fd3405.jpg?v=1572309697	vision:qwen2.5vl:7b
+gid://shopify/Product/6679740645427	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/RS15691_image1.jpg?v=1756312628	vision:qwen2.5vl:7b
+gid://shopify/Product/6679577722931	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R10191_image2.jpg?v=1756329162	vision:qwen2.5vl:7b
+gid://shopify/Product/7897176145971	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Furrow-SQ.jpg?v=1784829205	vision:qwen2.5vl:7b
+gid://shopify/Product/7885840547891	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75128_ff12447c-7c02-4381-876b-51f01b9e9768.jpg?v=1784140814	vision:qwen2.5vl:7b
+gid://shopify/Product/7864786223155	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Y48305FJ.jpg?v=1781891538	vision:qwen2.5vl:7b
+gid://shopify/Product/7421456056371	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/105_3014_CS_59c94dd3-ea2a-4891-9c3f-41a0bc95b5a1.jpg?v=1753306435	vision:qwen2.5vl:7b
+gid://shopify/Product/7430801588275	Chinoiserie	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/YENNAYER_Amber_52x150cm_WP20752_1_e1598baf-fb36-4d2d-be25-44440ec23950.jpg?v=1748367436	vision:qwen2.5vl:7b
+gid://shopify/Product/6948080484403	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT78762.jpg?v=1773971825	vision:qwen2.5vl:7b
+gid://shopify/Product/7821709541427	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/c7b0840b2bc2e54fb7f254fef46c026e.jpg?v=1781832678	vision:qwen2.5vl:7b
+gid://shopify/Product/7896261951539	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3758_21.jpg?v=1784732230	vision:qwen2.5vl:7b
+gid://shopify/Product/7799389454387	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/34cb42b62efb0c7834c6fa9b61f90cdd.jpg?v=1773706496	vision:qwen2.5vl:7b
+gid://shopify/Product/7898962657331	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W2AL05.jpg?v=1785087087	vision:qwen2.5vl:7b
+gid://shopify/Product/1497237028976	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/50296950f04b153fe74de385bce44078.jpg?v=1572309620	vision:qwen2.5vl:7b
+gid://shopify/Product/7864796479539	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/thrd_11190.jpg?v=1781894580	vision:qwen2.5vl:7b
+gid://shopify/Product/7882743414835	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0161834_crystal-cloud-beige-beaded-wallpaper.jpg?v=1783865274	vision:qwen2.5vl:7b
+gid://shopify/Product/7585005535283	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ARTE_LAZUR_67572__5x5_KOROSEAL_db0f4355-38f0-48e3-8a10-11d9760584e9.jpg?v=1751965419	vision:qwen2.5vl:7b
+gid://shopify/Product/7692073467955	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/marburg-papis-loveday-2_4a182eca-fa37-48a1-9e02-5d797dc1b4f0.jpg?v=1761154247	vision:qwen2.5vl:7b
+gid://shopify/Product/7870976983091	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0043883_lottie-yellow-stripe-wallpaper.jpg?v=1782816047	vision:qwen2.5vl:7b
+gid://shopify/Product/1499911487600	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/reserve-chardonnay_8f48b1b1-f87b-4c9c-81bc-1fc3cc1d759d.jpg?v=1777481524	vision:qwen2.5vl:7b
+gid://shopify/Product/7877193400371	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091495_yujin-cork-charcoal.jpg?v=1783366530	vision:qwen2.5vl:7b
+gid://shopify/Product/7898787414067	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBVC09_5b81ea9c-8d3e-4397-a4bd-ec5f1e92e948.jpg?v=1785081971	vision:qwen2.5vl:7b
+gid://shopify/Product/7388467757107	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ALI-001_356c8095-8a19-4024-81a5-aeacdb2c437d.jpg?v=1740077205	vision:qwen2.5vl:7b
+gid://shopify/Product/7786970415155	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/124081_TILE_01__15076.1769760677.jpg?v=1772077141	vision:qwen2.5vl:7b
+gid://shopify/Product/7884123668531	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/malcolm-teal-geo.jpg?v=1783974410	vision:qwen2.5vl:7b
+gid://shopify/Product/7884119801907	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/malcolm-natural-geo.jpg?v=1783974349	vision:qwen2.5vl:7b
+gid://shopify/Product/7897173426227	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Unify-300.jpg?v=1784828974	vision:qwen2.5vl:7b
+gid://shopify/Product/7375626469427	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_272d9994-6064-497f-bad3-0299ec030150.png?v=1722468552	vision:qwen2.5vl:7b
+gid://shopify/Product/7552686620723	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T42058_6e72c0eb-d0ed-4e33-8f15-0959695e9f76.jpg?v=1781202666	vision:qwen2.5vl:7b
+gid://shopify/Product/6829111902259	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prw-920892-thi-451.jpg?v=1781716809	vision:qwen2.5vl:7b
+gid://shopify/Product/7878155829299	Chinoiserie	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LIBo2GEXBgaHBWzM0KnG_81c94e70-50e1-4e76-9669-d28a966e0388.webp?v=1783456978	vision:qwen2.5vl:7b
+gid://shopify/Product/7375766782003	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_92059c92-ebdd-49a5-84c5-2bdc8a6ce32a.png?v=1722461012	vision:qwen2.5vl:7b
+gid://shopify/Product/1495401070704	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ScreenShot2024-03-13at2.00.05PM.png?v=1710363644	vision:qwen2.5vl:7b
+gid://shopify/Product/7884811862067	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0155003_sainsbury-light-blue-forest-wallpaper_1513a912-b2bb-47e5-8cb0-46f46923f6df.jpg?v=1784041143	vision:qwen2.5vl:7b
+gid://shopify/Product/7375653109811	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_81b287c5-8316-441b-b960-c628b18c4cef.png?v=1722466684	vision:qwen2.5vl:7b
+gid://shopify/Product/7882760093747	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0150154_loom-wallpaper-warm-grey.jpg?v=1783866206	vision:qwen2.5vl:7b
+gid://shopify/Product/7800251842611	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Oracle_A209-834-Cielo.jpg?v=1773880432	vision:qwen2.5vl:7b
+gid://shopify/Product/6829126320179	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prw-921003-wle-02.jpg?v=1781716849	vision:qwen2.5vl:7b
+gid://shopify/Product/7584960970803	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ARTE_LAZUR_67578__5x5_KOROSEAL_5295b2b6-4e82-41a3-bccc-284688566de6.jpg?v=1751961667	vision:qwen2.5vl:7b
+gid://shopify/Product/1495401660528	Chinoiserie	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ScreenShot2024-03-13at2.15.31PM.png?v=1710364549	vision:qwen2.5vl:7b
+gid://shopify/Product/7896277352499	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/veraneo-blue-repeated-patterns-coordonne.jpg?v=1784734425	vision:qwen2.5vl:7b
+gid://shopify/Product/1497256951920	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1084f331035972d6195ccc312b5376fc.jpg?v=1572309625	vision:qwen2.5vl:7b
+gid://shopify/Product/7880575516723	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tightweave_jute-warmth.jpg?v=1783695698	vision:qwen2.5vl:7b
+gid://shopify/Product/7880942878771	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-wall-rayures-jumelles-wall-colonne-111b01b570922b5e95fcbc8c6a34_8c598f68-ab58-4fc7-8368-edd00801f9c0.jpg?v=1783789900	vision:qwen2.5vl:7b
+gid://shopify/Product/7864800378931	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az52233sn.jpg?v=1781894828	vision:qwen2.5vl:7b
+gid://shopify/Product/7855830597683	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R18866_interior1.webp?v=1781029576	vision:qwen2.5vl:7b
+gid://shopify/Product/1497287655536	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/e782c1585b510542b8c91e0a5dde1a12.jpg?v=1572309631	vision:qwen2.5vl:7b
+gid://shopify/Product/7822323089459	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0068223_connecting-space-midnight-blue_650.jpg?v=1776902572	vision:qwen2.5vl:7b
+gid://shopify/Product/7375653371955	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_d88365a2-9d01-4214-8128-2432aff130fd.png?v=1722466659	vision:qwen2.5vl:7b
+gid://shopify/Product/4396391202867	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9192_quadrat_be9c105f-523f-4b63-b9c6-04e935aeaac5.jpg?v=1576169454	vision:qwen2.5vl:7b
+gid://shopify/Product/7813309005875	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE527__black.jpg?v=1775511859	vision:qwen2.5vl:7b
+gid://shopify/Product/7813309038643	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE526__gold.jpg?v=1775511861	vision:qwen2.5vl:7b
+gid://shopify/Product/1495976411248	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/962d434a4fbad490c2f2498296abfd25.jpg?v=1572309184	vision:qwen2.5vl:7b
+gid://shopify/Product/7882839064627	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/2a1fc99ae1eaabb7c5ea5e222b53a4a0.jpg?v=1783881554	vision:qwen2.5vl:7b
+gid://shopify/Product/7519963152435	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/2n21-56.jpg?v=1739410053	vision:qwen2.5vl:7b
+gid://shopify/Product/7882838245427	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/2d998caeb33bbd9a17a94a95b15590ae.jpg?v=1783881499	vision:qwen2.5vl:7b
+gid://shopify/Product/7866356891699	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/coleopter-2602-5-wallpapersrepeated-patterns-coordonne.jpg?v=1782183463	vision:qwen2.5vl:7b
+gid://shopify/Product/6936692326451	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-GD-04_35dc4480-c642-4960-8177-7d754ebbde92.jpg?v=1733891212	vision:qwen2.5vl:7b
+gid://shopify/Product/6936692359219	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-GD-05_cada8688-998b-4e12-b379-883280507119.jpg?v=1733891210	vision:qwen2.5vl:7b
+gid://shopify/Product/7896578949171	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KT-CONTACT-004_0.jpg?v=1784752667	vision:qwen2.5vl:7b
+gid://shopify/Product/7855831842867	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20949_interior1.webp?v=1781029681	vision:qwen2.5vl:7b
+gid://shopify/Product/7429002166323	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6461571.jpg?v=1739303643	vision:qwen2.5vl:7b
+gid://shopify/Product/7429003247667	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6462253.jpg?v=1739303596	vision:qwen2.5vl:7b
+gid://shopify/Product/7429003313203	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6462255.jpg?v=1739303593	vision:qwen2.5vl:7b
+gid://shopify/Product/7429003444275	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6462258.jpg?v=1739303587	vision:qwen2.5vl:7b
+gid://shopify/Product/7429003870259	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6462272.jpg?v=1739303567	vision:qwen2.5vl:7b
+gid://shopify/Product/7429004165171	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6462325.jpg?v=1739303553	vision:qwen2.5vl:7b
+gid://shopify/Product/7822352154675	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0066823_grasmere-weave-faded-cobalt_650.jpg?v=1776905750	vision:qwen2.5vl:7b
+gid://shopify/Product/7884808683571	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0156449_mystic-moth-black-wallpaper.jpg?v=1784040955	vision:qwen2.5vl:7b
+gid://shopify/Product/7429006950451	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6474986.jpg?v=1739303441	vision:qwen2.5vl:7b
+gid://shopify/Product/7429007015987	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6474988.jpg?v=1739303437	vision:qwen2.5vl:7b
+gid://shopify/Product/7429008326707	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/64735205.jpg?v=1739303365	vision:qwen2.5vl:7b
+gid://shopify/Product/6829005635635	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prw-920014-aer-03.jpg?v=1781715390	vision:qwen2.5vl:7b
+gid://shopify/Product/6785291124787	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/VV228_grille_BLACKWHITE_1072x_489252d8-7141-4626-8b50-4dc752e4194a.webp?v=1734414918	vision:qwen2.5vl:7b
+gid://shopify/Product/4509298753587	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/metm-574.jpg?v=1762301022	vision:qwen2.5vl:7b
+gid://shopify/Product/7864803426355	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CALW-152.jpg?v=1781895023	vision:qwen2.5vl:7b
+gid://shopify/Product/7375761834035	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_08e19610-e9c9-4f02-8d18-4b87d988b68c.png?v=1722461103	vision:qwen2.5vl:7b
+gid://shopify/Product/7888107044915	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/TWW10931_e3ca4140-790f-461f-8ed1-727ef668cab2.jpg?v=1784353218	vision:qwen2.5vl:7b
+gid://shopify/Product/1497283723376	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a4bfcb723d7231fffb44f048a307bac1.jpg?v=1572309631	vision:qwen2.5vl:7b
+gid://shopify/Product/7872058392627	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10307_ff56da3d-4b72-4bed-a178-2ee9dbbd0795.jpg?v=1782873632	vision:qwen2.5vl:7b
+gid://shopify/Product/7864806080563	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/y47662sv.jpg?v=1781895179	vision:qwen2.5vl:7b
+gid://shopify/Product/7388482535475	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KIN-04_61986062-19ae-4a2c-8cd4-333aec7c5560.jpg?v=1736207744	vision:qwen2.5vl:7b
+gid://shopify/Product/7896522719283	Chevron	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/EKM3709.jpg?v=1784745099	vision:qwen2.5vl:7b
+gid://shopify/Product/4509296623667	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/lyr-3376_8.jpg?v=1762299832	vision:qwen2.5vl:7b
+gid://shopify/Product/1500055502960	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4773230fc5d8f4852d57f107b6e01ca6.jpg?v=1745457610	vision:qwen2.5vl:7b
+gid://shopify/Product/7664629022771	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ScreenShot2023-04-07at9.15.57AM.png?v=1756871272	vision:qwen2.5vl:7b
+gid://shopify/Product/7876178477107	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10435_f69707cb-56f8-406d-acc4-38e1d062f47f.jpg?v=1783122044	vision:qwen2.5vl:7b
+gid://shopify/Product/7871977160755	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/A03-WD-04W_Whirling-Dervish-Wallpaper_Navy.jpg?v=1782866439	vision:qwen2.5vl:7b
+gid://shopify/Product/7864802934835	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az51822im.jpg?v=1781894985	vision:qwen2.5vl:7b
+gid://shopify/Product/7870976917555	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0043887_lottie-slate-stripe-wallpaper.jpg?v=1782816040	vision:qwen2.5vl:7b
+gid://shopify/Product/7882749640755	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0161630_operetta-navy-metallic-columns-wallpaper.jpg?v=1783865659	vision:qwen2.5vl:7b
+gid://shopify/Product/7885718945843	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0163632_ramona-grey-distressed-texture-wallpaper.jpg?v=1784122662	vision:qwen2.5vl:7b
+gid://shopify/Product/4351282249779	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/NEWMOR_e07b78ee-6742-4139-9d61-5f37725b27ae.jpg?v=1573939469	vision:qwen2.5vl:7b
+gid://shopify/Product/1500348022896	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6445c0a37c548cc0fb0ee1045d115324_52e52e5b-7f97-4120-bd6f-92867325a12f.jpg?v=1572310360	vision:qwen2.5vl:7b
+gid://shopify/Product/1500348448880	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/fa309a77d1f2f1be92e73058f5687cc5_54c773bb-16bc-402b-8bf3-f06f8ab8e1f4.jpg?v=1572310360	vision:qwen2.5vl:7b
+gid://shopify/Product/7882833690675	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/27e24bd431d5896e56180eb3b9c312ef.jpg?v=1783881199	vision:qwen2.5vl:7b
+gid://shopify/Product/7552700284979	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T19636.jpg?v=1762251502	vision:qwen2.5vl:7b
+gid://shopify/Product/7375683420211	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_f2953968-1482-477b-8120-3f384b564d9d.png?v=1722464352	vision:qwen2.5vl:7b
+gid://shopify/Product/7882800922675	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8f6cff7536007b215df9ccf54e4b7930.jpg?v=1783878920	vision:qwen2.5vl:7b
+gid://shopify/Product/7881392226355	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T335_935e8af7-c774-4690-8d64-2ab0437fea6e.jpg?v=1783806011	vision:qwen2.5vl:7b
+gid://shopify/Product/7876805296179	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PU2902-4-Caramel_85118de2-bd9b-4487-a38c-4cf74a537a01.jpg?v=1783266013	vision:qwen2.5vl:7b
+gid://shopify/Product/7897015058483	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/TWW14583.jpg?v=1784814013	vision:qwen2.5vl:7b
+gid://shopify/Product/4320948977715	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/370506_7eb66c12-1171-476e-8b24-56e5c407c546.jpg?v=1745349493	vision:qwen2.5vl:7b
+gid://shopify/Product/6679647551539	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R15501_image2_63c41252-8556-46a5-80b8-bba9aa0de397.jpg?v=1756327413	vision:qwen2.5vl:7b
+gid://shopify/Product/7879121993779	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/indienne_wallpaper_cobalt_11.jpg?v=1783510835	vision:qwen2.5vl:7b
+gid://shopify/Product/7885720027187	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0160501_alba-cream-open-weave-wallpaper.jpg?v=1784122725	vision:qwen2.5vl:7b
+gid://shopify/Product/1500349399152	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6fdb336d20e59781f9bcc1eea02e5ab0_0e13124c-f5ca-4348-bc1c-2f825aa9291e.jpg?v=1572310360	vision:qwen2.5vl:7b
+gid://shopify/Product/1500349890672	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/7a6660cde9ab962bc7307e14a37b62d0_12c40ec1-6a4e-44ae-b6e0-806afcbae950.jpg?v=1572310360	vision:qwen2.5vl:7b
+gid://shopify/Product/7887505915955	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0161559_mystic-navy-celestial-wallpaper.jpg?v=1784295429	vision:qwen2.5vl:7b
+gid://shopify/Product/7855821389875	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20181_interior1.webp?v=1781028916	vision:qwen2.5vl:7b
+gid://shopify/Product/7896505024563	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DGC1033.jpg?v=1784743579	vision:qwen2.5vl:7b
+gid://shopify/Product/7297409351731	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW34602.jpg?v=1748376870	vision:qwen2.5vl:7b
+gid://shopify/Product/7870091591731	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0068912_agave-light-pink-faux-grasscloth-wallpaper.jpg?v=1782693612	vision:qwen2.5vl:7b
+gid://shopify/Product/1498784301168	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/7dda9bd367347eb4a018b595684ee31d.jpg?v=1745458577	vision:qwen2.5vl:7b
+gid://shopify/Product/7867618099251	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT79138_1de965e1-1212-4d44-9438-d9262b6aa5f8.jpg?v=1782366065	vision:qwen2.5vl:7b
+gid://shopify/Product/7877196546099	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36807_7_aac9ccd1-ae2c-480d-9118-dc8ca4d9506b.jpg?v=1783366855	vision:qwen2.5vl:7b
+gid://shopify/Product/1500350775408	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/7f7951a00f9768170799c02c0cce30b7_30b81154-3f37-44f8-8d94-20eba2d24b0f.jpg?v=1572310360	vision:qwen2.5vl:7b
+gid://shopify/Product/1498373357680	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wbs-39603-sample-moroccan-bronze-horizontal-tight-emboss-hollywood-wallcoverings.jpg?v=1775726401	vision:qwen2.5vl:7b
+gid://shopify/Product/7880946679859	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-marr-marr-magascar-8377a03522cc5fea062140f3b984_0ff38bf3-f202-43ec-a6c7-723e2bc364bb.jpg?v=1783790433	vision:qwen2.5vl:7b
+gid://shopify/Product/7882746527795	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0159110_jemma-dark-grey-distressed-wallpaper.jpg?v=1783865468	vision:qwen2.5vl:7b
+gid://shopify/Product/7865288851507	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/9205_8e11873a-acdc-408f-87cf-596212dd34a4.jpg?v=1782002424	vision:qwen2.5vl:7b
+gid://shopify/Product/7885808009267	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75113_f34c9138-cb6d-4cb9-aeb8-490116bb68c0.jpg?v=1784137216	vision:qwen2.5vl:7b
+gid://shopify/Product/7883957043251	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0155980_johnny-green-wallpaper.jpg?v=1783970566	vision:qwen2.5vl:7b
+gid://shopify/Product/7865284657203	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/product_conch_bimini_cc.jpg?v=1782000384	vision:qwen2.5vl:7b
+gid://shopify/Product/7897174835251	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Ecliptic-Luminary-Web-1-scaled.jpg?v=1784829097	vision:qwen2.5vl:7b
+gid://shopify/Product/7880946450483	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-marr-marr-magascar-8377a03522cc5fea062140f3b984_99b30f26-66d8-45c7-92a1-9c5902e33a88.jpg?v=1783790407	vision:qwen2.5vl:7b
+gid://shopify/Product/7297456668723	Chinoiserie	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW42802.jpg?v=1748376500	vision:qwen2.5vl:7b
+gid://shopify/Product/7864799526963	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az52354md.jpg?v=1781894757	vision:qwen2.5vl:7b
+gid://shopify/Product/1497237520496	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/2e6926729300c80b73104940258aead8.jpg?v=1572309621	vision:qwen2.5vl:7b
+gid://shopify/Product/7375854862387	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_7b37ecbf-f06b-4527-afa8-8a103b1db1ca.png?v=1722459302	vision:qwen2.5vl:7b
+gid://shopify/Product/7882755342387	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0150180_balance-wallpaper-jewel.jpg?v=1783865947	vision:qwen2.5vl:7b
+gid://shopify/Product/1500351496304	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a32b47126c58dfc30970bf193c9aa12d_c0759c9c-fd15-46da-a3e8-232f5856d057.jpg?v=1572310360	vision:qwen2.5vl:7b
+gid://shopify/Product/7880971157555	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100139.jpg?v=1783750512	vision:qwen2.5vl:7b
+gid://shopify/Product/7879901478963	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T24048_2873c2be-92d3-4dbd-b525-5bb52566fc6d.jpg?v=1783626023	vision:qwen2.5vl:7b
+gid://shopify/Product/7297427472435	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW38400.jpg?v=1748376704	vision:qwen2.5vl:7b
+gid://shopify/Product/7297361084467	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SG11802.jpg?v=1748377399	vision:qwen2.5vl:7b
+gid://shopify/Product/7297360789555	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SG11800.jpg?v=1748377401	vision:qwen2.5vl:7b
+gid://shopify/Product/7886391902259	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0163343_herrgard-evergreen-stripe-wallpaper.jpg?v=1784209046	vision:qwen2.5vl:7b
+gid://shopify/Product/6936698486835	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LL-01_67e70f59-d070-476b-9f88-4950408da81c.jpg?v=1733890826	vision:qwen2.5vl:7b
+gid://shopify/Product/1500543058032	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/b3db887314050d52a7f8779e528b1b6c_b49f06ed-966c-44bf-ac08-fd53b8c5aebd.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/1500543189104	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/3c1901160ff936b3957b2ec7d24f9026_4d4a4df7-a0a3-4dc2-9561-0a12712f5e6c.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/7883869749299	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T448_de8780f8-f409-471e-b27c-fa4773cc73d0.jpg?v=1783960815	vision:qwen2.5vl:7b
+gid://shopify/Product/7297407123507	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW33808.jpg?v=1748376893	vision:qwen2.5vl:7b
+gid://shopify/Product/1500543352944	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ac3131b93d83fc3b524b67213085ae83_8aa8ca4f-e6d7-42ca-b0fc-c501a324246f.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/7874372370483	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6748701__03993.1730990309.jpg?v=1783046414	vision:qwen2.5vl:7b
+gid://shopify/Product/7864805425203	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BL50108EM.jpg?v=1781892653	vision:qwen2.5vl:7b
+gid://shopify/Product/7833329041459	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Dolly-lettuce-green-Wallpaper_2da8154c-b6f8-4bad-8606-c97d794caeae.jpg?v=1778629844	vision:qwen2.5vl:7b
+gid://shopify/Product/1500544172144	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ead53a0a309dd900d20dd5c6e1b51e18_bf107a4d-de19-450a-9f70-6983f36d1db0.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/7864803983411	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/VNA-9431.jpg?v=1781892538	vision:qwen2.5vl:7b
+gid://shopify/Product/7896221188147	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/03072020102759_panel.jpg?v=1784730680	vision:qwen2.5vl:7b
+gid://shopify/Product/7898960101427	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W2UL10.jpg?v=1785087033	vision:qwen2.5vl:7b
+gid://shopify/Product/7873687519283	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10335_60a36c11-24f4-48ec-93ff-781e4cbd27ff.jpg?v=1782956440	vision:qwen2.5vl:7b
+gid://shopify/Product/1500544532592	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1fdd9e9f68f850cfaf10bb007848b7b9_94dc4629-3790-47c0-8d42-8b7e97e9b654.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/1499908800624	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/reserve-calistoga_1283ac13-dc28-4695-8e0f-d166c1e2bffe.jpg?v=1777481302	vision:qwen2.5vl:7b
+gid://shopify/Product/7880970076211	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100106.jpg?v=1783750376	vision:qwen2.5vl:7b
+gid://shopify/Product/7297406206003	Chinoiserie	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW33208.jpg?v=1748376908	vision:qwen2.5vl:7b
+gid://shopify/Product/1500545253488	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/207926be7ceef25e6b15beb92a5e6fa4_70c049dd-1828-4be0-bc9a-6e987a30b2bd.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/7896892407859	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KT-EXPANSE_BY_RACHEL_AND_NICK_COPE-001_0.jpg?v=1784792179	vision:qwen2.5vl:7b
+gid://shopify/Product/7375652749363	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_ef8bdb06-3097-435a-985f-220262eb6189.png?v=1722466722	vision:qwen2.5vl:7b
+gid://shopify/Product/7297408532531	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW34400.jpg?v=1748376877	vision:qwen2.5vl:7b
+gid://shopify/Product/7867463008307	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT79109_228dbf3d-0575-46f2-a622-2a9ca6665d07.jpg?v=1782326411	vision:qwen2.5vl:7b
+gid://shopify/Product/1500545581168	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/929dc5e620528c277cb347a724e93a34_2b365545-429d-473f-84f0-9268405b5f84.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/1500545941616	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/d275ebbe851c1954a2c380e630c5a775_14e0fe37-5b9f-42d4-9f8a-3713d7a11ce1.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/7375857647667	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_ee1177df-4220-42c8-9994-df587d9f8b35.png?v=1722459268	vision:qwen2.5vl:7b
+gid://shopify/Product/7864793628723	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/lum-3883.webp?v=1781894422	vision:qwen2.5vl:7b
+gid://shopify/Product/7883736875059	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T425_5381b7c7-6b80-4c11-b78b-d7bb3ee7fe0e.jpg?v=1783946417	vision:qwen2.5vl:7b
+gid://shopify/Product/6930820202547	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/croppy_GLM-4183-SAMPLE.jpg?v=1775579016	vision:qwen2.5vl:7b
+gid://shopify/Product/7870604738611	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36418_3_cfe93bd7-2945-4fff-814a-dfb1cecffe50.jpg?v=1782765655	vision:qwen2.5vl:7b
+gid://shopify/Product/1499627847792	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/45b5b3a85b0d782fa8852735b4f13bf7.jpg?v=1745458014	vision:qwen2.5vl:7b
+gid://shopify/Product/1500546498672	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/065e647f8213eb11b4d0c753421633c4_fcd76f5f-166a-4531-bf8c-aa0a3908b055.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/6930822791219	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/croppy_GLM-4185-SAMPLE.jpg?v=1775579039	vision:qwen2.5vl:7b
+gid://shopify/Product/7880971223091	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100141.jpg?v=1783750519	vision:qwen2.5vl:7b
+gid://shopify/Product/7864804802611	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az53228nl.jpg?v=1781895101	vision:qwen2.5vl:7b
+gid://shopify/Product/7880889565235	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T24425_1a86570d-bb93-4b04-910a-15f98cbae3f2.jpg?v=1783737611	vision:qwen2.5vl:7b
+gid://shopify/Product/1496325980272	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/croca-93011-sample-lucy-large-crocodile-hollywood-wallcoverings.jpg?v=1775723168	vision:qwen2.5vl:7b
+gid://shopify/Product/7800019714099	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Caba_A194-431-Cashmere.jpg?v=1773852722	vision:qwen2.5vl:7b
+gid://shopify/Product/1496326275184	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/croca-93013-sample-lucy-large-crocodile-hollywood-wallcoverings.jpg?v=1775723175	vision:qwen2.5vl:7b
+gid://shopify/Product/7891177406515	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0149375_graceful-willow-wallpaper-putty.jpg?v=1784468375	vision:qwen2.5vl:7b
+gid://shopify/Product/7874187952179	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10358_ce0d2002-0785-4455-8b49-95d9b9701adb.jpg?v=1783014019	vision:qwen2.5vl:7b
+gid://shopify/Product/7876194172979	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36656_9_8dc4630c-6266-48bd-a8e8-4a135d702af0.jpg?v=1783125631	vision:qwen2.5vl:7b
+gid://shopify/Product/1500546793584	Herringbone	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/c2915fbafe58bd9653c5ff0c6b62749e_f1dda767-d8ba-4c10-b6b3-e259fc4bdee5.jpg?v=1572310393	vision:qwen2.5vl:7b
+gid://shopify/Product/6752392740915	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-06-10at4.16.40PM.png?v=1748366721	vision:qwen2.5vl:7b
+gid://shopify/Product/7767010508851	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/linsey_sky_se21_11.jpg?v=1769735029	vision:qwen2.5vl:7b
+gid://shopify/Product/7878155730995	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sI0VOztww3QqhUOEjTzi_8ea4f58e-082d-4204-a3f8-c954d45fa69c.webp?v=1783456957	vision:qwen2.5vl:7b
+gid://shopify/Product/7584953139251	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KWC_67812_MUGA-SILK_6e817c8f-f189-43c7-ac66-8bff5217a89c.jpg?v=1751961332	vision:qwen2.5vl:7b
+gid://shopify/Product/7883958779955	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0156366_thicket-charcoal-wallpaper.jpg?v=1783970661	vision:qwen2.5vl:7b
+gid://shopify/Product/4484541218867	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WBN00121911.jpg?v=1745347652	vision:qwen2.5vl:7b
+gid://shopify/Product/7864785895475	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/az53118lv.jpg?v=1781894224	vision:qwen2.5vl:7b
+gid://shopify/Product/7874640511027	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10376.jpg?v=1783068053	vision:qwen2.5vl:7b
+gid://shopify/Product/1500548628592	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/2e544014d88bd60adc4ec0f287f84aad_709d0a23-7feb-47aa-a0e1-3ee8abbe5587.jpg?v=1572310394	vision:qwen2.5vl:7b
+gid://shopify/Product/1500548857968	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/553e00f13f8d8bb2f6fc7e6840ca09b1_8e2a1246-b792-4316-b6dd-5c7861e601ad.jpg?v=1572310394	vision:qwen2.5vl:7b
+gid://shopify/Product/7584953401395	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KWC_67814_MUGA-SILK_92cfc60b-15d1-404e-8ac7-3949f680f885.jpg?v=1751961339	vision:qwen2.5vl:7b
+gid://shopify/Product/1500554690672	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/01b1738bcafc8932fa3b0ac5e1be6df3_0d29f397-956b-4df7-a2c3-5ff52acadee5.jpg?v=1572310394	vision:qwen2.5vl:7b
+gid://shopify/Product/7375962538035	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_b21fe77a-4f3c-4706-a5c9-48ec1122585b.png?v=1722455561	vision:qwen2.5vl:7b
+gid://shopify/Product/1500555051120	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/5d33ebf7ad234ff33a8db7865fb5e2b1_fc98cdd2-0378-4e76-b6ca-480cb01658f5.jpg?v=1572310394	vision:qwen2.5vl:7b
+gid://shopify/Product/7297480228915	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW44808.jpg?v=1748376324	vision:qwen2.5vl:7b
+gid://shopify/Product/7898916585523	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MGI9906.jpg?v=1785086135	vision:qwen2.5vl:7b
+gid://shopify/Product/7878157631539	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ue3Cqv7JU9WXV8WJxAea.webp?v=1783457199	vision:qwen2.5vl:7b
+gid://shopify/Product/7877192155187	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091487_meilin-grasscloth-classic-navy.jpg?v=1783366262	vision:qwen2.5vl:7b
+gid://shopify/Product/7883958255667	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0156339_thicket-blue-wallpaper.jpg?v=1783970657	vision:qwen2.5vl:7b
+gid://shopify/Product/6685837033523	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PSW1155RL.jpg?v=1740774881	vision:qwen2.5vl:7b
+gid://shopify/Product/7388489154611	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/TWI-007_ccf9c076-0e44-4dee-ab1c-ac4fe5997ae1.jpg?v=1740076864	vision:qwen2.5vl:7b
+gid://shopify/Product/7822341701683	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/default-image_650_4fb2caa7-269e-4aef-960c-47da1e7f30cb.png?v=1776905330	vision:qwen2.5vl:7b
+gid://shopify/Product/7297391919155	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HG11101.jpg?v=1748377056	vision:qwen2.5vl:7b
+gid://shopify/Product/7297376518195	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LN21200.jpg?v=1748377209	vision:qwen2.5vl:7b
+gid://shopify/Product/7874077589555	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/33553_111_03cfcc64-23b9-4faf-87e0-972c9ecd1326.jpg?v=1782992432	vision:qwen2.5vl:7b
+gid://shopify/Product/7375710027827	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_09ed4947-68b3-4989-a70d-439a9b7e8f2f.png?v=1722463029	vision:qwen2.5vl:7b
+gid://shopify/Product/7863634952243	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/janeiro-rosa-murals-coordonne.jpg?v=1781716532	vision:qwen2.5vl:7b
+gid://shopify/Product/7813309562931	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/img_d998d83a-c5c1-4a3e-aea8-d90bbf195ee4.jpg?v=1775512356	vision:qwen2.5vl:7b
+gid://shopify/Product/7297408401459	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW34308.jpg?v=1748376879	vision:qwen2.5vl:7b
+gid://shopify/Product/7375661563955	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_2e33f73e-340e-47fb-a577-4aca870bbb2f.png?v=1722466012	vision:qwen2.5vl:7b
+gid://shopify/Product/7896539955251	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ESC2608.jpg?v=1784746568	vision:qwen2.5vl:7b
+gid://shopify/Product/7297375207475	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LN20901.jpg?v=1748377225	vision:qwen2.5vl:7b
+gid://shopify/Product/1500622880880	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/d5eaf3c4e5f4759907d2ba407e0517f5_35c69a07-3ab0-49bf-be1c-51aeafdf2ebd.jpg?v=1733869791	vision:qwen2.5vl:7b
+gid://shopify/Product/7297350598707	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SG10708.jpg?v=1748377465	vision:qwen2.5vl:7b
+gid://shopify/Product/1500623077488	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f9d95665d1904dd17021e571dbd7c34e_24a0bf4f-da9c-43fb-b6ec-c37e472cda80.jpg?v=1733869789	vision:qwen2.5vl:7b
+gid://shopify/Product/7866350370867	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/selva-de-mar-1992-2-wallpapersrepeated-patterns-coordonne.jpg?v=1782183068	vision:qwen2.5vl:7b
+gid://shopify/Product/7297407549491	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW34000.jpg?v=1748376887	vision:qwen2.5vl:7b
+gid://shopify/Product/7297423507507	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW37800.jpg?v=1748376735	vision:qwen2.5vl:7b
+gid://shopify/Product/7297412104243	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NW35405.jpg?v=1748376846	vision:qwen2.5vl:7b
+gid://shopify/Product/7297354694707	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SG11202.jpg?v=1748377440	vision:qwen2.5vl:7b
+gid://shopify/Product/7297354956851	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SG11210.jpg?v=1748377438	vision:qwen2.5vl:7b
+gid://shopify/Product/7882744561715	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0151544_flowing-wallpaper-dark-taupe.jpg?v=1783865346	vision:qwen2.5vl:7b
+gid://shopify/Product/7882765041715	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0152475_washed-ramie-dove-grey-wallpaper.jpg?v=1783866465	vision:qwen2.5vl:7b
+gid://shopify/Product/7789366345779	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW123-03-washi-_01.jpg?v=1772251539	vision:qwen2.5vl:7b
+gid://shopify/Product/1500624683120	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/da86fa636c3f8b5f61e0ecee1ad2728b_bfd5dc91-4fc7-42bf-b24f-9eba04cd77f8.jpg?v=1733869776	vision:qwen2.5vl:7b
+gid://shopify/Product/1500624945264	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/3ebc032acebfb875fe5092c8fc2c9f34_51deeebb-7818-4914-80b9-c4c837c9197c.jpg?v=1572310414	vision:qwen2.5vl:7b
+gid://shopify/Product/7297379303475	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LN30302.jpg?v=1748377175	vision:qwen2.5vl:7b
+gid://shopify/Product/7297379500083	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LN30308.jpg?v=1748377173	vision:qwen2.5vl:7b
+gid://shopify/Product/7424928350259	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W3844_1116_fccca8bd-5e99-4c7a-9625-0cec3f729781.jpg?v=1753290514	vision:qwen2.5vl:7b
+gid://shopify/Product/1500625961072	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f07ca4f7df0d3bb6bccea17d61583dc3_a3109e5b-395d-4238-a7e5-43947acd1546.jpg?v=1733869766	vision:qwen2.5vl:7b
+gid://shopify/Product/6936685117491	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-CL-23_4a3c6faf-92bc-414f-bc10-243b4df8c49f.jpg?v=1733891617	vision:qwen2.5vl:7b
+gid://shopify/Product/6936685183027	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-CL-25_6f4955eb-d05e-4f7a-8ebc-167e26b95762.jpg?v=1733891612	vision:qwen2.5vl:7b
+gid://shopify/Product/7421453238323	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/103_1005_CS_96b7b940-5308-40f5-9a96-3e4f36fd2213.jpg?v=1753306612	vision:qwen2.5vl:7b
+gid://shopify/Product/1499724120176	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xww-53072-sample-bellaire-faux-finish-durable-hollywood-wallcoverings.jpg?v=1775703573	vision:qwen2.5vl:7b
+gid://shopify/Product/6936685084723	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-CL-22_e72922f2-92b9-4de2-a26d-531c3d47d060.jpg?v=1733891619	vision:qwen2.5vl:7b
+gid://shopify/Product/7868942155827	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0068825_benson-yellow-faux-fabric-wallpaper.jpg?v=1782482153	vision:qwen2.5vl:7b
+gid://shopify/Product/7775003607091	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NoChill_Nickel_2ecba983-08e9-466b-82f5-0945703c302a.jpg?v=1770778888	vision:qwen2.5vl:7b
+gid://shopify/Product/7102714314803	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/TCW007TCAI9UL037.jpg?v=1711558414	vision:qwen2.5vl:7b
+gid://shopify/Product/7775003344947	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/NoChill_Sand_61bb7f39-b3c6-4bdf-b1b5-e47543637de4.jpg?v=1770778865	vision:qwen2.5vl:7b
+gid://shopify/Product/6936697864243	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LK-06_229341e1-dc7f-48c2-bc7f-ae30a5233da7.jpg?v=1733890870	vision:qwen2.5vl:7b
+gid://shopify/Product/6936697667635	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LK-01_89702c0c-1e62-45e0-a0cc-100440a44990.jpg?v=1733890889	vision:qwen2.5vl:7b
+gid://shopify/Product/7882834935859	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/945965573f1e5e837132e22eae31da7d.jpg?v=1783881295	vision:qwen2.5vl:7b
+gid://shopify/Product/7816369831987	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sonnet_wc-vapor.jpg?v=1775856397	vision:qwen2.5vl:7b
+gid://shopify/Product/7375711010867	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_92a942d4-61a0-4b6c-88ea-c0cb67a66288.png?v=1722463009	vision:qwen2.5vl:7b
+gid://shopify/Product/7882834903091	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/1568243cde4da0b42f8c1eb262803dff.png?v=1783881291	vision:qwen2.5vl:7b
+gid://shopify/Product/1500080373872	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/580778f947f903f29fb94708e1f77529.jpg?v=1745423424	vision:qwen2.5vl:7b
+gid://shopify/Product/7871410110515	Chinoiserie	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10080_f3141863-83a4-444f-8565-3fc6d2496fbe.jpg?v=1782837636	vision:qwen2.5vl:7b
+gid://shopify/Product/7880969158707	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWGL-100079.jpg?v=1783750268	vision:qwen2.5vl:7b
+gid://shopify/Product/3740359491649	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HWC-61170-sample-clean.jpg?v=1774485901	vision:qwen2.5vl:7b
+gid://shopify/Product/7375664873523	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_02b9e9ac-cdf4-4cf5-a648-c8b9a9ca0525.png?v=1722465732	vision:qwen2.5vl:7b
+gid://shopify/Product/6679622287411	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R13923_image2.jpg?v=1756328045	vision:qwen2.5vl:7b
+gid://shopify/Product/1500080734320	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/046e4bc6b5627f0fa0d8dedc215eb801.jpg?v=1745423422	vision:qwen2.5vl:7b
+gid://shopify/Product/1498291667056	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/2934ccc5c68c83a6f8996ac7dc4db3c8.jpg?v=1572309872	vision:qwen2.5vl:7b
+gid://shopify/Product/6679622123571	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R13921_image2.jpg?v=1756328049	vision:qwen2.5vl:7b
+gid://shopify/Product/7898469662771	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/cmo-wli-07-10-1.jpg?v=1785005649	vision:qwen2.5vl:7b
+gid://shopify/Product/7880939470899	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-wall-domino-wall-volutes-ecb9f62d31255e4d1d87ff31ef66_18846f99-ccde-41e0-857d-7d5a885aeb9b.jpg?v=1783789394	vision:qwen2.5vl:7b
+gid://shopify/Product/6936757960755	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/CM144-2756.jpg?v=1733889401	vision:qwen2.5vl:7b
+gid://shopify/Product/7375684304947	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_44612d9b-29c8-4119-894f-93cb489573a9.png?v=1722464306	vision:qwen2.5vl:7b
+gid://shopify/Product/4351294210099	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/quarry-swatch-QRY020.jpg?v=1775883075	vision:qwen2.5vl:7b
+gid://shopify/Product/7879680491571	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0060387_nicolette-grey-floral-trail-wallpaper_8a79adbe-f65d-4f99-92b1-daaa79245290.jpg?v=1783590013	vision:qwen2.5vl:7b
+gid://shopify/Product/7883933024307	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dream-big-wall-quote-decals-jeffrey-stevens.jpg?v=1783967032	vision:qwen2.5vl:7b
+gid://shopify/Product/1500081487984	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6f7537c51f0d12f604995de6847cdd10.jpg?v=1745423419	vision:qwen2.5vl:7b
+gid://shopify/Product/1500242411632	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4a6434c6302226e02a4ebc06f7cb70af_3e8e7984-f1db-4a5b-ab90-6cd0a4233f1d.jpg?v=1572310354	vision:qwen2.5vl:7b
+gid://shopify/Product/7876132995123	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10395_388c9698-41ae-4e6a-8677-58b5b63873ba.jpg?v=1783114842	vision:qwen2.5vl:7b
+gid://shopify/Product/7896539529267	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ERX9007.jpg?v=1784746523	vision:qwen2.5vl:7b
+gid://shopify/Product/1500245098608	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/0ca9e9e901edcdcef87846763e5e3d87_3e9e6f08-2d31-4622-a2cb-6a8a77847ecc.jpg?v=1572310354	vision:qwen2.5vl:7b
+gid://shopify/Product/7887551037491	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0065363_palais-juniper_650_1024x1024_89912b2d-aefb-4ccc-8200-062e7e1e8f8b.jpg?v=1784681804	vision:qwen2.5vl:7b
+gid://shopify/Product/1500247457904	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/382a7c2ce486ebba6b61c6c8e94fb0cb_bedea863-8ffb-456d-8113-e716cbc1628c.jpg?v=1572310354	vision:qwen2.5vl:7b
+gid://shopify/Product/7822342455347	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0070233_sisal-metallic-silver-off-white_650.jpg?v=1776905360	vision:qwen2.5vl:7b
+gid://shopify/Product/7867553677363	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW116-01-network-chalk_04.jpg?v=1782348075	vision:qwen2.5vl:7b
+gid://shopify/Product/7884277743667	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/peel-and-stick-floor-tiles-pink-daphne-jeffrey-ste.jpg?v=1783980430	vision:qwen2.5vl:7b
+gid://shopify/Product/7880947793971	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-soie-changeante-munt-muco-muvp-yuzen-soie-changeante-180d65260926c0a6755276a8ec3c_4a0d43ea-17b5-4664-bd41-64cd4fd62f07.jpg?v=1783790527	vision:qwen2.5vl:7b
+gid://shopify/Product/1497247776880	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/098c2f892870f2bbf00bca3f694047ad.jpg?v=1572309623	vision:qwen2.5vl:7b
+gid://shopify/Product/7880950546483	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-la-caravane-chogak-d730e57c08bb6b4a1a3339a03ac5_11e931f3-32ee-4fb4-b52a-3f57179639d3.jpg?v=1783790713	vision:qwen2.5vl:7b
+gid://shopify/Product/7419676065843	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LCW1021_004_0d65730f-de78-43ab-869e-7cf4138afc87.jpg?v=1726202908	vision:qwen2.5vl:7b
+gid://shopify/Product/7870813831219	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0043877_landon-pink-abstract-geometric-wallpaper.jpg?v=1782790814	vision:qwen2.5vl:7b
+gid://shopify/Product/7897178832947	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Liana-Swatch-Astra.jpg?v=1784829377	vision:qwen2.5vl:7b
+gid://shopify/Product/6936771002419	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/CM118-2394.jpg?v=1733888554	vision:qwen2.5vl:7b
+gid://shopify/Product/7388468084787	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ALO-06_e6a947df-294a-4633-831e-662826cc4f71.jpg?v=1736206792	vision:qwen2.5vl:7b
+gid://shopify/Product/7273407512627	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ScreenShot2024-05-24at11.16.15AM.png?v=1747072511	vision:qwen2.5vl:7b
+gid://shopify/Product/7375675818035	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_56e9e66d-b070-4559-a48c-02a2a5c30d8f.png?v=1722464930	vision:qwen2.5vl:7b
+gid://shopify/Product/7422906892339	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/FG089_K102_8e831387-7dec-440c-a452-649b8240242b.jpg?v=1753291621	vision:qwen2.5vl:7b
+gid://shopify/Product/6679755685939	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/RS17891_image1.jpg?v=1756312057	vision:qwen2.5vl:7b
+gid://shopify/Product/7822352187443	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0066825_grasmere-weave-dark-linen_650.jpg?v=1776905752	vision:qwen2.5vl:7b
+gid://shopify/Product/6679682449459	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R17891_image2.jpg?v=1756326590	vision:qwen2.5vl:7b
+gid://shopify/Product/7870349377587	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT1443_40672801-589c-42cf-8dbd-338615bad270.jpg?v=1782722409	vision:qwen2.5vl:7b
+gid://shopify/Product/4484539875379	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/SC_0001WP88429.jpg?v=1745347701	vision:qwen2.5vl:7b
+gid://shopify/Product/7870349475891	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT1447_3e27251b-7a23-4c1d-bf2f-64ddc0b9f73d.jpg?v=1782722414	vision:qwen2.5vl:7b
+gid://shopify/Product/7864803852339	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bead_11115.jpg?v=1781895056	vision:qwen2.5vl:7b
+gid://shopify/Product/7375902736435	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_29a6d2bd-dda7-48df-82f4-bb54e2f2a2da.png?v=1722458300	vision:qwen2.5vl:7b
+gid://shopify/Product/6948090347571	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT7945.jpg?v=1773972737	vision:qwen2.5vl:7b
+gid://shopify/Product/7887507193907	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0158787_lorn-pearl-faux-grasscloth-wallpaper.jpg?v=1784295504	vision:qwen2.5vl:7b
+gid://shopify/Product/7898930020403	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MPW1704.jpg?v=1785086450	vision:qwen2.5vl:7b
+gid://shopify/Product/7880022392883	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0159520_serenade-blue-ferns-wallpaper.jpg?v=1783647655	vision:qwen2.5vl:7b
+gid://shopify/Product/7775014191155	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/19334-Java-300x300.jpg?v=1770788321	vision:qwen2.5vl:7b
+gid://shopify/Product/7375655960627	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_8f16afbb-9712-4e1d-ad50-0f5229671830.png?v=1722466388	vision:qwen2.5vl:7b
+gid://shopify/Product/7421468999731	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/109_14062_CS_8d24a868-fe1e-42d1-bb27-d88bf8b82bc0.jpg?v=1753305859	vision:qwen2.5vl:7b
+gid://shopify/Product/7880951726131	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-ceres-cybele-313a3b8a34865f9275a8fe1df23f_d64b2740-2be6-4a56-8f8e-dde6b34e3f7b.jpg?v=1783790867	vision:qwen2.5vl:7b
+gid://shopify/Product/1497357451376	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/475d0cdda2b7ad70e2baef6581996add.jpg?v=1572309649	vision:qwen2.5vl:7b
+gid://shopify/Product/7375631089715	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_766c31bf-1f62-4682-b2a3-5e619bbb7894.png?v=1722468205	vision:qwen2.5vl:7b
+gid://shopify/Product/1502337794160	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/cb96128322ceed1e2e63643c2e2c81f0.jpg?v=1745456084	vision:qwen2.5vl:7b
+gid://shopify/Product/7855823487027	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R18512_interior1.jpg?v=1781029097	vision:qwen2.5vl:7b
+gid://shopify/Product/7375672049715	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_676a6672-15d8-4874-998c-d1a82108c028.png?v=1722465185	vision:qwen2.5vl:7b
+gid://shopify/Product/7534240464947	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/marigold-morris-and-co_a0346bb7-5216-422a-90b1-684bfa91cad1.jpg?v=1741110985	vision:qwen2.5vl:7b
+gid://shopify/Product/7896574754867	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KT-BOLLYWOOD_BACKED-005_0.jpg?v=1784751802	vision:qwen2.5vl:7b
+gid://shopify/Product/7881422372915	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T34011_649ab292-6a6d-4931-b1dd-0c45a9c2f0fb.jpg?v=1783809619	vision:qwen2.5vl:7b
+gid://shopify/Product/7866347749427	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/M4902-3_01.jpg?v=1782182866	vision:qwen2.5vl:7b
+gid://shopify/Product/7897182830643	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Rhythm-Motion.jpg?v=1784829609	vision:qwen2.5vl:7b
+gid://shopify/Product/7863635247155	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/onca-ambar-murals-coordonne.jpg?v=1781716556	vision:qwen2.5vl:7b
+gid://shopify/Product/6944742244403	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10070_b46af647-ca9c-45a5-ae42-223caf852d26.jpg?v=1781203029	vision:qwen2.5vl:7b
+gid://shopify/Product/7876913528883	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T13037_7d1ddd59-fc76-476b-af6a-c73a8a714af3.jpg?v=1783309227	vision:qwen2.5vl:7b
+gid://shopify/Product/7705729073203	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/croca-93020-sample-lucy-large-crocodile-wallcovering-hollywood-wallcoverings.jpg?v=1775723161	vision:qwen2.5vl:7b
+gid://shopify/Product/6948085399603	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWTA-65580.jpg?v=1776283598	vision:qwen2.5vl:7b
+gid://shopify/Product/7429095358515	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/B00017_01_1.jpg?v=1739302673	vision:qwen2.5vl:7b
+gid://shopify/Product/7584977453107	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MARMORINO_NEBBIA_7321-07_new_05fdaa6d-c0d6-458a-855d-a24545f9c970.jpg?v=1751949564	vision:qwen2.5vl:7b
+gid://shopify/Product/7884810977331	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0154793_roderick-stone-textured-wallpaper_630e2408-10b7-4ade-b11c-7035768b5cb6.jpg?v=1784041092	vision:qwen2.5vl:7b
+gid://shopify/Product/7419901771827	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W0060_08_CAC_eb847c15-91bd-4924-a37d-f235db121a2e.jpg?v=1726037792	vision:qwen2.5vl:7b
+gid://shopify/Product/6948085497907	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT6033.jpg?v=1773972405	vision:qwen2.5vl:7b
+gid://shopify/Product/1497978699888	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/670cb6a0c0b6824924efa96704702565.jpg?v=1572309828	vision:qwen2.5vl:7b
+gid://shopify/Product/7868942221363	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0068686_haliya-gold-metallic-plaster-wallpaper.jpg?v=1782482164	vision:qwen2.5vl:7b
+gid://shopify/Product/1497264029808	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6e3e3211454de0365a67ad905f968e65.jpg?v=1572309626	vision:qwen2.5vl:7b
+gid://shopify/Product/7388466315315	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AGA-004_65e3c087-abcf-4c2b-85a7-e122bd6a0086.jpg?v=1740077219	vision:qwen2.5vl:7b
+gid://shopify/Product/1496326570096	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CROCA-93014-sample-clean_9d4ed1c4-3b4a-42c0-b9b2-45bb84bde283.jpg?v=1774479216	vision:qwen2.5vl:7b
+gid://shopify/Product/7584896974899	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MARKET-STREET_GREY-GABARDINE_SG04-13__KOROSEAL.jpg?v=1751952478	vision:qwen2.5vl:7b
+gid://shopify/Product/7896523407411	Paisley	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ERL2609.jpg?v=1784745177	vision:qwen2.5vl:7b
+gid://shopify/Product/7896394301491	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wild-blackthorn-silver-coordonne.jpg?v=1784738376	vision:qwen2.5vl:7b
+gid://shopify/Product/7864298569779	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R78902.jpg?v=1781820455	vision:qwen2.5vl:7b
+gid://shopify/Product/1502310039664	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/53d16dca58d4335bdbc36b8af1478859.jpg?v=1745456271	vision:qwen2.5vl:7b
+gid://shopify/Product/1496326701168	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/croca-93015-sample-lucy-large-crocodile-hollywood-wallcoverings.jpg?v=1775723178	vision:qwen2.5vl:7b
+gid://shopify/Product/7584977682483	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MARMORINO_MINERALE_7321-11_ac1b0342-4006-4b1f-a653-8648239eb148.jpg?v=1751949557	vision:qwen2.5vl:7b
+gid://shopify/Product/7896539824179	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ESC2605.jpg?v=1784746556	vision:qwen2.5vl:7b
+gid://shopify/Product/7584978042931	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MARMORINO_NOTTE_7321-19_new_015394b7-d6f7-4342-8ad6-99f373c5266d.jpg?v=1751949542	vision:qwen2.5vl:7b
+gid://shopify/Product/6679595450419	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R12341_image2.jpg?v=1756328721	vision:qwen2.5vl:7b
+gid://shopify/Product/7872102268979	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10308_4501f1ff-5e86-4447-9401-ec7194e4aa05.jpg?v=1782880848	vision:qwen2.5vl:7b
+gid://shopify/Product/7867298218035	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/A00819_01.jpg?v=1782308433	vision:qwen2.5vl:7b
+gid://shopify/Product/1500667871344	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/8133d3bb5815bf6aa2e833ad8e30d4ec_7a8d8e26-020d-4414-8f14-48514a4b489f.jpg?v=1572310418	vision:qwen2.5vl:7b
+gid://shopify/Product/7851177541683	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20079_interior1.webp?v=1780557737	vision:qwen2.5vl:7b
+gid://shopify/Product/7865289506867	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6693901__49172.1730827615.jpg?v=1782002470	vision:qwen2.5vl:7b
+gid://shopify/Product/7873242529843	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36074_111_0be327c2-b92f-4166-b143-21f96c003719.jpg?v=1782934824	vision:qwen2.5vl:7b
+gid://shopify/Product/7851178131507	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R18603_interior1.jpg?v=1780557757	vision:qwen2.5vl:7b
+gid://shopify/Product/7880947269683	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mural-textures-vegetales-munt-muco-muvp-zanzibar-textures-vegetales-293965b8ef500d5efa0683d34f0d_c64ba9ba-f46e-4eec-b969-5c19ec9c8535.jpg?v=1783790470	vision:qwen2.5vl:7b
+gid://shopify/Product/6936683970611	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-BC-04_31406762-a217-4b19-8bd8-416891a4ee32.jpg?v=1733891687	vision:qwen2.5vl:7b
+gid://shopify/Product/7858590679091	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW114-03-square-cut-silver_04.jpg?v=1781195679	vision:qwen2.5vl:7b
+gid://shopify/Product/7880935538739	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/H192NQ8317.jpg?v=1783744113	vision:qwen2.5vl:7b
+gid://shopify/Product/7534248919091	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/strawberry-thief-morris-and-co_8c4cdc95-8a74-41d1-898e-d41880ec8973.jpg?v=1741111543	vision:qwen2.5vl:7b
+gid://shopify/Product/7584967557171	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67333_26e1c3b8-5e1e-4b97-bbfc-5f92660bb0f3.jpg?v=1751962117	vision:qwen2.5vl:7b
+gid://shopify/Product/7245729300531	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/monkey-library-traditional-green_91d20f5c-405d-4158-8a33-d82bf06c97f2.jpg?v=1763083242	vision:qwen2.5vl:7b
+gid://shopify/Product/7388475162675	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CRK-05_3abffe19-898c-4cd6-a0a4-269b581dc19c.jpg?v=1740077109	vision:qwen2.5vl:7b
+gid://shopify/Product/7664596516915	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3675912-ooh-la-la-leopard-black-white-on-courtesan-1_e561cdc6-b846-4be9-9dea-38576329528b.jpg?v=1756868352	vision:qwen2.5vl:7b
+gid://shopify/Product/7876405198899	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0037877_lilt-teal-faux-grasscloth-wallpaper.jpg?v=1783168824	vision:qwen2.5vl:7b
+gid://shopify/Product/7880010694707	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/37006_321_cb098818-5d99-42a8-a1e0-5895fa2e6b1e.jpg?v=1783644046	vision:qwen2.5vl:7b
+gid://shopify/Product/7851181506611	Floral	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R21316_interior1.jpg?v=1780557876	vision:qwen2.5vl:7b
+gid://shopify/Product/7882754949171	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0151681_zebra-chic-wallpaper-antique-gold.jpg?v=1783865922	vision:qwen2.5vl:7b
+gid://shopify/Product/7882754981939	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0151697_zebra-chic-wallpaper-glint.jpg?v=1783865924	vision:qwen2.5vl:7b
+gid://shopify/Product/6679711776819	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/RS11021_image1.jpg?v=1756313714	vision:qwen2.5vl:7b
+gid://shopify/Product/7898834239539	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DGC1224_f3301d91-1fb9-4009-8860-3a06a6b7a404.jpg?v=1785083414	vision:qwen2.5vl:7b
+gid://shopify/Product/7879392297011	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36899_11_4dea2cd7-ba3b-4e72-bfe0-d74cc084b03d.jpg?v=1783536044	vision:qwen2.5vl:7b
+gid://shopify/Product/7876819550259	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T10928_1451b509-61dd-4865-9a98-d26b1906a4fd.jpg?v=1783269620	vision:qwen2.5vl:7b
+gid://shopify/Product/7422938939443	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3716_625_5542b7b2-98c4-4f2f-8072-12db63a4f2fe.jpg?v=1753291461	vision:qwen2.5vl:7b
+gid://shopify/Product/1501382049904	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/827d0a125458dba0a824444dd02c6272.jpg?v=1745456374	vision:qwen2.5vl:7b
+gid://shopify/Product/1497253970032	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/df1340dd57d6f9c157c1dc755cd9f523.jpg?v=1572309624	vision:qwen2.5vl:7b
+gid://shopify/Product/7552707788851	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T41030_c32603a9-cbe8-4707-9ee1-e49ee843bbfe.jpg?v=1781202396	vision:qwen2.5vl:7b
+gid://shopify/Product/1501594124400	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73085-sample-clean.jpg?v=1774483412	vision:qwen2.5vl:7b
+gid://shopify/Product/7375721857075	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_11843aba-9ae1-4bfa-a24b-a057a0d566f8.png?v=1722462691	vision:qwen2.5vl:7b
+gid://shopify/Product/7863635214387	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/onca-indigo-murals-coordonne.jpg?v=1781716553	vision:qwen2.5vl:7b
+gid://shopify/Product/7416109924403	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AMW10008_21_9397503b-2a65-4a45-8484-28ba3a894841.jpg?v=1753123208	vision:qwen2.5vl:7b
+gid://shopify/Product/7791170224179	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Aire-Si_Muse_Ridge_69aa3f42-5a51-4365-b9d4-0ab9820d9a00.jpg?v=1772569873	vision:qwen2.5vl:7b
+gid://shopify/Product/7375685845043	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_9488c6ed-2393-4797-b04d-bc03c303dc19.png?v=1722464193	vision:qwen2.5vl:7b
+gid://shopify/Product/7863635181619	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/onca-naranja-murals-coordonne.jpg?v=1781716550	vision:qwen2.5vl:7b
+gid://shopify/Product/7775015436339	Polka Dot	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/red_e867c3e3-0025-4aba-ac60-54eb6e420de5.jpg?v=1770789988	vision:qwen2.5vl:7b
+gid://shopify/Product/7513954779187	Tropical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3958_b03cae33-19fc-4cfe-8295-3032161b8395.webp?v=1782459989	vision:qwen2.5vl:7b
+gid://shopify/Product/7794240159795	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZRHW312925_7a2d.jpg?v=1782057455	vision:qwen2.5vl:7b
+gid://shopify/Product/7375663366195	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_9aeb4891-944a-4c42-aef2-fc05e5615718.png?v=1722465862	vision:qwen2.5vl:7b
+gid://shopify/Product/7879455178803	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/stitched_leather-cowboy_boot.jpg?v=1783550701	vision:qwen2.5vl:7b
+gid://shopify/Product/7799450009651	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CW10007_cc23b556-0d27-417c-858f-1fea3a28ef58.jpg?v=1781201931	vision:qwen2.5vl:7b
+gid://shopify/Product/7885757349939	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75105_1ebbee8d-62f7-4ce4-9e67-4b3820056537.jpg?v=1784130014	vision:qwen2.5vl:7b
+gid://shopify/Product/7874188247091	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0089092_kort-dark-blue-fruit-and-floral-wallpaper_1520f56d-d0b7-4bd6-b4a0-f272821f787a.jpg?v=1783014043	vision:qwen2.5vl:7b
+gid://shopify/Product/7882761699379	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0149168_meadowbrook-wallpaper-gravel_d7a37c8a-a9d0-430f-bc8d-49732964e59a.jpg?v=1783866261	vision:qwen2.5vl:7b
+gid://shopify/Product/6829028147251	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/a159edf4fc972f28fb1db965191b34d0.jpg?v=1783970035	vision:qwen2.5vl:7b
+gid://shopify/Product/6948086775859	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34126.jpg?v=1781831474	vision:qwen2.5vl:7b
+gid://shopify/Product/6682335215667	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Laura_Ashley_Wallpaper_LAW_113394_2.jpg?v=1646421170	vision:qwen2.5vl:7b
+gid://shopify/Product/7375653470259	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_fb25940a-7d4c-4657-8cb6-aa360ce8ba38.png?v=1722466653	vision:qwen2.5vl:7b
+gid://shopify/Product/7882799153203	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/e0a4465878242212a85a4920cffa1505.jpg?v=1783878837	vision:qwen2.5vl:7b
+gid://shopify/Product/6829023395891	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prw-920133-cav-002.jpg?v=1781715668	vision:qwen2.5vl:7b
+gid://shopify/Product/7882758520883	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0149076_in-the-details-wallpaper-mineral_02af55b8-48b7-4515-951f-d5fd6fed81bc.jpg?v=1783866129	vision:qwen2.5vl:7b
+gid://shopify/Product/1497343721584	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/06681c5865f2d76292f87b3569ef71ee.jpg?v=1572309648	vision:qwen2.5vl:7b
+gid://shopify/Product/7851180818483	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20299_interior1.webp?v=1780557851	vision:qwen2.5vl:7b
+gid://shopify/Product/1497352437872	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/c977eb73662b9c9f798e7a75eba22e61.jpg?v=1572309649	vision:qwen2.5vl:7b
+gid://shopify/Product/7887550840883	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0065377_chess-cappuccino_650_1024x1024_a1d8a026-84d6-42f8-ae3c-6b155783df70.jpg?v=1784681822	vision:qwen2.5vl:7b
+gid://shopify/Product/6679809753139	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/617-04_image1_a590fbd9-2cde-4678-b304-d20a9b50f0b4.jpg?v=1646104643	vision:qwen2.5vl:7b
+gid://shopify/Product/4484595089459	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/SC_0010WP81388MV_3e8ab88b-b90e-4d1a-964b-ec80d6a31a1b.jpg?v=1745346175	vision:qwen2.5vl:7b
+gid://shopify/Product/6562460270643	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/trueromabce2bGOLD2_room_6259f4b9-0ab6-400a-a269-9f6d84662f99.jpg?v=1621360857	vision:qwen2.5vl:7b
+gid://shopify/Product/7882754228275	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0153906_vegan-suede-portabella-wallpaper.jpg?v=1783865876	vision:qwen2.5vl:7b
+gid://shopify/Product/7388492955699	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MTD-01_17a20505-26cd-4b17-a983-04cddadad602.jpg?v=1736208535	vision:qwen2.5vl:7b
+gid://shopify/Product/7882799251507	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/33a4dd17afe7a981a105bba5f603b121.jpg?v=1783878847	vision:qwen2.5vl:7b
+gid://shopify/Product/7896479006771	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBGE03.jpg?v=1784741723	vision:qwen2.5vl:7b
+gid://shopify/Product/7896479170611	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/BBGE08.jpg?v=1784741744	vision:qwen2.5vl:7b
+gid://shopify/Product/4396418367539	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4095_quadrat_844a0a54-3a78-4f76-9cab-d4072fc9e48d.jpg?v=1576170293	vision:qwen2.5vl:7b
+gid://shopify/Product/1500088664176	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/40ca7599796d407c15921a33c001ca55.jpg?v=1745423381	vision:qwen2.5vl:7b
+gid://shopify/Product/7864800051251	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/KERY-260.jpg?v=1781894799	vision:qwen2.5vl:7b
+gid://shopify/Product/7864784748595	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tal9-2553.jpg?v=1781894149	vision:qwen2.5vl:7b
+gid://shopify/Product/6679735730227	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/RS14842_image1.jpg?v=1756312838	vision:qwen2.5vl:7b
+gid://shopify/Product/7882839162931	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/b57a3129cf4094201bf835ffa9eedd19.jpg?v=1783881565	vision:qwen2.5vl:7b
+gid://shopify/Product/7584924631091	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ILLUSIVE-SEADRAGON_LSV1-08_a980c49e-f82a-48db-a360-99f1d0aa574a.jpg?v=1751951438	vision:qwen2.5vl:7b
+gid://shopify/Product/7877192843315	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091483_meilin-grasscloth-moss.jpg?v=1783366465	vision:qwen2.5vl:7b
+gid://shopify/Product/7877192712243	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091488_meilin-grasscloth-midnight.jpg?v=1783366419	vision:qwen2.5vl:7b
+gid://shopify/Product/6679581196339	Toile	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/R10631_image2.jpg?v=1756329097	vision:qwen2.5vl:7b
+gid://shopify/Product/1500581494896	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/68fd3db0b7e0381762ae834b3413c2e6_b0302c7a-0549-4095-8825-34f7b7fa0200.jpg?v=1572310397	vision:qwen2.5vl:7b
+gid://shopify/Product/7865239273523	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0057021_coraline-white-leaf-wallpaper.jpg?v=1781980462	vision:qwen2.5vl:7b
+gid://shopify/Product/4484542398515	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WBN00049146.jpg?v=1745347575	vision:qwen2.5vl:7b
+gid://shopify/Product/7880635023411	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T24129_cd9715f2-0ce3-4f89-bf77-3c261350e220.jpg?v=1783705217	vision:qwen2.5vl:7b
+gid://shopify/Product/7388493086771	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MTD-04_4c70e77e-f87b-40a5-9ba3-352a55d81ae8.jpg?v=1736208546	vision:qwen2.5vl:7b
+gid://shopify/Product/7897185157171	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/TERRENE-Zanotti-WEB2.jpg?v=1784829795	vision:qwen2.5vl:7b
+gid://shopify/Product/7876887248947	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/36774_81_5c6d83e6-1d41-4663-9112-af60b2c14388.jpg?v=1783298440	vision:qwen2.5vl:7b
+gid://shopify/Product/4396407586867	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/7119_quadrat_29676b4a-3fb5-434f-a436-be856f7907b0.jpg?v=1576169914	vision:qwen2.5vl:7b
+gid://shopify/Product/4396407881779	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/7114_quadrat_0dc1bfdd-6411-4ee1-89c3-db67cacbd7cc.jpg?v=1576169921	vision:qwen2.5vl:7b
+gid://shopify/Product/7791170453555	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Ziro_Nappa_Azure_7153dfac-4e39-4c1a-ba89-ae912fcc1c14.jpg?v=1772569911	vision:qwen2.5vl:7b
+gid://shopify/Product/7515296661555	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/4577_4e350d63-0188-4873-ade4-12f72d99af2a.webp?v=1782462589	vision:qwen2.5vl:7b
+gid://shopify/Product/7515296694323	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/4578_cd28ab95-b729-4827-95f6-ac66acca6207.webp?v=1782462592	vision:qwen2.5vl:7b
+gid://shopify/Product/4396419448883	Grasscloth	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4040_quadrat_ad8874e7-6f46-4809-81e5-32d298248bd0.jpg?v=1576170311	vision:qwen2.5vl:7b
+gid://shopify/Product/1497201246320	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1255f95512cf57a0bfeda916b3e4f402.jpg?v=1572309595	vision:qwen2.5vl:7b
+gid://shopify/Product/7692042960947	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/marburg-papis-loveday_448f27af-965b-45c8-8b42-242a0660818a.jpg?v=1761150664	vision:qwen2.5vl:7b
+gid://shopify/Product/4396418334771	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4097_quadrat_2f96832f-9f57-4f02-9663-6293733d2d8c.jpg?v=1576170292	vision:qwen2.5vl:7b
+gid://shopify/Product/4466673909811	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ZIO-08.jpg?v=1736198972	vision:qwen2.5vl:7b
+gid://shopify/Product/7882801938483	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ab228adfb89baafe97cbb5c4fb1a3c0a.jpg?v=1783878989	vision:qwen2.5vl:7b
+gid://shopify/Product/7384921145395	Trellis	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Maya-50421-DesignerWallcoverings-Los-AngelesMaya-Romanoff-Wallpaper-MA-11-1.jpg?v=1738861289	vision:qwen2.5vl:7b
+gid://shopify/Product/7873564344371	Chevron	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT6150_d49294ca-e363-4e39-8198-ce986cf06815.jpg?v=1782952818	vision:qwen2.5vl:7b
+gid://shopify/Product/4469052440627	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/MTG_403385_WP20101_-_Inside_Book.jpg?v=1607114986	vision:qwen2.5vl:7b
+gid://shopify/Product/4469052407859	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/MTG_403384_WP20102_-_Inside_Book_Taupe.jpg?v=1607114983	vision:qwen2.5vl:7b
+gid://shopify/Product/7866902970419	Abstract	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8300251__47436.1712930650.jpg?v=1782254451	vision:qwen2.5vl:7b
+gid://shopify/Product/1496992940144	Geometric	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/5507c74c6763cca76e22346a84851e91.jpg?v=1572309493	vision:qwen2.5vl:7b
+gid://shopify/Product/1502313807984	Stripe	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/89794233bb3f22fe00f0596986e0f927.jpg?v=1745456228	vision:qwen2.5vl:7b
+gid://shopify/Product/7375654060083	Damask	https://cdn.shopify.com/s/files/1/0015/4117/7456/files/PhillipJeffriesLogo_ba2f4250-9ec4-4d2a-917b-5dac2c67188e.png?v=1722466593	vision:qwen2.5vl:7b
+gid://shopify/Product/6936702124083	Botanical	https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-MS-03_96f97f49-4457-43e1-ab87-38c5cd4fb9c2.jpg?v=1733890540	vision:qwen2.5vl:7b
diff --git a/shopify/theme-LIVE-pull-20260728-colorbar/snippets/dw-boost-overrides.liquid b/shopify/theme-LIVE-pull-20260728-colorbar/snippets/dw-boost-overrides.liquid
new file mode 100644
index 00000000..a0179cbc
--- /dev/null
+++ b/shopify/theme-LIVE-pull-20260728-colorbar/snippets/dw-boost-overrides.liquid
@@ -0,0 +1,1146 @@
+<!-- DW Grid Slider — CSS + Control + JS only (products rendered by Boost AI) -->
+<style>
+/* Override Boost color filter dots to match shop-by-color page palette */
+.boost-sd__filter-option-swatch-item-img[style*="background-color: pink"]{background-color:#C9899A !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: red"]{background-color:#9B3B3B !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: orange"]{background-color:#C8784A !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: yellow"]{background-color:#D4B96A !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: green"]{background-color:#6B8E6B !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: blue"]{background-color:#4A6FA5 !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: cyan"]{background-color:#5F9EA0 !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: aqua"]{background-color:#5F9EA0 !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: purple"]{background-color:#7A6B8A !important}
+.boost-sd__filter-option-swatch-item-img[style*="background-color: brown"]{background-color:#8B6F4E !important}
+.boost-sd__filter-option-swatch-item-img{border-radius:50%}
+
+/* Collapsed filter panel on load — full-width product grid */
+body.dw-filters-collapsed .boost-sd__filter-tree-wrapper{display:none !important}
+body.dw-filters-collapsed .boost-sd__filter-tree-vertical{display:none !important}
+body.dw-filters-collapsed .boost-sd__product-list{width:100% !important;max-width:100% !important}
+body.dw-filters-collapsed .boost-sd__filter-products-wrap{display:block !important;max-width:100% !important;width:100% !important}
+body.dw-filters-collapsed .boost-sd__filter-products-wrap > div{display:block !important;max-width:100% !important;width:100% !important}
+body.dw-filters-collapsed .boost-sd__product-list-wrapper{max-width:100% !important;width:100% !important;flex:1 !important}
+body.dw-filters-collapsed .boost-sd__product-list{padding-right:0 !important;padding-left:0 !important}
+body.dw-filters-collapsed .boost-sd__product-list[class*="grid--"]{grid-template-columns:repeat(var(--dw-grid-cols, 6), 1fr) !important}
+.boost-sd__product-list[class*="grid--"]{grid-template-columns:repeat(6, 1fr) !important}
+.boost-sd__product-list{grid-template-columns:repeat(var(--dw-grid-cols, 6), 1fr) !important}
+.boost-sd__product-list-grid--3-col{grid-template-columns:repeat(var(--dw-grid-cols, 6), 1fr) !important}
+.boost-sd__product-list-grid--4-col{grid-template-columns:repeat(var(--dw-grid-cols, 6), 1fr) !important}
+/* Force product items to fit grid columns */
+.boost-sd__product-item,.boost-sd__product-item *{min-width:0 !important;max-width:100% !important;box-sizing:border-box !important}
+.boost-sd__product-item{width:auto !important;overflow:hidden !important}
+.boost-sd__product-item img{max-width:100% !important;height:auto !important;width:100% !important}
+.boost-sd__product-list{overflow:hidden !important;display:grid !important;gap:16px !important;grid-gap:16px !important;column-gap:16px !important;row-gap:16px !important}
+/* DW grid breathing room between products (Steve 2026-07-06); card internals stay tight */
+.boost-sd__product-item{padding:0 !important;margin:0 !important}
+.boost-sd__product-item-image,.boost-sd__product-item-inner,.boost-sd__product-item > *{margin:0 !important}
+
+/* === MOBILE: 2 products per row + full-width index images (DW 2026-06-23) === */
+@media (max-width:768px){
+  /* full-bleed: kill Boost's reserved side padding + width cap so the 2 columns
+     span the entire viewport (mobile never gets .dw-filters-collapsed, which is
+     what strips this padding on desktop) */
+  .boost-sd-right,
+  .boost-sd__product-list-wrapper,
+  .boost-sd__product-list{
+    width:100% !important;max-width:100% !important;
+    padding-left:0 !important;padding-right:0 !important;
+  }
+  .boost-sd__product-list,
+  .boost-sd__product-list[class*="grid--"],
+  body.dw-filters-collapsed .boost-sd__product-list[class*="grid--"]{
+    grid-template-columns:repeat(2,1fr) !important;
+  }
+
+  /* === Unique mobile card template (officer-refined 2026-06-23) ===
+     Fix "images cut off": show the WHOLE pattern, never crop.
+     - object-fit:contain (was cover) on a paper-white ground, so square
+       swatches fill the cell and only odd-ratio images get a subtle margin.
+     - title + vendor move BELOW the image (was an absolute overlay covering
+       the pattern). Card becomes a clean vertical stack: image -> name -> vendor. */
+  .boost-sd__product-item{
+    display:flex !important;flex-direction:column !important;
+  }
+  .boost-sd__product-image-wrapper,
+  [class*="product-image-wrap"]{
+    aspect-ratio:1/1 !important;overflow:hidden !important;
+    background:#FAFAF8 !important;            /* paper-white ground, never black bars */
+    width:100% !important;height:auto !important;
+  }
+  .boost-sd__product-item img,
+  .boost-sd__product-image-wrapper img,
+  [class*="product-image-wrap"] img,
+  .product-list-item img,
+  .product-list-item-thumbnail img{
+    width:100% !important;height:100% !important;display:block !important;
+    object-fit:contain !important;           /* contain = full image, nothing cut off */
+    object-position:center !important;
+  }
+  /* Title + vendor: out of the overlay, in normal flow below the image */
+  .boost-sd__product-title,
+  .boost-sd__product-vendor,
+  .boost-sd__product-info{
+    position:static !important;width:100% !important;
+    background:none !important;text-align:left !important;opacity:1 !important;
+    inset:auto !important;
+  }
+  .boost-sd__product-title,.boost-sd__product-title a{
+    font-size:13px !important;font-weight:500 !important;
+    color:#1A1A1A !important;line-height:1.3 !important;padding:6px 4px 0 !important;
+  }
+  .boost-sd__product-vendor{
+    font-size:11px !important;letter-spacing:.06em !important;
+    text-transform:uppercase !important;color:#8A8A85 !important;padding:2px 4px 2px !important;
+  }
+
+  /* === Appended infinite-scroll cards (neutral .dw-if-* classes so no Boost/theme
+     script strips the <img>). Styled to MATCH the page-1 cards: contained image
+     on a paper ground with the name/vendor overlaid at the bottom. === */
+  .dw-if-card{position:relative !important;display:block !important;}
+  .dw-if-card > a{display:block !important;text-decoration:none !important;color:#fff !important;}
+  .dw-if-img{aspect-ratio:1/1 !important;width:100% !important;background:#FAFAF8 !important;overflow:hidden !important;}
+  .dw-if-img img{width:100% !important;height:100% !important;object-fit:contain !important;display:block !important;}
+  .dw-if-card .dw-if-name,
+  .dw-if-card .dw-if-ven{position:absolute !important;left:0;right:0;padding:0 8px !important;
+    text-align:center !important;color:#fff !important;text-shadow:0 1px 5px rgba(0,0,0,.65) !important;
+    pointer-events:none !important;}
+  .dw-if-card .dw-if-name{bottom:26px !important;font-size:13px !important;font-weight:600 !important;line-height:1.2 !important;}
+  .dw-if-card .dw-if-ven{bottom:8px !important;font-size:10px !important;letter-spacing:.08em !important;text-transform:uppercase !important;opacity:.92 !important;}
+
+  /* === Uniform toolbar pills (DW 2026-06-23): every control the same size, simple ===
+     Sort, Refine By, Filters, Show, and Wallcoverings/Fabrics/More -> one pill shape. */
+  .dw-filter-toggle,
+  .dw-grid-slider,
+  .dw-ptype-bar,
+  .boost-sd__toolbar-item--sorting,
+  .boost-sd__filter-tree-toggle-button{
+    box-sizing:border-box !important;
+    height:34px !important;min-height:34px !important;
+    display:inline-flex !important;align-items:center !important;justify-content:center !important;
+    padding:0 14px !important;margin:5px 6px 0 0 !important;
+    border:1.5px solid #1A1A1A !important;border-radius:999px !important;
+    background:#fff !important;color:#1A1A1A !important;
+    font-size:11px !important;font-weight:600 !important;letter-spacing:.06em !important;
+    line-height:1 !important;white-space:nowrap !important;
+  }
+  /* normalize inner text/controls of the native Boost sort + refine so they match */
+  .boost-sd__toolbar-item--sorting *,
+  .boost-sd__filter-tree-toggle-button,
+  .boost-sd__filter-tree-toggle-button *{
+    font-size:11px !important;padding-bottom:0 !important;line-height:1 !important;
+    text-transform:uppercase !important;letter-spacing:.06em !important;
+  }
+  .dw-grid-slider select,.dw-grid-slider label,
+  .dw-ptype-bar label{ font-size:11px !important;font-weight:600 !important; }
+}
+
+/* Filter toggle button */
+.dw-filter-toggle{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;margin:4px 0 4px 8px;font-family:-apple-system,BlinkMacSystemFont,sans-serif;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;user-select:none;background:#fff;border:1.5px solid #000;border-radius:999px;cursor:pointer;vertical-align:middle}
+.dw-filter-toggle:hover{background:#f5f5f5}
+.dw-filter-toggle svg{width:14px;height:14px}
+
+/* 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}
+
+/* Per-page selector — inside grid pill */
+/* === Product type — INDIVIDUAL pills (DW 2026-06-25 consolidation) ===
+   The container is now a transparent flex wrapper (NO border / NO pill).
+   Each Wallcoverings / Fabrics / More <label> is its OWN bordered rounded
+   chip, uniform height with the FILTERS / SORT pills (see .dw-pill-uniform
+   group rule below). Active (checked) chip fills black. */
+.dw-ptype-bar{display:inline-flex;align-items:center;gap:6px;margin:5px 0 0 0;padding:0;background:none;border:0;font-family:-apple-system,BlinkMacSystemFont,sans-serif;user-select:none}
+.dw-ptype-bar label{
+  box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap;
+  height:34px;min-height:34px;padding:0 14px;margin:0;
+  border:1.5px solid #1A1A1A;border-radius:999px;background:#fff;color:#1A1A1A;
+  font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;line-height:1;
+}
+.dw-ptype-bar label:hover{background:#f5f5f5}
+/* checked chip = filled (set via .dw-ptype-on class by JS so it works without :has) */
+.dw-ptype-bar label.dw-ptype-on{background:#1A1A1A;color:#fff}
+.dw-ptype-bar input[type=checkbox]{width:13px;height:13px;margin:0;cursor:pointer;accent-color:#3D4246}
+.dw-ptype-bar .dw-ptype-sep{display:none !important}  /* separators removed — pills stand alone */
+
+/* === SINGLE uniform-height rule for ALL toolbar pills (DW 2026-06-25) ===
+   Applies on DESKTOP too (the old rule was inside @media max-width:768 only,
+   so live desktop pills were inconsistent). Every control — the FILTERS toggle,
+   the grid/Show pill, Boost's native SORT + Refine-By, and each product-type
+   chip — shares one 34px height + radius. This is the "same height" guarantee. */
+.dw-filter-toggle,
+.dw-grid-slider,
+.dw-ptype-bar label,
+.boost-sd__toolbar-item--sorting,
+.boost-sd__filter-tree-toggle-button{
+  box-sizing:border-box !important;
+  height:34px !important;min-height:34px !important;
+  display:inline-flex !important;align-items:center !important;
+  padding:0 14px !important;margin:5px 6px 0 0 !important;
+  border:1.5px solid #1A1A1A !important;border-radius:999px !important;
+  background:#fff;color:#1A1A1A;
+  font-size:11px;font-weight:600;letter-spacing:.06em;line-height:1;white-space:nowrap;
+}
+.dw-ptype-bar label.dw-ptype-on{background:#1A1A1A !important;color:#fff !important}
+.dw-perpage-inline{display:inline-flex;align-items:baseline;gap:4px;margin-left:10px;padding-left:10px;border-left:1px solid #ccc}
+.dw-perpage-inline select{border:none;background:transparent;font-size:14px;font-weight:700;cursor:pointer;padding:0;margin:0;-webkit-appearance:none;appearance:none}
+.dw-perpage-inline label{color:#000;font-size:14px;font-weight:700;text-transform:uppercase;letter-spacing:1px}
+/* Fix doubled product titles in Boost cards */
+.boost-sd__product-title a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
+</style>
+<style>
+.dw-grid-slider{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;margin:4px 0 4px 10px;font-family:-apple-system,BlinkMacSystemFont,sans-serif;font-size:11px;user-select:none;background:#fff;border:1.5px solid #000;border-radius:999px}
+.dw-grid-slider label{color:#000;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px}
+.dw-grid-slider input[type=range]{-webkit-appearance:none;width:120px;height:3px;background:#ccc;border-radius:2px;outline:none;cursor:pointer}
+.dw-grid-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;background:#000;border-radius:50%;cursor:pointer}
+.dw-grid-slider input[type=range]::-moz-range-thumb{width:16px;height:16px;background:#000;border-radius:50%;cursor:pointer;border:none}
+.dw-grid-slider .gc-num{color:#000;font-weight:700;font-size:14px;min-width:14px;text-align:center}
+.collection-products.rows-of-3 .product-list-item,.collection-products.rows-of-3 .product-grid-masonry-sizer{width:33.333%}
+.collection-products.rows-of-4 .product-list-item,.collection-products.rows-of-4 .product-grid-masonry-sizer{width:25%}
+.collection-products.rows-of-5 .product-list-item,.collection-products.rows-of-5 .product-grid-masonry-sizer{width:20%}
+.collection-products.rows-of-6 .product-list-item,.collection-products.rows-of-6 .product-grid-masonry-sizer{width:16.666%}
+.collection-products.rows-of-7 .product-list-item,.collection-products.rows-of-7 .product-grid-masonry-sizer{width:14.285%}
+.collection-products.rows-of-8 .product-list-item,.collection-products.rows-of-8 .product-grid-masonry-sizer{width:12.5%}
+.collection-products.rows-of-5 .product-list-item .product-vendor,.collection-products.rows-of-5 .product-list-item .product-title,
+.collection-products.rows-of-6 .product-list-item .product-vendor,.collection-products.rows-of-6 .product-list-item .product-title,
+.collection-products.rows-of-7 .product-list-item .product-vendor,.collection-products.rows-of-7 .product-list-item .product-title,
+.collection-products.rows-of-8 .product-list-item .product-vendor,.collection-products.rows-of-8 .product-list-item .product-title{display:none}
+.collection-products.rows-of-5 .product-list-item .product-price,
+.collection-products.rows-of-6 .product-list-item .product-price,
+.collection-products.rows-of-7 .product-list-item .product-price,
+.collection-products.rows-of-8 .product-list-item .product-price{font-size:11px}
+@media(max-width:768px){
+.collection-products.rows-of-5 .product-list-item,.collection-products.rows-of-6 .product-list-item,.collection-products.rows-of-7 .product-list-item,.collection-products.rows-of-8 .product-list-item{width:50%}
+}
+
+/* ===== Amazon-style LEFT filter rail (desktop) — DW 2026-07-14 =====
+   Un-suppress Boost's native vertical tree that .dw-filters-collapsed hides
+   (rules ~17-24 above) and lay the collection out as a 2-column rail + grid.
+   Desktop only (>=769px); mobile keeps Boost's native filter drawer untouched.
+   Placed AFTER the collapse rules so it wins at equal specificity — no arms race. */
+@media (min-width:769px){
+  body.dw-filters-collapsed .boost-sd__filter-tree-wrapper,
+  body.dw-filters-collapsed .boost-sd__filter-tree-vertical,
+  body.dw-filters-collapsed .boost-sd__filter-tree-vertical-content,
+  body.dw-filters-collapsed .boost-sd__filter-tree-vertical-refine-by{display:block !important;width:auto !important;visibility:visible !important}
+  .boost-sd-layout--has-filter-vertical{display:flex !important;flex-direction:row !important;align-items:flex-start !important;gap:30px !important}
+  .boost-sd-left{display:block !important;width:264px !important;flex:0 0 264px !important;max-width:264px !important;min-width:264px !important;position:sticky !important;top:14px !important;padding-right:22px !important;border-right:1px solid rgba(0,0,0,.09) !important;overflow:visible !important}
+  body.dw-filters-collapsed .boost-sd-right,
+  .boost-sd-right{flex:1 1 auto !important;width:auto !important;min-width:0 !important;max-width:none !important}
+  body.dw-filters-collapsed .boost-sd__product-list{width:100% !important;max-width:100% !important}
+  .boost-sd-left .dw-rail-dept{margin:2px 0 18px}
+  .boost-sd-left .dw-ptype-bar{display:flex !important;flex-wrap:wrap;gap:8px}
+  .dw-hfilter-bar{display:none !important}
+}
+</style>
+
+<script>
+(function(){
+  /* DESKTOP ONLY: hide Boost's native vertical tree + run the horizontal bar.
+     On mobile (<=768) Boost renders its own Filter-button drawer and lazy-loads
+     the filter options only when opened — so we must NOT hide it or try to read
+     it; leave the native mobile filter completely alone. */
+  if (window.innerWidth > 768) {
+    document.body.classList.add('dw-filters-collapsed');
+    /* Horizontal filter bar scope hook (Approach B — dw-hfilter.*); dw-filters-collapsed stays the always-on state engine that keeps Boost's native tree hidden */
+    document.body.classList.add('dw-filters-horizontal');
+    /* Restore the horizontal-bar collapsed state (our own bar, NOT the native tree) */
+    try { if (localStorage.getItem('dw-hfilter-collapsed') === '1') document.body.classList.add('dw-hbar-collapsed'); } catch(e){}
+  }
+  /* Set CSS var for default 6 cols */
+  document.documentElement.style.setProperty('--dw-grid-cols', 6);
+
+  /* === Amazon-style LEFT rail (desktop): move the product-type pill into Boost's
+     native left column and drop the now-redundant Hide-Filters toggle. The CSS
+     above un-hides the native tree + lays out the 2 columns; this only relocates
+     our custom controls. Self-healing poller so it works regardless of Boost's
+     async render timing. Mobile (<=768) is left entirely alone. */
+  if (window.innerWidth > 768) {
+    /* Boost injects its own CSS at RUNTIME (after any static inline <style>), so a
+       static override loses the source-order tie. Instead: drop the collapse class
+       (so Boost's native left/vertical layout is no longer suppressed) and append
+       our rail CSS at runtime so it lands LAST and wins. Mirrors the verified path. */
+    document.body.classList.remove('dw-filters-collapsed', 'dw-filters-horizontal', 'dw-hbar-collapsed');
+    var __railCss = document.createElement('style');
+    __railCss.textContent =
+      '@media (min-width:769px){' +
+      '.boost-sd-layout--has-filter-vertical{display:flex !important;flex-direction:row !important;align-items:flex-start !important;gap:30px !important}' +
+      '.boost-sd-left{display:block !important;width:264px !important;flex:0 0 264px !important;max-width:264px !important;min-width:264px !important;position:sticky !important;top:14px !important;padding-right:22px !important;border-right:1px solid rgba(0,0,0,.09) !important;overflow:visible !important}' +
+      '.boost-sd__filter-tree-wrapper,.boost-sd__filter-tree-vertical,.boost-sd__filter-tree-vertical-content,.boost-sd__filter-tree-vertical-refine-by{display:block !important;width:auto !important;visibility:visible !important}' +
+      '.boost-sd-right{flex:1 1 auto !important;width:auto !important;min-width:0 !important;max-width:none !important}' +
+      '.boost-sd__product-list{width:100% !important;max-width:100% !important}' +
+      '.boost-sd-left .dw-rail-dept{margin:2px 0 18px}' +
+      '.boost-sd-left .dw-ptype-bar{display:flex !important;flex-wrap:wrap;gap:8px}' +
+      '.dw-hfilter-bar{display:none !important}' +
+      '.dw-filter-toggle{display:none !important}' +  /* redundant Hide/Show-Filters toggle: rail is always visible on desktop */
+      '}';
+    document.head.appendChild(__railCss);
+
+    var __railTries = 0;
+    var __railTimer = setInterval(function(){
+      __railTries++;
+      /* Boost may re-add the collapse class on re-render — keep it off on desktop */
+      document.body.classList.remove('dw-filters-collapsed');
+      /* Boost injects CSS at runtime; re-append ours so it stays LAST and wins */
+      document.head.appendChild(__railCss);
+      var left = document.querySelector('.boost-sd-left');
+      var ptype = document.querySelector('.dw-ptype-bar');
+      if (left && ptype && !left.contains(ptype)) {
+        var dept = left.querySelector('.dw-rail-dept');
+        if (!dept) { dept = document.createElement('div'); dept.className = 'dw-rail-dept'; left.insertBefore(dept, left.firstChild); }
+        dept.appendChild(ptype);
+      }
+      var btns = document.querySelectorAll('button, a, label');
+      for (var i = 0; i < btns.length; i++) {
+        var t = (btns[i].textContent || '').trim().toLowerCase();
+        if (t === 'hide filters' || t === 'show filters') btns[i].style.display = 'none';
+      }
+      if ((left && ptype && left.contains(ptype)) || __railTries > 40) clearInterval(__railTimer);
+    }, 250);
+  }
+
+  var initialized = false;
+
+  /* NO product-type persistence: every load starts with nothing selected so ALL
+     products show, until the user toggles a pill. Product-type state is driven
+     purely by the URL's pf_t_product_type params (set on click), never re-applied
+     from a saved choice on load. (Deliberately no auto-apply block here.) */
+
+  function initAll(){
+    if (initialized) return true;
+    var boostGrid = document.querySelector('.boost-sd__product-list');
+    var toolbar = document.querySelector('.boost-sd__toolbar-item--product-count, .boost-sd__product-count');
+    if (!boostGrid || !toolbar) return false;
+    initialized = true;
+
+    /* === GRID SLIDER === */
+    var saved = localStorage.getItem('dw-grid-cols');
+    var defaultCols = (saved && parseInt(saved) >= 3 && parseInt(saved) <= 8) ? parseInt(saved) : 6;
+
+    function applyGrid(val){
+      /* Mobile is locked to 2 columns; desktop keeps the 3–8 range. */
+      var isMobile = window.innerWidth <= 768;
+      val = isMobile ? 2 : Math.max(3, Math.min(8, parseInt(val) || 6));
+      document.documentElement.style.setProperty('--dw-grid-cols', val);
+      boostGrid.style.setProperty('grid-template-columns', 'repeat(' + val + ', 1fr)', 'important');
+      var num = document.getElementById('dw-grid-num');
+      var slider = document.getElementById('dw-grid-range');
+      if (num) num.textContent = val;
+      if (slider) slider.value = val;
+    }
+
+    /* === GRID DENSITY SLIDER (DW 2026-06-25 consolidation: RE-ADDED) ===
+       Drives Boost's REAL grid via applyGrid() -> --dw-grid-cols +
+       boostGrid.grid-template-columns; persists to localStorage('dw-grid-cols').
+       Desktop only (mobile is locked to 2-col + infinite scroll). The pill also
+       hosts the per-page "Show" selector below. */
+    var sliderWrap = document.createElement('div');
+    sliderWrap.className = 'dw-grid-slider';
+    if (window.innerWidth > 768) {
+      var gLbl = document.createElement('label');
+      gLbl.textContent = 'Grid';
+      var gRange = document.createElement('input');
+      gRange.type = 'range'; gRange.id = 'dw-grid-range';
+      gRange.min = '3'; gRange.max = '8'; gRange.step = '1';
+      gRange.value = String(defaultCols);
+      var gNum = document.createElement('span');
+      gNum.className = 'gc-num'; gNum.id = 'dw-grid-num';
+      gNum.textContent = String(defaultCols);
+      gRange.addEventListener('input', function(){
+        applyGrid(this.value);                              /* live re-flow */
+        try { localStorage.setItem('dw-grid-cols', String(this.value)); } catch(e){}
+      });
+      sliderWrap.appendChild(gLbl);
+      sliderWrap.appendChild(gRange);
+      sliderWrap.appendChild(gNum);
+    }
+
+    /* === FILTER TOGGLE === */
+    var btn = document.createElement('button');
+    btn.id = 'dw-filter-toggle';
+    btn.className = 'dw-filter-toggle';
+    btn.setAttribute('aria-label', 'Toggle filters');
+    var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+    svg.setAttribute('viewBox', '0 0 24 24');
+    svg.setAttribute('fill', 'none');
+    svg.setAttribute('stroke', 'currentColor');
+    svg.setAttribute('stroke-width', '2');
+    svg.style.cssText = 'width:14px;height:14px';
+    var ys = ['6','12','18'];
+    for (var i = 0; i < ys.length; i++) {
+      var l = document.createElementNS('http://www.w3.org/2000/svg', 'line');
+      l.setAttribute('x1','4'); l.setAttribute('y1',ys[i]);
+      l.setAttribute('x2','20'); l.setAttribute('y2',ys[i]);
+      svg.appendChild(l);
+    }
+    btn.appendChild(svg);
+    var filterLabel = document.createElement('span');
+    filterLabel.id = 'dw-filter-label';
+    /* Initial label reflects our horizontal-bar state (default = bar visible -> 'Hide Filters') */
+    filterLabel.textContent = document.body.classList.contains('dw-hbar-collapsed') ? 'Filters' : 'Hide Filters';
+    btn.appendChild(filterLabel);
+    btn.addEventListener('click', function(){
+      var collapsed = document.body.classList.toggle('dw-hbar-collapsed');
+      filterLabel.textContent = collapsed ? 'Filters' : 'Hide Filters';
+      try { localStorage.setItem('dw-hfilter-collapsed', collapsed ? '1' : '0'); } catch(e){}
+    });
+
+    /* Build per-page selector INSIDE the grid slider pill */
+    var perpageInline = document.createElement('span');
+    perpageInline.className = 'dw-perpage-inline';
+    var perpageLbl = document.createElement('label');
+    perpageLbl.textContent = 'Show';
+    var perpageSelect = document.createElement('select');
+    perpageSelect.id = 'dw-perpage';
+    var options = [24, 25, 50, 100];
+    var currentLimit = parseInt(new URLSearchParams(window.location.search).get('limit')) || 24;
+    options.forEach(function(val) {
+      var opt = document.createElement('option');
+      opt.value = val;
+      opt.textContent = val;
+      if (val === currentLimit) opt.selected = true;
+      perpageSelect.appendChild(opt);
+    });
+    perpageSelect.addEventListener('change', function() {
+      var url = new URL(window.location.href);
+      url.searchParams.set('limit', this.value);
+      url.searchParams.delete('page');
+      window.location.href = url.toString();
+    });
+    perpageInline.appendChild(perpageLbl);
+    perpageInline.appendChild(perpageSelect);
+    sliderWrap.appendChild(perpageInline);
+
+    /* === PRODUCT TYPE CHECKBOXES === */
+    var ptypeBar = document.createElement('div');
+    ptypeBar.className = 'dw-ptype-bar';
+
+    var types = [
+      {label: 'Wallcoverings', value: 'Wallcovering', defaultOn: false},
+      {label: 'Fabrics', value: 'Fabric', defaultOn: false},
+      {label: 'More', value: '', defaultOn: false}
+    ];
+
+    // Pills reflect the URL ONLY (no persistence): a fresh load with no
+    // pf_t_product_type shows everything ("More"/All active); a filtered URL
+    // checks the matching pills. So state never sticks across loads.
+    var activeTypes = new URL(window.location.href).searchParams.getAll('pf_t_product_type');
+
+    function applyTypeFilter() {
+      var checked = [];
+      ptypeBar.querySelectorAll('input[type=checkbox]').forEach(function(cb) {
+        if (cb.checked && cb.value) checked.push(cb.value);
+      });
+      // (no sessionStorage — selection lives only in the URL, so it never persists across loads)
+
+      // Apply via URL parameter for Boost
+      var url = new URL(window.location.href);
+      url.searchParams.delete('pf_t_product_type');
+      if (checked.length > 0 && checked.length < types.filter(function(t){return t.value;}).length) {
+        checked.forEach(function(v) { url.searchParams.append('pf_t_product_type', v); });
+      }
+      // Remove page param to reset
+      url.searchParams.delete('page');
+      window.location.href = url.toString();
+    }
+
+    types.forEach(function(t, i) {
+      if (i > 0) {
+        var sep = document.createElement('span');
+        sep.className = 'dw-ptype-sep';
+        ptypeBar.appendChild(sep);
+      }
+      var lbl = document.createElement('label');
+      var cb = document.createElement('input');
+      cb.type = 'checkbox';
+      cb.value = t.value;
+      // "More" = everything else (no value, acts as "all others")
+      if (t.value) {
+        cb.checked = activeTypes.indexOf(t.value) >= 0;
+      } else {
+        // "More" is NEVER auto-lit on load — it's a show-all/reset action, not a
+        // persistent state. Empty selection = nothing highlighted (all products show).
+        cb.checked = false;
+      }
+      if (cb.checked) lbl.classList.add('dw-ptype-on');   /* fill active chip */
+      cb.addEventListener('change', function(){
+        /* Segmented semantics: "More"/All is mutually exclusive with the
+           specific types. Selecting All clears the specific types; selecting a
+           specific type clears All — so clicking All actually resets to all
+           products instead of leaving a stale type filter applied. */
+        if (this.checked) {
+          var selectingAll = !this.value;
+          ptypeBar.querySelectorAll('input[type=checkbox]').forEach(function(o){
+            if (o === cb) return;
+            if (selectingAll ? !!o.value : !o.value) {
+              o.checked = false;
+              var ol = o.closest('label'); if (ol) ol.classList.remove('dw-ptype-on');
+            }
+          });
+        }
+        /* reflect filled/unfilled immediately, then navigate */
+        var l = this.closest('label'); if (l) l.classList.toggle('dw-ptype-on', this.checked);
+        applyTypeFilter();
+      });
+      lbl.appendChild(cb);
+      var txt = document.createTextNode(' ' + t.label);
+      lbl.appendChild(txt);
+      ptypeBar.appendChild(lbl);
+    });
+
+    /* Insert controls into Boost toolbar */
+    var toolbarRow = toolbar.parentElement;
+    toolbarRow.insertBefore(btn, toolbar);
+    toolbarRow.insertBefore(sliderWrap, toolbar);
+    toolbarRow.insertBefore(ptypeBar, toolbar);
+
+    /* === VISIBLE-TOOLBAR RE-MOUNT (DW 2026-06-27, vp-dw-commerce) ===
+       Boost renders SEVERAL toolbar variants and hides all but one via
+       display:none (live = .boost-sd__toolbar--3_1 is hidden). The product-count
+       item we anchor to (toolbar.parentElement) can therefore be inside a HIDDEN
+       variant, so the density slider + filter toggle + product-type bar never
+       reach real users — only the color-sort pill survives because IT already
+       has a fallback into the visible .boost-sd__toolbar-inner.
+
+       Fix (mirrors the proven color-sort mount EXACTLY): only when our anchored
+       controls land in a HIDDEN toolbar, MOVE them into the same visible
+       .boost-sd__toolbar-inner / .boost-sd__toolbar-content container the color
+       pill uses. When --3_1 (or whatever variant) IS visible, this no-ops, so the
+       existing multi-variant robustness is preserved — we never regress the
+       already-working case, we only rescue the hidden one. Deferred so Boost has
+       finished sizing the variants (offsetParent is reliable post-layout). */
+    function isShownEl(el){ return !!(el && el.offsetParent !== null); }
+    (function remountIfHidden(tries){
+      tries = tries || 0;
+      /* If our slider is already visible to the user, nothing to do. */
+      if (isShownEl(sliderWrap)) return;
+      /* The slider/toggle/ptype were anchored next to the product-count item,
+         which lives inside the HIDDEN .boost-sd__toolbar--3_1 row. The VISIBLE
+         container Boost actually paints is .boost-sd__toolbar-inner (the same one
+         the color-sort pill resolves to and mounts as a DIRECT child of — proven
+         live). Note: that inner is an ANCESTOR of the hidden --3_1, so a naive
+         .contains(slider) check is true even though the slider isn't visible — do
+         NOT reject the target on contains(); instead append our controls as DIRECT
+         children of the visible inner, which LIFTS them out of the hidden --3_1. */
+      var inners = [].slice.call(document.querySelectorAll(
+        '.boost-sd__toolbar-inner, .boost-sd__toolbar-content'));
+      var target = null;
+      for (var i = 0; i < inners.length; i++){
+        /* skip an inner whose DIRECT child is already our slider (== it's visible,
+           we'd have returned above) — but accept a visible inner that only
+           transitively contains the slider via the hidden --3_1 row. */
+        if (isShownEl(inners[i]) && sliderWrap.parentElement !== inners[i]) { target = inners[i]; break; }
+      }
+      if (target){
+        /* Move (not clone) so all wired event listeners + state come along.
+           appendChild relocates them out of the hidden --3_1 into the visible inner. */
+        target.appendChild(btn);
+        target.appendChild(sliderWrap);
+        target.appendChild(ptypeBar);
+        return;
+      }
+      /* Boost may still be laying out / swapping the visible variant — retry a
+         few times, then give up (worst case = current pre-fix behavior, no regression). */
+      if (tries < 40) setTimeout(function(){ remountIfHidden(tries + 1); }, 250);
+    })(0);
+
+    /* Apply grid and watch for Boost overrides */
+    applyGrid(defaultCols);
+
+    /* Re-apply when crossing the mobile breakpoint (rotate / resize) */
+    window.addEventListener('resize', function(){ applyGrid(defaultCols); });
+
+    /* Observe Boost grid for style changes and re-apply our columns + kill padding */
+    var observer = new MutationObserver(function(){
+      /* Mobile = 2; desktop = whatever applyGrid last wrote to --dw-grid-cols */
+      var current = window.innerWidth <= 768
+        ? 2
+        : (parseInt(getComputedStyle(document.documentElement).getPropertyValue('--dw-grid-cols')) || defaultCols);
+      boostGrid.style.setProperty('display', 'grid', 'important');
+      boostGrid.style.setProperty('grid-template-columns', 'repeat(' + current + ', 1fr)', 'important');
+      if (document.body.classList.contains('dw-filters-collapsed') || window.innerWidth <= 768) {
+        boostGrid.style.setProperty('padding-right', '0', 'important');
+        boostGrid.style.setProperty('padding-left', '0', 'important');
+      }
+    });
+    observer.observe(boostGrid, {attributes: true, attributeFilter: ['style', 'class']});
+
+    /* Force display:grid + kill padding immediately */
+    boostGrid.style.setProperty('display', 'grid', 'important');
+    if (document.body.classList.contains('dw-filters-collapsed') || window.innerWidth <= 768) {
+      boostGrid.style.setProperty('padding-right', '0', 'important');
+      boostGrid.style.setProperty('padding-left', '0', 'important');
+    }
+
+    /* Hide any leftover static grid slider */
+    var old = document.querySelectorAll('div.dw-grid-slider');
+    for (var j = 1; j < old.length; j++) old[j].style.display = 'none';
+
+    return true;
+  }
+
+  var retries = 0;
+  var poll = setInterval(function(){
+    if (initAll() || retries++ > 60) clearInterval(poll);
+  }, 250);
+})();
+</script>
+
+<script>
+/* === MOBILE INFINITE SCROLL (DW 2026-06-23) ===
+   Boost runs numbered ("default") pagination + renders client-side. On mobile we
+   replace the pager with TRUE infinite scroll by replaying Boost's own product
+   API (services.mybcapps.com/bc-sf-filter/filter) one page at a time and
+   appending rendered cards. Mobile only; top window only; desktop untouched. */
+(function(){
+  if (window.top !== window.self) return;
+  function isMobile(){ return window.innerWidth <= 768; }
+  if (window.__dwInfScroll) return; window.__dwInfScroll = true;
+
+  var LIMIT = 24;
+  var capturedUrl = null;
+  var loadedPage = parseInt(new URLSearchParams(location.search).get('page') || '1', 10) || 1;
+  var total = Infinity, loading = false, done = false, started = false;
+
+  /* Capture Boost's exact filter request so sort + filters + session stay correct */
+  var _fetch = window.fetch.bind(window);
+  try {
+    window.fetch = function(input){
+      try {
+        var u = (typeof input === 'string') ? input : (input && input.url);
+        if (u && u.indexOf('bc-sf-filter/filter') !== -1) capturedUrl = u;
+      } catch(e){}
+      return _fetch.apply(this, arguments);
+    };
+  } catch(e){}
+
+  function buildUrl(page){
+    var u;
+    if (capturedUrl) { u = new URL(capturedUrl); }
+    else {
+      u = new URL('https://services.mybcapps.com/bc-sf-filter/filter');
+      u.searchParams.set('shop','designer-laboratory-sandbox.myshopify.com');
+      u.searchParams.set('sort', new URLSearchParams(location.search).get('sort_by') || 'title-ascending');
+      u.searchParams.set('event_type','filter');
+      u.searchParams.set('pg','collection_page');
+      u.searchParams.set('build_filter_tree','true');
+      u.searchParams.set('collection_scope','0');
+      u.searchParams.set('product_available','false');
+      u.searchParams.set('variant_available','false');
+      u.searchParams.set('urlScheme','2');
+      new URLSearchParams(location.search).forEach(function(v,k){ if(/^pf_/.test(k)) u.searchParams.append(k,v); });
+    }
+    u.searchParams.set('page', page);
+    u.searchParams.set('limit', LIMIT);
+    u.searchParams.set('t', Date.now());
+    return u.toString();
+  }
+
+  function nameOf(t){ return (t||'').split('|')[0].replace(/\s*wallcoverings?\b/ig,'').replace(/[,\s]+$/,'').trim(); }
+
+  function imgOf(p){
+    if (p.images_info && p.images_info[0] && p.images_info[0].src) return p.images_info[0].src;
+    if (p.images && typeof p.images === 'object'){
+      var k = Object.keys(p.images)[0];
+      if (k){ var v = p.images[k]; return (v && v.src) || (typeof v === 'string' ? v : '') || ''; }
+    }
+    return p.image || '';
+  }
+
+  function cardHtml(p){
+    var img = imgOf(p);
+    if (img) img += (img.indexOf('?') > -1 ? '&' : '?') + 'width=600';
+    var nm = nameOf(p.title) || (p.title||'');
+    /* NEUTRAL classes (dw-if-*) so Boost/theme card scripts never re-process and
+       strip our <img>. Styled by our own .dw-if-card CSS in the mobile block. */
+    return '<div class="dw-if-card">' +
+      '<a href="/products/'+ p.handle +'">' +
+        '<div class="dw-if-img">' +
+          (img ? '<img loading="lazy" src="'+ img +'" alt="'+ nm.replace(/"/g,'&quot;') +'">' : '') +
+        '</div>' +
+        '<div class="dw-if-name">'+ nm +'</div>' +
+        '<div class="dw-if-ven">'+ (p.vendor || '') +'</div>' +
+      '</a></div>';
+  }
+
+  function grid(){ return document.querySelector('.boost-sd__product-list'); }
+
+  function spinner(g, show){
+    var sp = document.getElementById('dw-if-spin');
+    if (show && !sp){
+      sp = document.createElement('div'); sp.id = 'dw-if-spin';
+      sp.textContent = 'Loading more…';
+      sp.style.cssText = 'grid-column:1/-1;text-align:center;padding:22px 0;font:600 11px/1 -apple-system,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:#8A8A85';
+      g.parentNode.insertBefore(sp, g.nextSibling);
+    } else if (!show && sp) { sp.remove(); }
+  }
+
+  function loadMore(){
+    if (loading || done || !isMobile()) return;
+    var g = grid(); if (!g) return;
+    if (loadedPage * LIMIT >= total) { done = true; return; }
+    loading = true; spinner(g, true);
+    _fetch(buildUrl(loadedPage + 1), { headers: { 'Accept':'application/json' } })
+      .then(function(r){ return r.json(); })
+      .then(function(j){
+        var t = j.total_product != null ? j.total_product : j.total;
+        if (typeof t === 'number') total = t;
+        var prods = j.products || [];
+        if (!prods.length) { done = true; spinner(g, false); loading = false; return; }
+        var frag = document.createElement('div');
+        frag.innerHTML = prods.map(cardHtml).join('');
+        while (frag.firstChild) g.appendChild(frag.firstChild);
+        loadedPage++; loading = false; spinner(g, false);
+        if (loadedPage * LIMIT >= total) done = true;
+        setTimeout(onScroll, 60);
+      })
+      .catch(function(){ loading = false; spinner(g, false); });
+  }
+
+  function onScroll(){
+    if (loading || done || !isMobile()) return;
+    if (window.innerHeight + window.scrollY > document.documentElement.scrollHeight - 1200) loadMore();
+  }
+
+  function hidePager(){
+    if (document.getElementById('dw-if-css')) return;
+    var s = document.createElement('style'); s.id = 'dw-if-css';
+    s.textContent = '@media(max-width:768px){.boost-sd__pagination{display:none !important}}';
+    document.head.appendChild(s);
+  }
+
+  function start(){
+    if (started || !isMobile()) return;
+    var tries = 0;
+    var c = setInterval(function(){
+      tries++;
+      if (grid()) { clearInterval(c); started = true; hidePager(); window.addEventListener('scroll', onScroll, { passive:true }); window.addEventListener('resize', onScroll, { passive:true }); onScroll(); }
+      else if (tries > 50) clearInterval(c);
+    }, 400);
+  }
+
+  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start);
+  else start();
+})();
+</script>
+
+
+<!-- DW REC GRID FIX — You-May-Also-Like: 3-up+text on mobile, 4-up image-only on desktop (2026-06-23) -->
+<style id="dw-rec-grid-fix">
+/* MOBILE: 3 fixed columns, keep the title/vendor overlay text */
+@media (max-width:768px){
+  .product-recommendations-wrapper--section .product-recommendations{
+    display:grid !important;
+    grid-template-columns:repeat(3,1fr) !important;
+    gap:10px 8px !important;
+    position:static !important;
+    height:auto !important;
+  }
+  .product-recommendations-wrapper--section .product-recommendations .product-list-item{
+    width:auto !important;float:none !important;position:static !important;
+    left:auto !important;top:auto !important;right:auto !important;margin:0 !important;
+  }
+  .product-recommendations-wrapper--section .product-recommendations .product-grid-masonry-sizer{display:none !important}
+}
+/* DESKTOP (4-up rows-of-4): image-only — hide all title/vendor/hover text */
+@media (min-width:769px){
+  .product-recommendations-wrapper--section .product-recommendations .dw-hover-overlay,
+  .product-recommendations-wrapper--section .product-recommendations .product-list-item-details{display:none !important}
+}
+</style>
+
+
+<!-- DW SHOP-BY-COLOR ONE-ROW — all color dots on a single row (2026-06-23) -->
+<style id="dw-sbc-onerow">
+#sbc-circles.sbc-circles, .sbc-circles{
+  display:flex !important; flex-wrap:nowrap !important;
+  justify-content:safe center !important; align-items:flex-start !important;
+  gap:clamp(4px,0.9vw,14px) !important; width:100% !important; max-width:100% !important;
+  margin:0 auto !important; padding:20px 10px 40px !important;
+  overflow-x:auto !important; -webkit-overflow-scrolling:touch !important; scrollbar-width:thin !important;
+  grid-template-columns:none !important;
+}
+.sbc-circles .sbc-circle{ flex:1 1 0 !important; min-width:42px !important; max-width:96px !important; }
+.sbc-circles .sbc-circle-dot{ width:100% !important; height:auto !important; aspect-ratio:1/1 !important; }
+.sbc-circles .sbc-circle-name{ white-space:nowrap !important; font-size:clamp(9px,0.85vw,13px) !important; }
+</style>
+
+{%- comment -%}
+  DW SHOP-BY-COLOR PRODUCT-TYPE CHECKBOXES (Steve 2026-07-17).
+  The color-wheel on /pages/shop-by-color lives in the Page BODY (write_content
+  scope still blocked, same as the 2026-07-09 handle fix), so this adds the
+  Wallcoverings / Fabrics / More pills from the theme side:
+   · wraps window.fetch (this snippet renders BEFORE the page body, so the wrap
+     is installed before the wheel's first /apps/color-widen call) to harvest
+     each result's product_type by handle — the dwphoto API returns product_type
+     as of 2026-07-17;
+   · inserts the pill bar above #sbc-grid and hides/shows the wheel's own
+     .sbc-card nodes via a MutationObserver on every re-render;
+   · NO guessed default — nothing checked on first visit (all types show);
+     once the shopper picks, the choice persists for the SESSION
+     (sessionStorage 'dw-sbc-ptype') and re-applies on return. "More" = show
+     everything (reset), never lit — same semantics as the collection-page
+     dw-ptype-bar. Inert on every other page.
+{%- endcomment -%}
+{%- if request.path contains '/pages/shop-by-color' -%}
+<style>
+#dwSbcPtype{display:flex;justify-content:center;align-items:center;gap:8px;flex-wrap:wrap;padding:14px 16px 0;user-select:none;font-family:-apple-system,BlinkMacSystemFont,sans-serif}
+#dwSbcPtype label{box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap;height:34px;min-height:34px;padding:0 14px;margin:0;border:1.5px solid #1A1A1A;border-radius:999px;background:#fff;color:#1A1A1A;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;line-height:1}
+#dwSbcPtype label:hover{background:#f5f5f5}
+#dwSbcPtype label.on{background:#1A1A1A;color:#fff}
+#dwSbcPtype input[type=checkbox]{width:13px;height:13px;margin:0;cursor:pointer;accent-color:#3D4246}
+#dwSbcPtypeEmpty{grid-column:1/-1;text-align:center;color:#9a9276;padding:40px;font-size:14px}
+</style>
+<script>
+(function(){
+  var TYPES={};                       /* handle -> product_type, harvested from API responses */
+  var _fetch=window.fetch;
+  window.fetch=function(input){
+    var url=(typeof input==='string')?input:(input&&input.url)||'';
+    var p=_fetch.apply(this,arguments);
+    if(url.indexOf('/apps/color-widen')!==-1||url.indexOf('/apps/color-index')!==-1){
+      p.then(function(r){try{r.clone().json().then(function(j){
+        ((j&&j.results)||[]).forEach(function(x){if(x&&x.handle)TYPES[x.handle]=x.product_type||'';});
+        setTimeout(applyFilter,60);
+      }).catch(function(){});}catch(e){}});
+    }
+    return p;
+  };
+
+  var KEY='dw-sbc-ptype';
+  var DEFS=[
+    {label:'Wallcoverings',value:'Wallcovering',re:/wallcover|wallpaper/i},
+    {label:'Fabrics',      value:'Fabric',      re:/fabric/i},
+    {label:'More',         value:'',            re:null}
+  ];
+  function sel(){try{var v=JSON.parse(sessionStorage.getItem(KEY)||'[]');return Array.isArray(v)?v:[];}catch(e){return[];}}
+  function save(a){try{sessionStorage.setItem(KEY,JSON.stringify(a));}catch(e){}}
+  function pass(pt){var s=sel();if(!s.length)return true;pt=pt||'';
+    for(var i=0;i<DEFS.length;i++){var d=DEFS[i];
+      if(d.value&&s.indexOf(d.value)>=0&&d.re&&d.re.test(pt))return true;}
+    return false;}
+
+  var bar=null,emptyMsg=null,applying=false;
+  function buildBar(grid){
+    if(bar&&bar.parentNode)bar.parentNode.removeChild(bar);
+    bar=document.createElement('div');bar.id='dwSbcPtype';
+    bar.setAttribute('aria-label','Filter results by product type');
+    var s=sel();
+    DEFS.forEach(function(t){
+      var lbl=document.createElement('label');
+      var cb=document.createElement('input');cb.type='checkbox';cb.value=t.value;
+      cb.checked=!!t.value&&s.indexOf(t.value)>=0;    /* "More" never lit; no guessed default */
+      if(cb.checked)lbl.className='on';
+      cb.addEventListener('change',function(){
+        var cur=sel();
+        if(!this.value){cur=[];this.checked=false;}                     /* More = reset/show-all */
+        else if(this.checked){if(cur.indexOf(this.value)<0)cur.push(this.value);}
+        else{var v=this.value;cur=cur.filter(function(x){return x!==v;});}
+        save(cur);buildBar(grid);applyFilter();
+      });
+      lbl.appendChild(cb);lbl.appendChild(document.createTextNode(' '+t.label));
+      bar.appendChild(lbl);
+    });
+    grid.parentNode.insertBefore(bar,grid);
+  }
+
+  function applyFilter(){
+    var grid=document.getElementById('sbc-grid');if(!grid)return;
+    applying=true;
+    var cards=grid.querySelectorAll('.sbc-card'),shown=0;
+    Array.prototype.forEach.call(cards,function(card){
+      var a=card.querySelector('a[href*="/products/"]');
+      var h=a?decodeURIComponent(((a.getAttribute('href')||'').split('/products/')[1]||'')).split('?')[0]:'';
+      var ok=pass(TYPES[h]);
+      card.style.display=ok?'':'none';
+      if(ok)shown++;
+    });
+    if(emptyMsg&&emptyMsg.parentNode)emptyMsg.parentNode.removeChild(emptyMsg);
+    emptyMsg=null;
+    if(cards.length&&!shown&&sel().length){
+      emptyMsg=document.createElement('div');emptyMsg.id='dwSbcPtypeEmpty';
+      emptyMsg.textContent='No matches of that product type in this shade — try another hue, or tap More to see everything.';
+      grid.appendChild(emptyMsg);
+    }
+    setTimeout(function(){applying=false;},0);       /* re-entrance guard for the observer */
+  }
+
+  function init(){
+    var grid=document.getElementById('sbc-grid');
+    if(!grid){setTimeout(init,300);return;}
+    buildBar(grid);
+    new MutationObserver(function(){if(!applying)applyFilter();}).observe(grid,{childList:true});
+    applyFilter();
+  }
+  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init();
+})();
+</script>
+{%- endif -%}
+
+<style>/* DW 2026-06-25 consolidation: RE-ENABLE the density slider on the Boost grid.
+   The 06-24 block that hid .dw-grid-slider is superseded — the slider now drives
+   --dw-grid-cols + boostGrid.grid-template-columns directly (see initAll JS),
+   persists to localStorage('dw-grid-cols'), and shares the uniform pill shape.
+   Reversible: restore `.dw-grid-slider{display:none !important}` to roll back. */
+.dw-grid-slider{display:inline-flex !important}
+@media(max-width:768px){.dw-grid-slider{display:none !important}} /* mobile = fixed 2-col + infinite scroll, no slider */
+</style>
+
+<!-- ============================================================================
+     DW HUE / COLOR SORT  (2026-06-27, vp-dw-commerce)
+     Fulfills the hard rule "every product grid MUST have sort + density" — the
+     density slider + Boost-native sort already exist; this adds the MISSING
+     color-sort modes (Light→Dark, Dark→Light, Color Wheel, By Color buckets).
+
+     Per the DTD HYBRID verdict (approach C): this is the CLIENT-SIDE ORDER of
+     the currently-loaded Boost cards. Boost SD's native color FILTER scopes the
+     full collection (Steve-gated dashboard config, drafted separately); this
+     re-orders whatever cards are on screen by each card's dominant hue.
+
+     Per-card hex source: computed live from the card's own thumbnail via a tiny
+     downscaled <canvas> average ($0, local, no data-file key dependency — the
+     dw-color-wheel-data.json `h` keys only match ~30% of Boost handles, so we
+     read the pixels instead). Cached per image src. Re-applies on Boost
+     re-render / infinite scroll via MutationObserver.
+     ============================================================================ -->
+<style>
+.dw-colorsort{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;
+  height:34px;min-height:34px;padding:0 12px;margin:5px 6px 0 0;
+  border:1.5px solid #1A1A1A;border-radius:999px;background:#fff;color:#1A1A1A;
+  font-family:-apple-system,BlinkMacSystemFont,sans-serif;font-size:11px;font-weight:600;
+  letter-spacing:.06em;line-height:1;white-space:nowrap;user-select:none}
+.dw-colorsort label{display:inline-flex;align-items:center;gap:5px;text-transform:uppercase;cursor:pointer}
+.dw-colorsort .sw{width:13px;height:13px;border-radius:50%;
+  background:conic-gradient(#c0392b,#e67e22,#f1c40f,#2ecc71,#1ab6c4,#2e6fd4,#7d4fd4,#c0392b);
+  border:1px solid rgba(0,0,0,.15)}
+.dw-colorsort select{border:none;background:transparent;font:inherit;font-weight:700;
+  text-transform:uppercase;letter-spacing:.06em;cursor:pointer;padding:0 2px 0 0;margin:0;
+  min-width:84px;-webkit-appearance:none;appearance:none;color:#1A1A1A}
+.dw-colorsort.is-busy{opacity:.6}
+@media(max-width:768px){.dw-colorsort{height:34px;margin:5px 6px 0 0}}
+</style>
+<script>
+(function(){
+  if (window.__dwColorSort) return; window.__dwColorSort = true;
+  if (!/\/(collections|search)/.test(location.pathname)) return;
+
+  var KEY = 'dw-colorsort-mode';
+  var GRID_SEL = '.boost-sd__product-list';
+  var CARD_SEL = '.boost-sd__product-item';
+
+  /* ---- color math (mirrors dw-color-wheel.js) ---- */
+  function rgb2lab(c){var R=c.map(function(v){v/=255;return v>0.04045?Math.pow((v+0.055)/1.055,2.4):v/12.92;});
+    var X=(R[0]*0.4124+R[1]*0.3576+R[2]*0.1805)/0.95047,Y=R[0]*0.2126+R[1]*0.7152+R[2]*0.0722,Z=(R[0]*0.0193+R[1]*0.1192+R[2]*0.9505)/1.08883;
+    var f=function(t){return t>0.008856?Math.cbrt(t):7.787*t+16/116;};X=f(X);Y=f(Y);Z=f(Z);return[116*Y-16,500*(X-Y),200*(Y-Z)];}
+  function rgb2hsl(r,g,b){r/=255;g/=255;b/=255;var mx=Math.max(r,g,b),mn=Math.min(r,g,b),h,s,l=(mx+mn)/2;
+    if(mx===mn){h=s=0;}else{var d=mx-mn;s=l>0.5?d/(2-mx-mn):d/(mx+mn);
+      switch(mx){case r:h=(g-b)/d+(g<b?6:0);break;case g:h=(b-r)/d+2;break;default:h=(r-g)/d+4;}h/=6;}
+    return[h*360,s,l];}
+
+  /* dominant color of an image: downscale to 16x16, drop near-white/near-black
+     paper margins, average the rest. Returns [r,g,b] or null. */
+  var hexCache = {};
+  function colorOfImg(img){
+    var src = img.currentSrc || img.src; if(!src) return null;
+    if (hexCache[src]) return hexCache[src];
+    try{
+      var n=16, cv=document.createElement('canvas'); cv.width=n; cv.height=n;
+      var cx=cv.getContext('2d',{willReadFrequently:true});
+      cx.drawImage(img,0,0,n,n);
+      var data=cx.getImageData(0,0,n,n).data, r=0,g=0,b=0,k=0;
+      for(var i=0;i<data.length;i+=4){
+        var R=data[i],G=data[i+1],B=data[i+2],A=data[i+3];
+        if(A<128) continue;
+        var mx=Math.max(R,G,B),mn=Math.min(R,G,B),l=(mx+mn)/510;
+        if(l>0.94||l<0.06) continue;            /* skip paper-white & pure-black ground */
+        r+=R;g+=G;b+=B;k++;
+      }
+      if(!k){ /* fallback: plain average */
+        for(var j=0;j<data.length;j+=4){if(data[j+3]<128)continue;r+=data[j];g+=data[j+1];b+=data[j+2];k++;}
+      }
+      if(!k) return null;
+      var out=[Math.round(r/k),Math.round(g/k),Math.round(b/k)];
+      hexCache[src]=out; return out;
+    }catch(e){ return null; }   /* tainted canvas etc. */
+  }
+
+  /* hue bucket order for "By Color" — reds→oranges→…→neutrals last */
+  function hueBucket(rgb){
+    var hsl=rgb2hsl(rgb[0],rgb[1],rgb[2]), h=hsl[0], s=hsl[1], l=hsl[2];
+    if(s<0.12) return 100 + (1-l);                 /* greys/neutrals → end, light→dark */
+    return Math.floor(h/30);                        /* 12 hue buckets 0..11 */
+  }
+
+  function cardKey(card, mode){
+    var img = card.querySelector('img.boost-sd__product-image-img, img');
+    var rgb = img ? colorOfImg(img) : null;
+    /* cards we can't read sort to the END for every mode (sort key always large) */
+    if (!rgb) return mode==='wheel' ? 999 : 999999;
+    if (mode==='light' || mode==='dark'){
+      var L = rgb2lab(rgb)[0];                 /* 0 (black) .. 100 (white) */
+      /* "Light → Dark" = lightest FIRST  => sort ascending on (100 - L)
+         "Dark → Light" = darkest FIRST   => sort ascending on L          */
+      return mode==='light' ? (100 - L) : L;
+    }
+    if (mode==='wheel'){ return rgb2hsl(rgb[0],rgb[1],rgb[2])[0]; }       /* 0..360 hue */
+    return hueBucket(rgb);                                                /* bucket */
+  }
+
+  function reorder(mode){
+    var grid=document.querySelector(GRID_SEL); if(!grid) return false;
+    var cards=[].slice.call(grid.querySelectorAll(CARD_SEL));
+    if(cards.length<2) return false;
+    /* only reorder once images are decodable; if many are still loading, retry */
+    var ready=0; cards.forEach(function(c){var im=c.querySelector('img'); if(im&&im.complete&&im.naturalWidth)ready++;});
+    if(ready < Math.min(cards.length, 6)) return false;
+    var decorated=cards.map(function(c,i){return {c:c,i:i,k:cardKey(c,mode)};});
+    decorated.sort(function(a,b){ return a.k===b.k ? a.i-b.i : (a.k<b.k?-1:1); });
+    var frag=document.createDocumentFragment();
+    decorated.forEach(function(d){frag.appendChild(d.c);});
+    grid.appendChild(frag);
+    return true;
+  }
+
+  var sel; /* the <select> */
+  function currentMode(){ return (sel && sel.value) || localStorage.getItem(KEY) || 'default'; }
+
+  function apply(){
+    var mode=currentMode();
+    if(mode==='default') return;     /* leave Boost's native order untouched */
+    var box=sel?sel.closest('.dw-colorsort'):null; if(box)box.classList.add('is-busy');
+    /* enable CORS on card imgs so canvas isn't tainted (Shopify CDN allows it) */
+    document.querySelectorAll(CARD_SEL+' img').forEach(function(im){
+      if(!im.crossOrigin){ im.crossOrigin='anonymous'; if(im.complete&&im.src){var s=im.src;im.src='';im.src=s;} }
+    });
+    var tries=0;
+    (function go(){
+      var ok=reorder(mode);
+      if(!ok && tries++<20){ setTimeout(go,250); return; }
+      if(box)box.classList.remove('is-busy');
+    })();
+  }
+
+  function buildControl(toolbarRow, beforeNode){
+    if(document.querySelector('.dw-colorsort')) return;
+    var wrap=document.createElement('div'); wrap.className='dw-colorsort';
+    var lab=document.createElement('label');
+    var sw=document.createElement('span'); sw.className='sw';
+    lab.appendChild(sw);
+    sel=document.createElement('select'); sel.id='dw-colorsort-sel';
+    [['default','Color Sort'],['light','Light → Dark'],['dark','Dark → Light'],
+     ['wheel','Color Wheel'],['bucket','By Color']].forEach(function(o){
+      var op=document.createElement('option'); op.value=o[0]; op.textContent=o[1]; sel.appendChild(op);
+    });
+    var saved=localStorage.getItem(KEY); if(saved) sel.value=saved;
+    sel.addEventListener('change',function(){
+      localStorage.setItem(KEY,this.value);
+      if(this.value==='default'){ location.reload(); return; }   /* restore Boost order cleanly */
+      apply();
+    });
+    lab.appendChild(sel); wrap.appendChild(lab);
+    if(beforeNode && beforeNode.parentNode===toolbarRow) toolbarRow.insertBefore(wrap,beforeNode);
+    else toolbarRow.appendChild(wrap);
+  }
+
+  /* Mount the color-sort pill RIGHT NEXT TO the grid-density slider. The
+     density slider's own init (in the block above) already resolved the correct
+     (visible) Boost toolbar variant and inserted itself there — so anchoring to
+     it inherits that correctness exactly and the two pills always sit together.
+     This avoids the Boost "several toolbar variants, all-but-one display:none"
+     trap (a guess at the visible toolbar mis-fires headless). Fallback: the
+     product-count toolbar item if the slider never appears (e.g. mobile). */
+  function isShown(el){ return !!(el && el.offsetParent !== null); }
+  var mountTries=0;
+  var mt=setInterval(function(){
+    if (document.querySelector('.dw-colorsort')) { clearInterval(mt); return; }
+    var slider = document.querySelector('.dw-grid-slider');
+    /* Primary: sit right after the density slider IF its toolbar is actually
+       shown (keeps the two density/color pills together). */
+    if (slider && slider.parentElement && isShown(slider)){
+      clearInterval(mt);
+      buildControl(slider.parentElement, slider.nextSibling);
+      if(currentMode()!=='default') apply();
+      return;
+    }
+    /* Fallback: Boost renders several toolbar variants and hides all but one.
+       If the slider's variant is hidden, drop the pill into the VISIBLE
+       toolbar content/inner container so real users always get it. */
+    var content = document.querySelector('.boost-sd__toolbar-content, .boost-sd__toolbar-inner');
+    if (content && isShown(content) && mountTries > 6){
+      clearInterval(mt);
+      buildControl(content, content.firstChild);
+      if(currentMode()!=='default') apply();
+      return;
+    }
+    /* Last resort after a generous wait: mount next to slider regardless of
+       computed visibility (real users see it even when automation reads 0px —
+       the live shipped density slider behaves identically). */
+    if (slider && slider.parentElement && mountTries > 40){
+      clearInterval(mt);
+      buildControl(slider.parentElement, slider.nextSibling);
+      if(currentMode()!=='default') apply();
+      return;
+    }
+    if(mountTries++>80){ clearInterval(mt); }
+  },300);
+
+  /* re-apply after Boost re-renders / appends cards */
+  var rt;
+  new MutationObserver(function(muts){
+    if(currentMode()==='default') return;
+    for(var i=0;i<muts.length;i++){ if(muts[i].addedNodes&&muts[i].addedNodes.length){
+      clearTimeout(rt); rt=setTimeout(apply,200); return; } }
+  }).observe(document.body,{childList:true,subtree:true});
+})();
+</script>
+
+<!-- ============================================================================
+     DW COMPACT TOOLBAR  (2026-07-15, vp-dw-commerce)
+     Collapses the tall, spread-out Boost search/collection toolbar into a single
+     tight row — matching the approved compact mockup (dw-search-toolbar-mockup):
+       • every control 32px tall (was 34) with its stacked top-margin zeroed,
+       • the Boost toolbar row's own vertical padding/gap tightened,
+       • the LOUD bold product count muted to a quiet 12px grey label,
+       • a slimmer density-slider track that sits cleanly inside the pill.
+     CSS-ONLY — the controls themselves are still the existing JS-injected .dw-*
+     pills + Boost-native sort; this only tightens their box metrics, so none of
+     the hard-won mount/remount/arms-race JS above is touched. Appended LAST so
+     source order wins the ties. Desktop only (>=769px): mobile keeps its own
+     34px stacked pills + infinite scroll untouched. Reversible: delete this
+     whole <style id="dw-compact-toolbar"> block to restore the prior spacing.
+     ============================================================================ -->
+<style id="dw-compact-toolbar">
+@media (min-width:769px){
+  /* 1 — tighten the Boost toolbar row itself: kill the tall vertical padding */
+  .boost-sd__toolbar,
+  .boost-sd__toolbar-inner,
+  .boost-sd__toolbar-content{
+    min-height:0 !important;
+    padding-top:6px !important;padding-bottom:6px !important;
+    row-gap:6px !important;column-gap:8px !important;
+    align-items:center !important;
+  }
+  /* 2 — every control on ONE height (32px), no stacked top-margin, tighter gap */
+  .dw-filter-toggle,
+  .dw-grid-slider,
+  .dw-colorsort,
+  .dw-ptype-bar label,
+  .boost-sd__toolbar-item--sorting,
+  .boost-sd__filter-tree-toggle-button{
+    height:32px !important;min-height:32px !important;
+    margin:0 8px 0 0 !important;padding:0 12px !important;
+  }
+  /* 3 — product count: from loud/bold to a quiet muted label */
+  .boost-sd__product-count,
+  .boost-sd__toolbar-item--product-count,
+  .boost-sd__page-total-text{
+    font-size:12px !important;font-weight:500 !important;color:#8a8a8a !important;
+    text-transform:none !important;letter-spacing:.02em !important;
+    margin:0 4px 0 0 !important;
+  }
+  /* 4 — slimmer density track + smaller labels so it fits the 32px pill */
+  .dw-grid-slider input[type=range]{width:84px !important;height:3px !important}
+  .dw-grid-slider label{font-size:10px !important}
+  .dw-grid-slider .gc-num{font-size:12px !important}
+}
+</style>

← 61339a0d PDP + collection UX: full-width color coordinates (2-row+sho  ·  back to Designer Wallcoverings  ·  auto-save: 2026-07-28T13:00:43 (13 files) — DW-Programming/I 287156fc →