← 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
M DW-Programming/150dpi/index.htmlM DW-Programming/150dpi/package-lock.jsonM DW-Programming/150dpi/package.jsonM DW-Programming/KravetDesignTagger/server.jsM DW-Programming/TOOLS-DEBUG-LEDGER.mdM DW-Programming/ThibautTagger/server.jsM shopify/scripts/data/tk135/fullrun-vision.tsvA shopify/theme-LIVE-pull-20260728-colorbar/snippets/dw-boost-overrides.liquid
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,'"') +'">' : '') +
+ '</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 →