[object Object]

← back to Dw Vendor Microsites

build arteriors (Arteriors) -> BUILT, port 10087, 23 skus, img 0.348

6519b731811ddcc96d6d97082ed5d1b84da562a5 · 2026-06-30 15:04:55 -0700 · Steve

Files touched

Diff

commit 6519b731811ddcc96d6d97082ed5d1b84da562a5
Author: Steve <steve@designerwallcoverings.com>
Date:   Tue Jun 30 15:04:55 2026 -0700

    build arteriors (Arteriors) -> BUILT, port 10087, 23 skus, img 0.348
---
 manifest.json                                    |  10 +-
 staging/arteriors.jsonl                          |  23 ++
 staging/zinc_textile.jsonl                       | 100 ++++++
 vendors/arteriors/viewer/fieldmap.json           |   6 +
 vendors/arteriors/viewer/public/buybutton.js     |  70 ++++
 vendors/arteriors/viewer/public/index.html       | 414 ++++++++++++++++++++++
 vendors/arteriors/viewer/server.js               | 417 +++++++++++++++++++++++
 vendors/york_contract/viewer/fieldmap.json       |   6 +
 vendors/york_contract/viewer/public/buybutton.js |  70 ++++
 vendors/york_contract/viewer/public/index.html   | 414 ++++++++++++++++++++++
 vendors/york_contract/viewer/server.js           | 417 +++++++++++++++++++++++
 11 files changed, 1944 insertions(+), 3 deletions(-)

diff --git a/manifest.json b/manifest.json
index 6218e87..5a72c02 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2039,9 +2039,13 @@
       "table_count": 23,
       "samples_only": true,
       "status": "OK",
-      "build_status": "PENDING",
+      "build_status": "BUILT_NEEDS_RESCRAPE",
       "deploy_status": "PENDING",
-      "wave": 19
+      "wave": 19,
+      "port": 10087,
+      "sku_count": 23,
+      "image_health": 0.348,
+      "image_status": "NEEDS_RESCRAPE"
     },
     "as_creation": {
       "vendor_code": "as_creation",
@@ -2221,7 +2225,7 @@
       "wave": 16
     }
   },
-  "updated_at": "2026-06-30T15:04:50.001043",
+  "updated_at": "2026-06-30T15:04:55.699278",
   "stats": {
     "total_vendors": 118,
     "buildable": 117,
diff --git a/staging/arteriors.jsonl b/staging/arteriors.jsonl
new file mode 100644
index 0000000..88aaa54
--- /dev/null
+++ b/staging/arteriors.jsonl
@@ -0,0 +1,23 @@
+{"id": 32, "mfr_sku": "new", "dw_sku": "DWAR-340010", "pattern_name": "All", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.336959+00:00", "created_at": "2026-02-25T00:01:54.894433+00:00", "updated_at": "2026-03-14T08:58:50.336959+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 53, "mfr_sku": "decorative-boxes", "dw_sku": "DWAR-340003", "pattern_name": "DECORATIVE BOXES AND CONTAINERS", "color_name": null, "collection": "Accessories", "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.393058+00:00", "created_at": "2026-02-25T00:01:54.908391+00:00", "updated_at": "2026-03-14T08:58:50.393058+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 43, "mfr_sku": "gallery", "dw_sku": "DWAR-340006", "pattern_name": "Project Gallery", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.363903+00:00", "created_at": "2026-02-25T00:01:54.90396+00:00", "updated_at": "2026-03-14T08:58:50.363903+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 46, "mfr_sku": "mirrors", "dw_sku": "DWAR-340008", "pattern_name": "Mirrors", "color_name": "Beige", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/wysiwyg/explore-more-bar-F25/Wall/Mirrors.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.365695+00:00", "created_at": "2026-02-25T00:01:54.905576+00:00", "updated_at": "2026-04-01T21:44:38.068598+00:00", "color_hex": "#F5F5DC", "ai_colors": ["Beige", "Black", "Gray", "Silver", "Charcoal"], "ai_styles": ["Contemporary", "Modern"], "ai_patterns": ["Abstract"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Black", "Gray", "Silver", "Charcoal", "Contemporary", "Modern", "Abstract", "Unique", "Circles", "Metallic", "Textured", "Dimensional", "Commercial", "Residential", "Statement", "Feature Wall", "Wallcovering", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This wallcovering features a dimensional design with overlapping circular elements. The metallic finish adds a touch of modern sophistication, making it a statement piece for any space.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 44, "mfr_sku": "outlet", "dw_sku": "DWAR-340018", "pattern_name": "All", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.364464+00:00", "created_at": "2026-02-25T00:01:54.904407+00:00", "updated_at": "2026-03-14T08:58:50.364464+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 42, "mfr_sku": "living-room", "dw_sku": "DWAR-340007", "pattern_name": "Living Room", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.3634+00:00", "created_at": "2026-02-25T00:01:54.903436+00:00", "updated_at": "2026-03-14T08:58:50.3634+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 60, "mfr_sku": "decorative-boxes-containers", "dw_sku": "DWAR-340004", "pattern_name": "Decorative boxes and Containers", "color_name": null, "collection": "Accessories", "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.398907+00:00", "created_at": "2026-02-25T00:01:54.911169+00:00", "updated_at": "2026-03-14T08:58:50.398907+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 33, "mfr_sku": "new-lighting", "dw_sku": "DWAR-340013", "pattern_name": "New Lighting", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.347735+00:00", "created_at": "2026-02-25T00:01:54.897918+00:00", "updated_at": "2026-03-14T08:58:50.347735+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 39, "mfr_sku": "new-accessories", "dw_sku": "DWAR-340011", "pattern_name": "New Accessories", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.361146+00:00", "created_at": "2026-02-25T00:01:54.901846+00:00", "updated_at": "2026-03-14T08:58:50.361146+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 34, "mfr_sku": "sconces", "dw_sku": "DWAR-340019", "pattern_name": "Wall Sconces", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.355107+00:00", "created_at": "2026-02-25T00:01:54.898828+00:00", "updated_at": "2026-03-14T08:58:50.355107+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 36, "mfr_sku": "new-furniture", "dw_sku": "DWAR-340012", "pattern_name": "New Furniture", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.357741+00:00", "created_at": "2026-02-25T00:01:54.900166+00:00", "updated_at": "2026-03-14T08:58:50.357741+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 41, "mfr_sku": "new-outdoor", "dw_sku": "DWAR-340014", "pattern_name": "New Outdoor", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.362882+00:00", "created_at": "2026-02-25T00:01:54.902921+00:00", "updated_at": "2026-03-14T08:58:50.362882+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 40, "mfr_sku": "new-wall-decor", "dw_sku": "DWAR-340015", "pattern_name": "New Wall", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.36202+00:00", "created_at": "2026-02-25T00:01:54.902322+00:00", "updated_at": "2026-03-14T08:58:50.36202+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 37, "mfr_sku": "seating", "dw_sku": "DWAR-340020", "pattern_name": "Seating", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.358646+00:00", "created_at": "2026-02-25T00:01:54.900711+00:00", "updated_at": "2026-03-14T08:58:50.358646+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 38, "mfr_sku": "storage-shelving", "dw_sku": "DWAR-340021", "pattern_name": "Storage & Shelving", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.360245+00:00", "created_at": "2026-02-25T00:01:54.901364+00:00", "updated_at": "2026-03-14T08:58:50.360245+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 35, "mfr_sku": "table-lamps", "dw_sku": "DWAR-340022", "pattern_name": "Table Lamps", "color_name": null, "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": null, "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.356532+00:00", "created_at": "2026-02-25T00:01:54.899613+00:00", "updated_at": "2026-03-14T08:58:50.356532+00:00", "color_hex": null, "ai_colors": null, "ai_styles": null, "ai_patterns": null, "ai_background_color": null, "ai_tags": null, "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 47, "mfr_sku": "full-length-mirrors", "dw_sku": "DWAR-340005", "pattern_name": "Full Length", "color_name": "Off-White", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/wysiwyg/explore-more-bar-F25/Wall/Floor.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.366711+00:00", "created_at": "2026-02-25T00:01:54.905993+00:00", "updated_at": "2026-04-01T21:44:41.361548+00:00", "color_hex": "#F5F5DC", "ai_colors": ["Off-White", "White", "Light Gray", "Beige"], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Striped"], "ai_background_color": "Off-White", "ai_tags": ["Off-white", "White", "Light Gray", "Beige", "Contemporary", "Minimalist", "Textured", "Striped", "Vertical Stripes", "Neutral", "Modern", "Clean", "Commercial", "Residential", "Durable", "Subtle", "Wallcovering", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This textured vinyl wallcovering features subtle vertical stripes, adding depth and visual interest to any space. Its neutral color palette and durable construction make it ideal for high-traffic commercial or residential environments.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 52, "mfr_sku": "mirrors#", "dw_sku": "DWAR-340009", "pattern_name": "in stock\n                                          \n                                          (126)", "color_name": "Off White", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/catalog/product/cache/e8933345a7ea47dc2fe5d65314252bf5/w/m/wmi97.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.38398+00:00", "created_at": "2026-02-25T00:01:54.907954+00:00", "updated_at": "2026-04-01T21:45:18.605991+00:00", "color_hex": "#F2F2F2", "ai_colors": ["Off White", "Light Gray"], "ai_styles": ["Minimalist", "Contemporary"], "ai_patterns": ["Abstract", "Geometric"], "ai_background_color": "Off White", "ai_tags": ["Off White", "Light Gray", "Minimalist", "Contemporary", "Abstract", "Geometric", "Neutral", "Light", "Clean", "Modern", "Wallcovering", "Commercial", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This wallcovering features a minimalist abstract geometric pattern in light gray on an off-white background. Its clean and modern design makes it suitable for a variety of commercial and residential spaces.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 49, "mfr_sku": "on-sale", "dw_sku": "DWAR-340017", "pattern_name": "Outlet", "color_name": "Dark Brown", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/wysiwyg/explore-more-bar-F25/Wall/Outlet.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.370923+00:00", "created_at": "2026-02-25T00:01:54.906745+00:00", "updated_at": "2026-04-01T21:44:47.868847+00:00", "color_hex": "#4A3A29", "ai_colors": ["Dark Brown", "Beige", "Tan", "Light Brown"], "ai_styles": ["Abstract"], "ai_patterns": ["Abstract"], "ai_background_color": "Dark Brown", "ai_tags": ["Dark Brown", "Beige", "Tan", "Light Brown", "Abstract", "Blurred", "Warm", "Neutral", "Subtle", "Background", "Organic", "Contemporary", "Commercial", "Wallcovering", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This abstract wallcovering features a blurred, warm-toned design. Its neutral color palette and subtle texture make it suitable for a variety of commercial spaces.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 48, "mfr_sku": "vanity-mirrors", "dw_sku": "DWAR-340023", "pattern_name": "Vanity", "color_name": "Beige", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/wysiwyg/explore-more-bar-F25/Wall/Vanity.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.369111+00:00", "created_at": "2026-02-25T00:01:54.906371+00:00", "updated_at": "2026-04-01T21:44:44.529314+00:00", "color_hex": "#F5F5DC", "ai_colors": ["Beige", "White", "Black", "Gray"], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "White", "Black", "Gray", "Contemporary", "Minimalist", "Textured", "Neutral", "Modern", "Commercial", "Residential", "Light", "Clean", "Subtle", "Hotel", "Wallcovering", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This neutral beige wallcovering offers a subtle textured backdrop suitable for a variety of interior spaces. Its minimalist design provides a clean and modern aesthetic, ideal for commercial or residential applications.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 45, "mfr_sku": "decorative", "dw_sku": "DWAR-340001", "pattern_name": "Decorative Floor Lamps", "color_name": "Beige", "collection": "Floor Lamps", "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/wysiwyg/explore-more-bar-F25/Wall/Decorative.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.398208+00:00", "created_at": "2026-02-25T00:01:54.904874+00:00", "updated_at": "2026-04-01T21:44:35.195236+00:00", "color_hex": "#F5F5DC", "ai_colors": ["Beige", "Gold", "Brown", "Black", "White", "Cream"], "ai_styles": ["Art Deco", "Glam"], "ai_patterns": ["Geometric"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Gold", "Brown", "Black", "White", "Cream", "Art Deco", "Glam", "Geometric", "Metallic", "Glamorous", "Statement", "Luxury", "Hotel", "Commercial", "Dimensional", "Textured", "Wallcovering", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This striking geometric wallcovering features a radiating sunburst design with alternating metallic gold and dark brown accents. Its dimensional texture and glamorous aesthetic make it a perfect statement piece for luxury hotels or commercial spaces.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 50, "mfr_sku": "decorative#", "dw_sku": "DWAR-340002", "pattern_name": "in stock\n                                          \n                                          (8)", "color_name": "Off White", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/catalog/product/cache/e8933345a7ea47dc2fe5d65314252bf5/3/0/3052_1.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.375285+00:00", "created_at": "2026-02-25T00:01:54.907178+00:00", "updated_at": "2026-04-01T21:44:51.40946+00:00", "color_hex": "#F2F2F2", "ai_colors": ["Off White", "Light Gray"], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Abstract", "Geometric"], "ai_background_color": "Off White", "ai_tags": ["Off White", "Light Gray", "Contemporary", "Minimalist", "Abstract", "Geometric", "Neutral", "Modern", "Light", "Airy", "Commercial", "Residential", "Subtle", "Elegant", "Wallcovering", "Architectural"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This wallcovering features a subtle geometric pattern in light gray on an off-white background. Its minimalist design and neutral color palette make it suitable for a variety of commercial and residential spaces.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
+{"id": 51, "mfr_sku": "new-wall-decor#", "dw_sku": "DWAR-340016", "pattern_name": "in stock\n                                          \n                                          (16)", "color_name": "Off White", "collection": null, "product_type": "Wallcovering", "width": null, "length": null, "repeat_v": null, "repeat_h": null, "material": null, "price_retail": null, "price_trade": null, "image_url": "https://www.arteriorshome.com/media/catalog/product/cache/e8933345a7ea47dc2fe5d65314252bf5/w/m/wmi99.jpg", "in_stock": true, "discontinued": false, "shopify_product_id": null, "last_scraped": "2026-03-14T08:58:50.382085+00:00", "created_at": "2026-02-25T00:01:54.907573+00:00", "updated_at": "2026-04-01T21:44:55.074622+00:00", "color_hex": "#F5F5F5", "ai_colors": ["Off White", "Light Gray"], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Geometric", "Abstract"], "ai_background_color": "Off White", "ai_tags": ["Off White", "Light Gray", "Contemporary", "Minimalist", "Geometric", "Abstract", "Neutral", "Light", "Modern", "Subtle", "Commercial", "Residential", "Architectural", "Wallcovering"], "width_inches": null, "on_shopify": false, "repeat_classification": null, "ai_description": "This wallcovering features a subtle geometric pattern in light gray against an off-white background. Its minimalist design makes it suitable for a variety of commercial and residential spaces.", "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "line": null}
diff --git a/staging/zinc_textile.jsonl b/staging/zinc_textile.jsonl
new file mode 100644
index 0000000..e2ffb4b
--- /dev/null
+++ b/staging/zinc_textile.jsonl
@@ -0,0 +1,100 @@
+{"id": 84, "mfr_sku": "ZW141/07", "pattern_name": "Sueded", "color_name": "Cypress", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-07-sueded-cypress_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-07-sueded-cypress_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-59", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:27.600436", "updated_at": "2026-03-18T17:51:59.106834", "color_hex": "#808040", "ai_colors": [{"hex": "#808040", "name": "Olive", "percentage": 90}, {"hex": "#666633", "name": "Dark Olive", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Olive", "ai_tags": ["Olive", "Green", "Dark Olive", "Traditional", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in a muted olive tone. Its classic and understated style lends a sense of calm and sophistication to any space. Ideal for creating a serene atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#808040", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 100, "mfr_sku": "ZW135/03", "pattern_name": "Zorelli", "color_name": "Umber", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-03-zorelli-wallcovering-umber_03.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-03-zorelli-wallcovering-umber_03.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-03-zorelli-wallcovering-umber_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-03-zorelli-wallcovering-umber_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-45", "shopify_product_id": "7799397285939", "crawled_at": "2026-03-16T21:23:50.860602", "updated_at": "2026-03-18T17:53:14.120434", "color_hex": "#A39384", "ai_colors": [{"hex": "#A39384", "name": "Taupe", "percentage": 45}, {"hex": "#C2B5A6", "name": "Beige", "percentage": 30}, {"hex": "#827467", "name": "Dark Taupe", "percentage": 15}, {"hex": "#D1C5B7", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Beige", "Dark Taupe", "Light Beige", "Traditional", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Stripe", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": true, "repeat_v": "V: 150.0 cms (59.1 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. The neutral taupe color palette evokes a sense of understated elegance and sophistication. Ideal for creating a calming and refined atmosphere in residential spaces.", "dominant_color_hex": "#A39384", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 54, "mfr_sku": "ZW146/02", "pattern_name": "Magnetite", "color_name": "Cognac", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW146-02-magentite-wallcovering-cognac_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW146-02-magentite-wallcovering-cognac_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-92", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:43.353932", "updated_at": "2026-03-18T17:49:38.224696", "color_hex": "#4E3A29", "ai_colors": [{"hex": "#4E3A29", "name": "Dark Brown", "percentage": 45}, {"hex": "#D0B384", "name": "Beige", "percentage": 30}, {"hex": "#A07E54", "name": "Tan", "percentage": 15}, {"hex": "#E5C99C", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Traditional", "Textured"], "ai_patterns": ["Stripe", "Textured"], "ai_background_color": "Dark Brown", "ai_tags": ["Dark Brown", "Beige", "Tan", "Light Beige", "Traditional", "Textured", "Stripe", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a horizontal stripe pattern with a textured effect, creating a natural and organic look. The warm, earthy tones evoke a sense of comfort and sophistication. Ideal for adding depth and visual interest to living rooms, bedrooms, or accent walls.", "dominant_color_hex": "#4E3A29", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 22, "mfr_sku": "ZW121/01", "pattern_name": "Cortina", "color_name": "Moonbeam", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "26.5 cms (10.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW121-01-cortina-wallcovering-moonbeam_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW121-01-cortina-wallcovering-moonbeam_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-7", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:48.951671", "updated_at": "2026-03-18T17:47:08.229609", "color_hex": "#F2F0EA", "ai_colors": [{"hex": "#F2F0EA", "name": "Off-white", "percentage": 65}, {"hex": "#D0CECA", "name": "Light Gray", "percentage": 35}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Geometric"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Light Gray", "Contemporary", "Minimalist", "Geometric", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "26.5 cms (10.4 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "26.5 cms (10.4 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a subtle geometric pattern of varying sized circles. The neutral color palette and minimalist design create a calming and sophisticated atmosphere. Ideal for adding a touch of texture and visual interest to any interior space.", "dominant_color_hex": "#F2F0EA", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 53, "mfr_sku": "ZW142/01", "pattern_name": "Lacquer", "color_name": "Vellum", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-01-lacquer-wallcovering-vellum_00.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-01-lacquer-wallcovering-vellum_00.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-01-lacquer-wallcovering-vellum_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-61", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:42.005296", "updated_at": "2026-03-18T17:49:33.500684", "color_hex": "#F5F3E8", "ai_colors": [{"hex": "#F5F3E8", "name": "Off-white", "percentage": 60}, {"hex": "#E5E0D1", "name": "Light Beige", "percentage": 30}, {"hex": "#D5D0C2", "name": "Pale Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Light Beige", "Pale Gray", "Contemporary", "Minimalist", "Textured", "Solid", "Non-woven", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral color palette and minimalist style create a calming and sophisticated atmosphere. Recommended for use in residential or commercial spaces seeking a clean and modern aesthetic.", "dominant_color_hex": "#F5F3E8", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 50, "mfr_sku": "ZW142/02", "pattern_name": "Lacquer", "color_name": "Silver Grey", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-02-lacquer-wallcovering-silver-grey_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-02-lacquer-wallcovering-silver-grey_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-02-lacquer-wallcovering-silver-grey_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-62", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:37.542109", "updated_at": "2026-03-18T17:49:19.370936", "color_hex": "#E0DED5", "ai_colors": [{"hex": "#E0DED5", "name": "Light Gray", "percentage": 45}, {"hex": "#C9C6BE", "name": "Pale Gray", "percentage": 30}, {"hex": "#B2B0A8", "name": "Gray", "percentage": 15}, {"hex": "#9D9B93", "name": "Taupe", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Pale Gray", "Gray", "Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Solid", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. The neutral color palette and minimalist style create a calming and sophisticated atmosphere. Recommended for use in residential or commercial spaces seeking a clean and modern aesthetic.", "dominant_color_hex": "#E0DED5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 99, "mfr_sku": "ZW135/04", "pattern_name": "Zorelli", "color_name": "Sunset", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-04-zorelli-wallcovering-sunset_03.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-04-zorelli-wallcovering-sunset_03.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-04-zorelli-wallcovering-sunset_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-04-zorelli-wallcovering-sunset_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-46", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:49.397393", "updated_at": "2026-03-18T17:53:09.465808", "color_hex": "#E5D8C5", "ai_colors": [{"hex": "#E5D8C5", "name": "Beige", "percentage": 45}, {"hex": "#B36B54", "name": "Terra Cotta", "percentage": 30}, {"hex": "#C69B7D", "name": "Tan", "percentage": 15}, {"hex": "#A65241", "name": "Burnt Sienna", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Stripe", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Terra Cotta", "Tan", "Burnt Sienna", "Orange", "Brown", "Traditional", "Coastal", "Stripe", "Textured", "Silk"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Stripe", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 150.0 cms (59.1 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe pattern with a textured effect. The warm, earthy tones create a calming and inviting atmosphere. Ideal for bedrooms, living rooms, or any space where a touch of understated elegance is desired.", "dominant_color_hex": "#E5D8C5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 98, "mfr_sku": "ZW135/06", "pattern_name": "Zorelli", "color_name": "Aviator", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-06-zorelli-wallcovering-aviator_03.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-06-zorelli-wallcovering-aviator_03.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-06-zorelli-wallcovering-aviator_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW135-06-zorelli-wallcovering-aviator_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-47", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:47.946108", "updated_at": "2026-03-18T17:53:04.828217", "color_hex": "#D3D5D8", "ai_colors": [{"hex": "#D3D5D8", "name": "Light Gray", "percentage": 45}, {"hex": "#B2B4B7", "name": "Gray", "percentage": 30}, {"hex": "#919396", "name": "Silver", "percentage": 15}, {"hex": "#707275", "name": "Charcoal Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Gray", "Silver", "Charcoal Gray", "Contemporary", "Minimalist", "Textured", "Stripe", "Silk", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Stripe", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 150.0 cms (59.1 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe pattern with a textured effect. The neutral color palette and minimalist design create a calming and sophisticated atmosphere. Ideal for bedrooms, living rooms, or any space where a touch of understated elegance is desired.", "dominant_color_hex": "#D3D5D8", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 96, "mfr_sku": "ZW118/03", "pattern_name": "Villars", "color_name": "Tungsten", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "9.0 cms (3.5 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW118-03-villars-wallcovering-tungsten_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW118-03-villars-wallcovering-tungsten_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-4", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:45.026316", "updated_at": "2026-03-18T17:52:55.524301", "color_hex": "#C0C0C0", "ai_colors": [{"hex": "#C0C0C0", "name": "Silver", "percentage": 45}, {"hex": "#483C32", "name": "Taupe", "percentage": 30}, {"hex": "#808080", "name": "Gray", "percentage": 15}, {"hex": "#A9A9A9", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Industrial", "Contemporary"], "ai_patterns": ["Textured", "Abstract"], "ai_background_color": "Silver", "ai_tags": ["Silver", "Gray", "Taupe", "Brown", "Dark Gray", "Industrial", "Contemporary", "Textured", "Abstract", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": "9.0 cms (3.5 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "10\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "9.0 cms (3.5 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a distressed, textured pattern with a grid-like effect. The design evokes a modern, industrial aesthetic with a touch of urban decay. Recommended for creating a unique and stylish atmosphere in residential or commercial spaces.", "dominant_color_hex": "#C0C0C0", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 93, "mfr_sku": "ZW127/01", "pattern_name": "Trona", "color_name": "Moonbeam", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-01-trona-wallcovering-moonbeam_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-01-trona-wallcovering-moonbeam_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-17", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:40.716721", "updated_at": "2026-03-18T17:52:41.414932", "color_hex": "#F2F0E6", "ai_colors": [{"hex": "#F2F0E6", "name": "Beige", "percentage": 55}, {"hex": "#E3E0D4", "name": "Light Beige", "percentage": 30}, {"hex": "#CFCBC0", "name": "Pale Gray", "percentage": 10}, {"hex": "#BDBAB0", "name": "Light Gray", "percentage": 5}], "ai_styles": ["Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Gray", "Light Gray", "Minimalist", "Textured", "Solid", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in a neutral beige tone. Its minimalist style creates a calming and sophisticated atmosphere. Recommended for use in residential or commercial spaces seeking a clean and understated aesthetic.", "dominant_color_hex": "#F2F0E6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 10, "mfr_sku": "ZW134/11", "pattern_name": "Cazenove", "color_name": "Cerulean", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-11-cazenove-wallcovering-cerulean_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-11-cazenove-wallcovering-cerulean_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-11-cazenove-wallcovering-cerulean_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-43", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:31.591849", "updated_at": "2026-03-18T17:46:11.852901", "color_hex": "#387B7F", "ai_colors": [{"hex": "#387B7F", "name": "Teal", "percentage": 45}, {"hex": "#326B6E", "name": "Dark Teal", "percentage": 30}, {"hex": "#428A8E", "name": "Grayish Teal", "percentage": 15}, {"hex": "#3D3D3D", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Teal", "ai_tags": ["Teal", "Blue", "Dark Teal", "Grayish Teal", "Dark Gray", "Contemporary", "Minimalist", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its minimalist style and calming teal hue evoke a sense of tranquility. Ideal for creating a serene and sophisticated atmosphere in residential spaces.", "dominant_color_hex": "#387B7F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 97, "mfr_sku": "ZW120/03", "pattern_name": "Zermatt", "color_name": "Tungsten", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "53.5 cms (21.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW120-03-zermatt-wallcovering-tungsten_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW120-03-zermatt-wallcovering-tungsten_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-6", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:46.491271", "updated_at": "2026-03-18T17:53:00.184974", "color_hex": "#C0C0C0", "ai_colors": [{"hex": "#C0C0C0", "name": "Silver", "percentage": 45}, {"hex": "#808080", "name": "Gray", "percentage": 30}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 15}, {"hex": "#A9A9A9", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Industrial"], "ai_patterns": ["Textured", "Geometric"], "ai_background_color": "Silver", "ai_tags": ["Silver", "Gray", "Light Gray", "Dark Gray", "Contemporary", "Industrial", "Textured", "Geometric", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": "53.5 cms (21.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "53.5 cms (21.1 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a textured geometric pattern resembling a woven brick or basketweave design. The metallic silver and gray tones create a modern and industrial aesthetic. Ideal for adding depth and visual interest to contemporary living spaces or commercial interiors.", "dominant_color_hex": "#C0C0C0", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 89, "mfr_sku": "ZW141/01", "pattern_name": "Sueded", "color_name": "Spacedust", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-01-sueded-spacedust_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-01-sueded-spacedust_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-53", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:34.953831", "updated_at": "2026-03-18T17:52:22.56056", "color_hex": "#F2E5D4", "ai_colors": [{"hex": "#F2E5D4", "name": "Beige", "percentage": 70}, {"hex": "#E8D9C6", "name": "Light Beige", "percentage": 30}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Traditional", "Solid", "Textured", "Paper"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in a warm beige tone. Its traditional style evokes a sense of understated elegance. Recommended for creating a cozy and inviting atmosphere in residential spaces.", "dominant_color_hex": "#F2E5D4", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 8, "mfr_sku": "ZW143/01", "pattern_name": "Caract\u00e8re", "color_name": "Spun Gold", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-01-caractre-wallcovering-spun-gold_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-01-caractre-wallcovering-spun-gold_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-73", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:28.622556", "updated_at": "2026-03-18T17:46:02.529776", "color_hex": "#E3D5B5", "ai_colors": [{"hex": "#E3D5B5", "name": "Beige", "percentage": 45}, {"hex": "#C4B38D", "name": "Tan", "percentage": 30}, {"hex": "#A89670", "name": "Light Brown", "percentage": 15}, {"hex": "#F0E7C7", "name": "Pale Yellow", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Light Brown", "Pale Yellow", "Traditional", "Textured", "Paper", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "96.2 cms (37.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Moire", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured design with horizontal lines and a delicate pattern of small perforations. Its neutral beige and tan tones evoke a sense of warmth and understated elegance. Ideal for creating a serene and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#E3D5B5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 52, "mfr_sku": "ZW142/06", "pattern_name": "Lacquer", "color_name": "Tobacco", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-06-lacquer-wallcovering-tobacco_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-06-lacquer-wallcovering-tobacco_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-06-lacquer-wallcovering-tobacco_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-66", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:40.532314", "updated_at": "2026-03-18T17:49:28.739745", "color_hex": "#D2B48C", "ai_colors": [{"hex": "#D2B48C", "name": "Tan", "percentage": 55}, {"hex": "#C1A57F", "name": "Light Brown", "percentage": 30}, {"hex": "#E0CBA7", "name": "Beige", "percentage": 10}, {"hex": "#B39773", "name": "Sand", "percentage": 5}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Tan", "ai_tags": ["Tan", "Light Brown", "Beige", "Sand", "Traditional", "Solid", "Textured", "Paper"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its warm, neutral tones evoke a sense of understated elegance and timeless style. Ideal for creating a cozy and inviting atmosphere in residential spaces.", "dominant_color_hex": "#D2B48C", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 94, "mfr_sku": "ZW127/03", "pattern_name": "Trona", "color_name": "Patina", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-03-trona-wallcovering-patina_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-03-trona-wallcovering-patina_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-03-trona-wallcovering-patina_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-19", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:42.19671", "updated_at": "2026-03-18T17:52:46.112941", "color_hex": "#878582", "ai_colors": [{"hex": "#878582", "name": "Gray", "percentage": 45}, {"hex": "#72706E", "name": "Dark Gray", "percentage": 30}, {"hex": "#A3A19E", "name": "Light Gray", "percentage": 15}, {"hex": "#C2C0BE", "name": "Off-white", "percentage": 10}], "ai_styles": ["Industrial", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Gray", "ai_tags": ["Gray", "Dark Gray", "Light Gray", "Off-white", "Industrial", "Minimalist", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern with a concrete-like appearance. Its neutral gray tones evoke a sense of understated sophistication and industrial chic. Ideal for creating a modern and minimalist aesthetic in both residential and commercial spaces.", "dominant_color_hex": "#878582", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 51, "mfr_sku": "ZW142/04", "pattern_name": "Lacquer", "color_name": "Smoke", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-04-lacquer-wallcovering-smoke_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-04-lacquer-wallcovering-smoke_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-04-lacquer-wallcovering-smoke_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-64", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:39.031814", "updated_at": "2026-03-18T17:49:24.048262", "color_hex": "#8E8A87", "ai_colors": [{"hex": "#8E8A87", "name": "Gray", "percentage": 50}, {"hex": "#B2B0AE", "name": "Light Gray", "percentage": 30}, {"hex": "#6B6866", "name": "Dark Gray", "percentage": 10}, {"hex": "#A09D9A", "name": "Taupe", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Gray", "ai_tags": ["Gray", "Light Gray", "Dark Gray", "Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Stripe", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe pattern with a textured effect. The neutral gray tones create a calming and sophisticated ambiance. Ideal for adding depth and visual interest to any interior space.", "dominant_color_hex": "#8E8A87", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 9, "mfr_sku": "ZW143/02", "pattern_name": "Caract\u00e8re", "color_name": "Taupe", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-02-caractre-wallcovering-taupe_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-02-caractre-wallcovering-taupe_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-74", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:30.134077", "updated_at": "2026-03-18T17:46:07.187061", "color_hex": "#E5DCC4", "ai_colors": [{"hex": "#E5DCC4", "name": "Beige", "percentage": 45}, {"hex": "#C6B79F", "name": "Taupe", "percentage": 30}, {"hex": "#F2EFE5", "name": "Light Beige", "percentage": 15}, {"hex": "#A89B83", "name": "Light Brown", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Taupe", "Brown", "Light Beige", "Light Brown", "Traditional", "Textured", "Silk", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "96.2 cms (37.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Moire", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in neutral beige and taupe tones. The design evokes a sense of understated elegance and timeless appeal. Recommended for creating a sophisticated and calming atmosphere in residential spaces.", "dominant_color_hex": "#E5DCC4", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 49, "mfr_sku": "ZW142/12", "pattern_name": "Lacquer", "color_name": "Seafoam", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-12-lacquer-wallcovering-seafoam_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-12-lacquer-wallcovering-seafoam_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-12-lacquer-wallcovering-seafoam_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-72", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:36.055949", "updated_at": "2026-03-18T17:49:14.691209", "color_hex": "#B0C4DE", "ai_colors": [{"hex": "#B0C4DE", "name": "Light Blue", "percentage": 45}, {"hex": "#ADD8E6", "name": "Pale Blue", "percentage": 30}, {"hex": "#A9B7C1", "name": "Grayish Blue", "percentage": 15}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Blue", "ai_tags": ["Light Blue", "Pale Blue", "Grayish Blue", "Light Gray", "Contemporary", "Minimalist", "Textured", "Solid", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its minimalist style and calming color palette create a serene and modern atmosphere. Recommended for use in residential or commercial spaces seeking a clean and sophisticated aesthetic.", "dominant_color_hex": "#B0C4DE", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 92, "mfr_sku": "ZW132/03", "pattern_name": "Tantalum", "color_name": "Silver Grey", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW132-03-tantalum-wallcovering-silver-grey_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW132-03-tantalum-wallcovering-silver-grey_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-31", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:39.227109", "updated_at": "2026-03-18T17:52:36.695397", "color_hex": "#A9A9A9", "ai_colors": [{"hex": "#A9A9A9", "name": "Gray", "percentage": 45}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 30}, {"hex": "#808080", "name": "Dark Gray", "percentage": 15}, {"hex": "#C0C0C0", "name": "Silver", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Gray", "ai_tags": ["Gray", "Light Gray", "Dark Gray", "Silver", "Contemporary", "Minimalist", "Textured", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern reminiscent of woven grasscloth. Its neutral gray palette evokes a sense of calm and understated elegance. Ideal for creating a sophisticated and serene atmosphere in any interior space.", "dominant_color_hex": "#A9A9A9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 91, "mfr_sku": "ZW132/01", "pattern_name": "Tantalum", "color_name": "Moonbeam", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW132-01-tantalum-wallcovering-moonbeam_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW132-01-tantalum-wallcovering-moonbeam_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW132-01-tantalum-wallcovering-moonbeam_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW132-01-tantalum-wallcovering-moonbeam_03.jpg", "room_setting_images": [], "dw_sku": "DWZC-30", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:37.875525", "updated_at": "2026-03-18T17:52:32.004895", "color_hex": "#D3D3D3", "ai_colors": [{"hex": "#D3D3D3", "name": "Light Gray", "percentage": 55}, {"hex": "#F5F5DC", "name": "Off-white", "percentage": 45}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Off-white", "Contemporary", "Minimalist", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured geometric pattern. Its neutral color palette and minimalist style create a calming and sophisticated atmosphere. Recommended for use in residential or commercial spaces seeking a touch of understated elegance.", "dominant_color_hex": "#D3D3D3", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 7, "mfr_sku": "ZW143/03", "pattern_name": "Caract\u00e8re", "color_name": "Smoke", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-03-caractre-wallcovering-smoke_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-03-caractre-wallcovering-smoke_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-75", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:27.154627", "updated_at": "2026-03-18T17:45:57.841014", "color_hex": "#B2ADA4", "ai_colors": [{"hex": "#B2ADA4", "name": "Taupe", "percentage": 45}, {"hex": "#948F87", "name": "Gray", "percentage": 30}, {"hex": "#D1CEC7", "name": "Beige", "percentage": 15}, {"hex": "#C1BCB4", "name": "Light Gray", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Gray", "Beige", "Light Gray", "Traditional", "Textured", "Silk", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "96.2 cms (37.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Moire", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured pattern in varying shades of taupe and gray. Its classic design lends a touch of understated elegance to any space. Ideal for creating a sophisticated and calming atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#B2ADA4", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 79, "mfr_sku": "ZW148/03", "pattern_name": "Paulownia", "color_name": "Tobacco", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-03-paulownia-wallcovering-tobacco_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-03-paulownia-wallcovering-tobacco_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-99", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:20.216032", "updated_at": "2026-03-18T17:51:35.712792", "color_hex": "#E0C79F", "ai_colors": [{"hex": "#E0C79F", "name": "Beige", "percentage": 45}, {"hex": "#C4A67F", "name": "Tan", "percentage": 30}, {"hex": "#A88A63", "name": "Light Brown", "percentage": 15}, {"hex": "#8C6E47", "name": "Brown", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Light Brown", "Brown", "Traditional", "Solid", "Textured", "Paper", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured pattern that adds depth and visual interest to any room. The neutral color palette evokes a sense of warmth and sophistication, making it suitable for traditional interiors. Ideal for creating a cozy and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#E0C79F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 90, "mfr_sku": "ZW141/04", "pattern_name": "Sueded", "color_name": "Tobacco", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-04-sueded-tobacco_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-04-sueded-tobacco_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-56", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:36.402788", "updated_at": "2026-03-18T17:52:27.246087", "color_hex": "#D2A779", "ai_colors": [{"hex": "#D2A779", "name": "Light Brown", "percentage": 90}, {"hex": "#E0B78A", "name": "Tan", "percentage": 10}], "ai_styles": ["Traditional", "Farmhouse"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Light Brown", "ai_tags": ["Light Brown", "Tan", "Traditional", "Farmhouse", "Solid", "Textured", "Paper"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in a light brown hue. Its simple yet elegant style evokes a sense of warmth and comfort, making it suitable for traditional and farmhouse-inspired interiors. Ideal for creating a cozy and inviting atmosphere in living rooms, bedrooms, or dining areas.", "dominant_color_hex": "#D2A779", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 48, "mfr_sku": "ZW142/10", "pattern_name": "Lacquer", "color_name": "Racing", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-10-lacquer-wallcovering-racing_00.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-10-lacquer-wallcovering-racing_00.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-10-lacquer-wallcovering-racing_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-70", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:34.588867", "updated_at": "2026-03-18T17:49:10.011896", "color_hex": "#808000", "ai_colors": [{"hex": "#808000", "name": "Olive", "percentage": 45}, {"hex": "#556B2F", "name": "Dark Olive Green", "percentage": 30}, {"hex": "#F0E68C", "name": "Khaki", "percentage": 15}, {"hex": "#BDB76B", "name": "Dark Khaki", "percentage": 10}], "ai_styles": ["Traditional", "Contemporary"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Olive", "ai_tags": ["Olive", "Green", "Dark Olive Green", "Khaki", "Dark Khaki", "Traditional", "Contemporary", "Solid", "Textured", "Vinyl"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in varying shades of olive. The mood is both traditional and contemporary, offering a versatile aesthetic. Recommended for use in offices, hospitality settings, healthcare facilities, and residential spaces.", "dominant_color_hex": "#808000", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 75, "mfr_sku": "ZW144/05", "pattern_name": "Oolite Matt", "color_name": "Truffle", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-05-oolite-matt-wallcovering-truffle_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-05-oolite-matt-wallcovering-truffle_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-82", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:14.422774", "updated_at": "2026-03-18T17:51:16.834432", "color_hex": "#D2B9A3", "ai_colors": [{"hex": "#D2B9A3", "name": "Beige", "percentage": 65}, {"hex": "#8C7363", "name": "Taupe", "percentage": 35}], "ai_styles": ["Traditional", "Textured"], "ai_patterns": ["Textured", "Abstract"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Taupe", "Brown", "Traditional", "Textured", "Abstract", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured abstract pattern. Its neutral color palette and tactile surface create a warm and inviting atmosphere. Ideal for adding depth and interest to any interior space, from living rooms to offices.", "dominant_color_hex": "#D2B9A3", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 6, "mfr_sku": "ZW143/05", "pattern_name": "Caract\u00e8re", "color_name": "Cypress", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-05-caractre-wallcovering-cypress_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-05-caractre-wallcovering-cypress_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-77", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:25.653006", "updated_at": "2026-03-18T17:45:53.173509", "color_hex": "#BDBDA1", "ai_colors": [{"hex": "#BDBDA1", "name": "Sage Green", "percentage": 45}, {"hex": "#E0DDC3", "name": "Pale Beige", "percentage": 30}, {"hex": "#9C9A7F", "name": "Olive Green", "percentage": 15}, {"hex": "#D1CDB4", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured", "Abstract"], "ai_background_color": "Sage Green", "ai_tags": ["Sage Green", "Green", "Pale Beige", "Olive Green", "Light Beige", "Traditional", "Textured", "Abstract", "Silk", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "96.2 cms (37.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Moire", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle abstract pattern with a textured effect. The muted sage green and beige tones create a calming and sophisticated ambiance. Ideal for adding a touch of understated elegance to any residential space.", "dominant_color_hex": "#BDBDA1", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 95, "mfr_sku": "ZW127/02", "pattern_name": "Trona", "color_name": "Spacedust", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-02-trona-wallcovering-spacedust_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW127-02-trona-wallcovering-spacedust_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-18", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:43.683404", "updated_at": "2026-03-18T17:52:50.822583", "color_hex": "#D3D0C7", "ai_colors": [{"hex": "#D3D0C7", "name": "Light Gray", "percentage": 45}, {"hex": "#B2B0A8", "name": "Gray", "percentage": 30}, {"hex": "#E0DED5", "name": "Beige", "percentage": 15}, {"hex": "#F0EEE6", "name": "Off-white", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Gray", "Beige", "Off-white", "Contemporary", "Minimalist", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in varying shades of gray and beige. Its minimalist style creates a calming and sophisticated mood. Ideal for adding depth and visual interest to any interior space.", "dominant_color_hex": "#D3D0C7", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 88, "mfr_sku": "ZW141/05", "pattern_name": "Sueded", "color_name": "Smoke", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-05-sueded-smoke_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-05-sueded-smoke_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-57", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:33.495487", "updated_at": "2026-03-18T17:52:17.859208", "color_hex": "#B2ADA2", "ai_colors": [{"hex": "#B2ADA2", "name": "Taupe", "percentage": 70}, {"hex": "#C2BEB4", "name": "Light Taupe", "percentage": 30}], "ai_styles": ["Contemporary"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Light Taupe", "Contemporary", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in a versatile taupe hue. Its understated elegance lends a contemporary style to any space. Recommended for use in residential or commercial settings seeking a touch of subtle sophistication.", "dominant_color_hex": "#B2ADA2", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 74, "mfr_sku": "ZW144/04", "pattern_name": "Oolite Matt", "color_name": "Tobacco", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-04-oolite-matt-wallcovering-tobacco_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-04-oolite-matt-wallcovering-tobacco_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-81", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:12.932731", "updated_at": "2026-03-18T17:51:12.147459", "color_hex": "#D2B48C", "ai_colors": [{"hex": "#D2B48C", "name": "Tan", "percentage": 45}, {"hex": "#A0785A", "name": "Brown", "percentage": 30}, {"hex": "#6E4A34", "name": "Dark Brown", "percentage": 15}, {"hex": "#E4D6B8", "name": "Beige", "percentage": 10}], "ai_styles": ["Traditional", "Farmhouse"], "ai_patterns": ["Textured"], "ai_background_color": "Tan", "ai_tags": ["Tan", "Brown", "Dark Brown", "Beige", "Traditional", "Farmhouse", "Textured", "Cork"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a natural cork texture, adding warmth and depth to any space. Its rustic and traditional style evokes a sense of comfort and simplicity. Ideal for creating a cozy and inviting atmosphere in living rooms, bedrooms, or home offices.", "dominant_color_hex": "#D2B48C", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 69, "mfr_sku": "ZW144/03", "pattern_name": "Oolite Matt", "color_name": "Gazelle", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-03-oolite-matt-wallcovering-gazelle_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-03-oolite-matt-wallcovering-gazelle_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-80", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:05.465303", "updated_at": "2026-03-18T17:50:48.638983", "color_hex": "#E5D8C1", "ai_colors": [{"hex": "#E5D8C1", "name": "Beige", "percentage": 45}, {"hex": "#D1C1A6", "name": "Tan", "percentage": 30}, {"hex": "#A38F73", "name": "Taupe", "percentage": 15}, {"hex": "#735F46", "name": "Brown", "percentage": 10}], "ai_styles": ["Traditional", "Farmhouse"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Taupe", "Brown", "Traditional", "Farmhouse", "Textured", "Paper"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in neutral tones. Its warm, inviting style evokes a sense of rustic charm. Ideal for creating a cozy and comfortable atmosphere in residential spaces.", "dominant_color_hex": "#E5D8C1", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 47, "mfr_sku": "ZW142/09", "pattern_name": "Lacquer", "color_name": "Ochre", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-09-lacquer-wallcovering-ochre_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-09-lacquer-wallcovering-ochre_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-09-lacquer-wallcovering-ochre_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-69", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:33.108054", "updated_at": "2026-03-18T17:49:05.27187", "color_hex": "#E1A833", "ai_colors": [{"hex": "#E1A833", "name": "Golden Yellow", "percentage": 90}, {"hex": "#F2C95D", "name": "Light Golden Yellow", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Golden Yellow", "ai_tags": ["Golden Yellow", "Light Golden Yellow", "Traditional", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured golden yellow design. Its warm and inviting tone evokes a sense of classic elegance. Ideal for creating a cozy and sophisticated atmosphere in residential spaces.", "dominant_color_hex": "#E1A833", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 5, "mfr_sku": "ZW143/04", "pattern_name": "Caract\u00e8re", "color_name": "Cerulean", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-04-caractre-wallcovering-cerulean_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW143-04-caractre-wallcovering-cerulean_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-76", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:24.189223", "updated_at": "2026-03-18T17:45:48.446845", "color_hex": "#36878F", "ai_colors": [{"hex": "#36878F", "name": "Teal", "percentage": 45}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 30}, {"hex": "#808080", "name": "Gray", "percentage": 15}, {"hex": "#2E6A70", "name": "Dark Teal", "percentage": 10}], "ai_styles": ["Contemporary", "Abstract"], "ai_patterns": ["Abstract", "Textured"], "ai_background_color": "Light Gray", "ai_tags": ["Teal", "Blue", "Light Gray", "Gray", "Dark Teal", "Contemporary", "Abstract", "Textured", "Silk", "Animal", "Insects"], "horizontal_repeat": "95.0 cms (37.4 \")", "vertical_repeat": "96.2 cms (37.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Moire", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 96.2 cms (37.9 \"), H: 95.0 cms (37.4 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features an abstract, cloud-like pattern in shades of teal and gray. Its contemporary style and textured appearance create a calming and sophisticated mood. Recommended for use in residential or commercial spaces seeking a touch of modern elegance.", "dominant_color_hex": "#36878F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 87, "mfr_sku": "ZW141/02", "pattern_name": "Sueded", "color_name": "Silver Grey", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-02-sueded-silver-grey_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-02-sueded-silver-grey_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-54", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:32.033945", "updated_at": "2026-03-18T17:52:13.158871", "color_hex": "#E5DED3", "ai_colors": [{"hex": "#E5DED3", "name": "Beige", "percentage": 60}, {"hex": "#F0EFE8", "name": "Light Beige", "percentage": 40}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Contemporary", "Minimalist", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral color palette and minimalist style create a calming and sophisticated atmosphere. Recommended for use in any residential or commercial space seeking a clean and modern aesthetic.", "dominant_color_hex": "#E5DED3", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 4, "mfr_sku": "ZW147/01", "pattern_name": "Baryte", "color_name": "Silver Grey", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "45.5 cms (17.9 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW147-01-baryte-wallcovering-silver-grey_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW147-01-baryte-wallcovering-silver-grey_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-94", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:22.720578", "updated_at": "2026-03-18T17:45:43.762867", "color_hex": "#F2E6D9", "ai_colors": [{"hex": "#F2E6D9", "name": "Beige", "percentage": 45}, {"hex": "#E6D9C6", "name": "Light Beige", "percentage": 30}, {"hex": "#D9C6B3", "name": "Pale Gold", "percentage": 15}, {"hex": "#C6B3A0", "name": "Silver", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Chevron", "Herringbone"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Gold", "Yellow", "Silver", "Gray", "Contemporary", "Chevron", "Herringbone", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "45.5 cms (17.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "45.5 cms (17.9 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle chevron pattern with a textured, linear effect. The neutral beige tones create a sophisticated and calming atmosphere. Ideal for adding a touch of modern elegance to any interior space.", "dominant_color_hex": "#F2E6D9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 77, "mfr_sku": "ZW148/01", "pattern_name": "Paulownia", "color_name": "Moonbeam", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-01-paulownia-wallcovering-moonbeam_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-01-paulownia-wallcovering-moonbeam_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-97", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:17.249435", "updated_at": "2026-03-18T17:51:26.230608", "color_hex": "#F2E8D9", "ai_colors": [{"hex": "#F2E8D9", "name": "Light Beige", "percentage": 55}, {"hex": "#D8CDBB", "name": "Pale Taupe", "percentage": 30}, {"hex": "#B9A994", "name": "Light Brown", "percentage": 10}, {"hex": "#E3D9C9", "name": "Beige", "percentage": 5}], "ai_styles": ["Scandinavian", "Minimalist"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Light Beige", "ai_tags": ["Light Beige", "Pale Taupe", "Brown", "Light Brown", "Beige", "Scandinavian", "Minimalist", "Solid", "Textured", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle wood grain texture in a light, neutral color palette. The minimalist style and soft hues create a calming and versatile backdrop. Recommended for use in residential or commercial spaces seeking a clean and modern aesthetic.", "dominant_color_hex": "#F2E8D9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 46, "mfr_sku": "ZW142/05", "pattern_name": "Lacquer", "color_name": "Obsidian", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-05-lacquer-wallcovering-obsidian_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-05-lacquer-wallcovering-obsidian_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-05-lacquer-wallcovering-obsidian_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-65", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:31.645298", "updated_at": "2026-03-18T17:49:00.583072", "color_hex": "#363636", "ai_colors": [{"hex": "#363636", "name": "Charcoal Gray", "percentage": 45}, {"hex": "#4A4A4A", "name": "Dark Gray", "percentage": 30}, {"hex": "#606060", "name": "Slate Gray", "percentage": 15}, {"hex": "#777777", "name": "Medium Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Industrial"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Charcoal Gray", "ai_tags": ["Charcoal Gray", "Gray", "Dark Gray", "Slate Gray", "Medium Gray", "Contemporary", "Industrial", "Textured", "Stripe", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe texture in varying shades of gray. Its contemporary and industrial style lends a sophisticated and understated mood. Recommended for use in offices, hospitality settings, healthcare facilities, and residential spaces.", "dominant_color_hex": "#363636", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 43, "mfr_sku": "ZW142/08", "pattern_name": "Lacquer", "color_name": "Dragon", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-08-lacquer-wallcovering-dragon_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-08-lacquer-wallcovering-dragon_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-08-lacquer-wallcovering-dragon_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-68", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:27.235789", "updated_at": "2026-03-18T17:48:46.502994", "color_hex": "#E0603D", "ai_colors": [{"hex": "#E0603D", "name": "Burnt Sienna", "percentage": 55}, {"hex": "#A84029", "name": "Russet", "percentage": 30}, {"hex": "#C85033", "name": "Terra Cotta", "percentage": 15}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Burnt Sienna", "ai_tags": ["Burnt Sienna", "Orange", "Brown", "Russet", "Terra Cotta", "Traditional", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in warm, earthy tones. The rich, traditional style evokes a sense of comfort and sophistication. Ideal for creating a cozy and inviting atmosphere in residential or commercial spaces.", "dominant_color_hex": "#E0603D", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 3, "mfr_sku": "ZW147/03", "pattern_name": "Baryte", "color_name": "Mercury", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "45.5 cms (17.9 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW147-03-baryte-wallcovering-mercury_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW147-03-baryte-wallcovering-mercury_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z755-03-gloria-bluestone_05.jpg", "room_setting_images": [], "dw_sku": "DWZC-96", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:21.386315", "updated_at": "2026-03-18T17:45:39.059048", "color_hex": "#A0998F", "ai_colors": [{"hex": "#A0998F", "name": "Taupe", "percentage": 45}, {"hex": "#736E67", "name": "Gray", "percentage": 30}, {"hex": "#D1D0C9", "name": "Beige", "percentage": 15}, {"hex": "#514D47", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Chevron", "Textured"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Gray", "Beige", "Dark Gray", "Contemporary", "Chevron", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "45.5 cms (17.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "45.5 cms (17.9 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle chevron pattern with a textured effect. The neutral taupe and gray tones create a sophisticated and modern aesthetic. Ideal for adding depth and visual interest to any interior space.", "dominant_color_hex": "#A0998F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 45, "mfr_sku": "ZW142/03", "pattern_name": "Lacquer", "color_name": "Mink", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-03-lacquer-wallcovering-mink_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-03-lacquer-wallcovering-mink_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-03-lacquer-wallcovering-mink_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-63", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:30.180538", "updated_at": "2026-03-18T17:48:55.884053", "color_hex": "#F5F0E6", "ai_colors": [{"hex": "#F5F0E6", "name": "Beige", "percentage": 45}, {"hex": "#E5DDCB", "name": "Light Beige", "percentage": 30}, {"hex": "#D5CBB8", "name": "Sand", "percentage": 15}, {"hex": "#C5BFA7", "name": "Tan", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Sand", "Tan", "Contemporary", "Minimalist", "Textured", "Stripe", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe pattern with a textured effect. The neutral color palette and minimalist design create a calming and sophisticated atmosphere. Ideal for residential and commercial spaces seeking a touch of understated elegance.", "dominant_color_hex": "#F5F0E6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 2, "mfr_sku": "ZW147/02", "pattern_name": "Baryte", "color_name": "Linen", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "45.5 cms (17.9 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW147-02-baryte-wallcovering-linen_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW147-02-baryte-wallcovering-linen_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-95", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:20.086748", "updated_at": "2026-03-18T17:45:34.374726", "color_hex": "#F5E7D1", "ai_colors": [{"hex": "#F5E7D1", "name": "Beige", "percentage": 55}, {"hex": "#E5D7C1", "name": "Light Beige", "percentage": 30}, {"hex": "#D5C7B1", "name": "Pale Gold", "percentage": 10}, {"hex": "#FFFFFF", "name": "Ivory", "percentage": 5}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Chevron", "Herringbone"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Gold", "Yellow", "Ivory", "White", "Contemporary", "Minimalist", "Chevron", "Herringbone", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "45.5 cms (17.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "45.5 cms (17.9 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle chevron pattern with a textured effect. Its neutral color palette and clean lines evoke a sense of understated elegance and modern simplicity. Ideal for creating a calming and sophisticated atmosphere in residential or commercial spaces.", "dominant_color_hex": "#F5E7D1", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 37, "mfr_sku": "ZW126/04", "pattern_name": "Jurbanite", "color_name": "Linen", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-04-jurbanite-wallcovering-linen_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-04-jurbanite-wallcovering-linen_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-14", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:18.50028", "updated_at": "2026-03-18T17:48:18.259413", "color_hex": "#D3D0C9", "ai_colors": [{"hex": "#D3D0C9", "name": "Light Gray", "percentage": 45}, {"hex": "#C9C5BE", "name": "Pale Beige", "percentage": 30}, {"hex": "#BDBAB3", "name": "Light Taupe", "percentage": 15}, {"hex": "#AFAEA7", "name": "Grayish Brown", "percentage": 10}], "ai_styles": ["Traditional", "Contemporary"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Pale Beige", "Light Taupe", "Brown", "Grayish Brown", "Traditional", "Contemporary", "Textured", "Solid", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral color palette and refined texture evoke a sense of understated elegance. Recommended for creating a sophisticated and calming atmosphere in any interior space.", "dominant_color_hex": "#D3D0C9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 86, "mfr_sku": "ZW141/03", "pattern_name": "Sueded", "color_name": "Mink", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-03-sueded-mink_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-03-sueded-mink_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-55", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:30.533188", "updated_at": "2026-03-18T17:52:08.476905", "color_hex": "#F2E3D0", "ai_colors": [{"hex": "#F2E3D0", "name": "Beige", "percentage": 90}, {"hex": "#E9D9C6", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Traditional", "Solid", "Textured", "Paper"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in a warm beige hue. Its traditional style evokes a sense of understated elegance and comfort. Recommended for creating a serene and inviting atmosphere in residential spaces.", "dominant_color_hex": "#F2E3D0", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 85, "mfr_sku": "ZW141/06", "pattern_name": "Sueded", "color_name": "Electric Teal", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-06-sueded-electric-teal_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-06-sueded-electric-teal_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-58", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:29.054548", "updated_at": "2026-03-18T17:52:03.760164", "color_hex": "#008080", "ai_colors": [{"hex": "#008080", "name": "Teal", "percentage": 90}, {"hex": "#006464", "name": "Dark Teal", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Teal", "ai_tags": ["Teal", "Blue", "Dark Teal", "Contemporary", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid teal color with a subtle textured effect. Its contemporary style creates a calming and sophisticated mood. Recommended for use in residential or commercial spaces seeking a touch of elegance and depth.", "dominant_color_hex": "#008080", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 44, "mfr_sku": "ZW142/11", "pattern_name": "Lacquer", "color_name": "Electric Teal", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-11-lacquer-wallcovering-electric-teal_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-11-lacquer-wallcovering-electric-teal_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-11-lacquer-wallcovering-electric-teal_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-71", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:28.704059", "updated_at": "2026-03-18T17:48:51.166643", "color_hex": "#2F6B7A", "ai_colors": [{"hex": "#2F6B7A", "name": "Teal", "percentage": 45}, {"hex": "#255462", "name": "Dark Teal", "percentage": 30}, {"hex": "#3A8294", "name": "Medium Teal", "percentage": 15}, {"hex": "#468E9F", "name": "Grayish Teal", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Teal", "ai_tags": ["Teal", "Blue", "Dark Teal", "Medium Teal", "Grayish Teal", "Contemporary", "Minimalist", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in varying shades of teal. Its minimalist style evokes a sense of calm and sophistication. Recommended for use in residential or commercial spaces seeking a modern and understated aesthetic.", "dominant_color_hex": "#2F6B7A", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 1, "mfr_sku": "ZW123/02", "pattern_name": "Baqueira", "color_name": "Frost", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "53.5 cms (21.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW123-02-baqueira-wallcovering-frost_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW123-02-baqueira-wallcovering-frost_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-11", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:19.019679", "updated_at": "2026-03-18T17:45:29.691516", "color_hex": "#F5F5F5", "ai_colors": [{"hex": "#F5F5F5", "name": "Off-white", "percentage": 55}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 35}, {"hex": "#FFFFFF", "name": "White", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Abstract"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Light Gray", "White", "Contemporary", "Minimalist", "Textured", "Abstract", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "53.5 cms (21.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "53.5 cms (21.1 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a subtle, textured abstract pattern in a neutral palette. The minimalist style and soft color variations create a calming and sophisticated mood. Ideal for adding depth and visual interest to any residential or commercial space.", "dominant_color_hex": "#F5F5F5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 83, "mfr_sku": "ZW141/08", "pattern_name": "Sueded", "color_name": "Brunello", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "130 cms (51.2 \")", "material": "Textural Wallcovering", "roll_length": "10 Metres (10.9 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-08-sueded-brunello_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW141-08-sueded-brunello_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-60", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:26.112716", "updated_at": "2026-03-18T17:51:54.456493", "color_hex": "#E07A5F", "ai_colors": [{"hex": "#E07A5F", "name": "Burnt Sienna", "percentage": 60}, {"hex": "#A95A45", "name": "Sienna", "percentage": 25}, {"hex": "#734032", "name": "Umber", "percentage": 10}, {"hex": "#4A2A23", "name": "Mahogany", "percentage": 5}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Burnt Sienna", "ai_tags": ["Burnt Sienna", "Orange", "Brown", "Sienna", "Umber", "Mahogany", "Traditional", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 51.2, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in warm, earthy tones. Its traditional style evokes a sense of comfort and sophistication. Recommended for creating a cozy and inviting atmosphere in residential or commercial spaces.", "dominant_color_hex": "#E07A5F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 81, "mfr_sku": "ZW145/02", "pattern_name": "Pyrite", "color_name": "Night Sky", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Plain / Textured Weave (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "V: 5.0 cms (2.0 \"), H: 5.0 cms (2.0 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-02-pyrite-wallcovering-night-sky_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-02-pyrite-wallcovering-night-sky_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-89", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:23.166957", "updated_at": "2026-03-18T17:51:45.088048", "color_hex": "#D3D3D3", "ai_colors": [{"hex": "#D3D3D3", "name": "Light Gray", "percentage": 45}, {"hex": "#808080", "name": "Gray", "percentage": 30}, {"hex": "#C0C0C0", "name": "Silver", "percentage": 15}, {"hex": "#A9A9A9", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Geometric"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Gray", "Silver", "Dark Gray", "Contemporary", "Minimalist", "Textured", "Geometric", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "5.0 cms (2.0 \")", "vertical_repeat": "5.0 cms (2.0 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "V: 5.0 cms (2.0 \"), H: 5.0 cms (2.0 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a geometric pattern with a woven texture, creating a subtle yet visually interesting design. The neutral color palette lends a contemporary and minimalist style to any space. Recommended for use in residential or commercial settings seeking a sophisticated and understated aesthetic.", "dominant_color_hex": "#D3D3D3", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 42, "mfr_sku": "ZW142/07", "pattern_name": "Lacquer", "color_name": "Cognac", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "140 cms (55.1 \")", "material": "Gloss Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-07-lacquer-wallcovering-cognac_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-07-lacquer-wallcovering-cognac_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW142-07-lacquer-wallcovering-cognac_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-67", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:25.765138", "updated_at": "2026-03-18T17:48:41.79154", "color_hex": "#B35937", "ai_colors": [{"hex": "#B35937", "name": "Terracotta", "percentage": 50}, {"hex": "#73402E", "name": "Umber", "percentage": 30}, {"hex": "#995133", "name": "Sienna", "percentage": 15}, {"hex": "#402821", "name": "Dark Brown", "percentage": 5}], "ai_styles": ["Traditional"], "ai_patterns": ["Solid", "Textured"], "ai_background_color": "Terracotta", "ai_tags": ["Terracotta", "Orange", "Umber", "Sienna", "Brown", "Dark Brown", "Traditional", "Solid", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "140.0 cms (55.1 \")", "vertical_repeat": "190.0 cms (74.8 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 55.1, "on_shopify": false, "repeat_v": "V: 190.0 cms (74.8 \"), H: 140.0 cms (55.1 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a solid, textured design in warm terracotta and umber tones. Its traditional style evokes a sense of comfort and sophistication. Recommended for residential spaces seeking a touch of classic elegance.", "dominant_color_hex": "#B35937", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 73, "mfr_sku": "ZW144/01", "pattern_name": "Oolite Matt", "color_name": "Stone", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-01-oolite-matt-wallcovering-stone_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-01-oolite-matt-wallcovering-stone_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-78", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:11.446332", "updated_at": "2026-03-18T17:51:07.400335", "color_hex": "#F2F2F2", "ai_colors": [{"hex": "#F2F2F2", "name": "Off-white", "percentage": 65}, {"hex": "#D4C9B9", "name": "Light Brown", "percentage": 20}, {"hex": "#B8B0A5", "name": "Beige", "percentage": 10}, {"hex": "#9D968D", "name": "Taupe", "percentage": 5}], "ai_styles": ["Scandinavian", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Light Brown", "Beige", "Taupe", "Brown", "Scandinavian", "Minimalist", "Textured", "Non-woven", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in a neutral color palette. The minimalist style and soft hues create a calming and sophisticated atmosphere. Ideal for bedrooms, living rooms, or any space where a touch of understated elegance is desired.", "dominant_color_hex": "#F2F2F2", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 41, "mfr_sku": "ZW119/03", "pattern_name": "Klosters", "color_name": "Silver Grey", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "53.0 cms (20.9 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW119-03-klosters-wallcovering-silver-grey_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW119-03-klosters-wallcovering-silver-grey_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-5", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:24.306334", "updated_at": "2026-03-18T17:48:37.080562", "color_hex": "#F5F5F5", "ai_colors": [{"hex": "#F5F5F5", "name": "Off-white", "percentage": 55}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 30}, {"hex": "#C0C0C0", "name": "Silver", "percentage": 10}, {"hex": "#808080", "name": "Gray", "percentage": 5}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Geometric", "Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Light Gray", "Silver", "Gray", "Contemporary", "Minimalist", "Geometric", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "53.0 cms (20.9 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Paper (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "53.0 cms (20.9 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a subtle geometric pattern of interlocking triangles, creating a textured effect. The neutral color palette and minimalist design lend a contemporary and sophisticated style. Recommended for use in residential or commercial spaces seeking a clean and modern aesthetic.", "dominant_color_hex": "#F5F5F5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 82, "mfr_sku": "ZW145/01", "pattern_name": "Pyrite", "color_name": "Spacedust", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Plain / Textured Weave (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "V: 5.0 cms (2.0 \"), H: 5.0 cms (2.0 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-01-pyrite-wallcovering-spacedust_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-01-pyrite-wallcovering-spacedust_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-88", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:24.658314", "updated_at": "2026-03-18T17:51:49.817972", "color_hex": "#F2E6D9", "ai_colors": [{"hex": "#F2E6D9", "name": "Beige", "percentage": 45}, {"hex": "#D9C6B3", "name": "Tan", "percentage": 30}, {"hex": "#C6B3A0", "name": "Light Brown", "percentage": 15}, {"hex": "#B3A08D", "name": "Brown", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Geometric", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Light Brown", "Brown", "Traditional", "Coastal", "Geometric", "Textured", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": "5.0 cms (2.0 \")", "vertical_repeat": "5.0 cms (2.0 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "V: 5.0 cms (2.0 \"), H: 5.0 cms (2.0 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a woven geometric pattern, creating a subtle textured effect. The neutral color palette evokes a sense of calm and sophistication. Ideal for adding depth and warmth to any residential space.", "dominant_color_hex": "#F2E6D9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 78, "mfr_sku": "ZW148/02", "pattern_name": "Paulownia", "color_name": "Silver Grey", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-02-paulownia-wallcovering-silver-grey_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-02-paulownia-wallcovering-silver-grey_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z757-03-berinthia-spacedust_05.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z749-02-roxy-spacedust_04.jpg", "room_setting_images": [], "dw_sku": "DWZC-98", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:18.738199", "updated_at": "2026-03-18T17:51:30.977383", "color_hex": "#E0D6C4", "ai_colors": [{"hex": "#E0D6C4", "name": "Light Beige", "percentage": 45}, {"hex": "#B9B0A0", "name": "Pale Taupe", "percentage": 30}, {"hex": "#D1C8B7", "name": "Light Gray", "percentage": 15}, {"hex": "#A69D8D", "name": "Taupe", "percentage": 10}], "ai_styles": ["Scandinavian", "Farmhouse"], "ai_patterns": ["Textured"], "ai_background_color": "Light Beige", "ai_tags": ["Light Beige", "Pale Taupe", "Brown", "Light Gray", "Taupe", "Scandinavian", "Farmhouse", "Textured", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle wood grain texture in a light, neutral palette. Its understated design evokes a sense of calm and simplicity, fitting well with minimalist or rustic aesthetics. Ideal for creating a warm and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#E0D6C4", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 28, "mfr_sku": "ZW115/01", "pattern_name": "Crans Montana", "color_name": "Moonbeam", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "52.0 cms (20.5 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW115-01-crans-montana-wallcovering-moonbeam_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW115-01-crans-montana-wallcovering-moonbeam_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-1", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:05.470175", "updated_at": "2026-03-18T17:47:36.210193", "color_hex": "#F5F5DC", "ai_colors": [{"hex": "#F5F5DC", "name": "Beige", "percentage": 45}, {"hex": "#F8F8FF", "name": "Light Beige", "percentage": 30}, {"hex": "#E8E8D0", "name": "Pale Beige", "percentage": 15}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Geometric", "Chevron"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Beige", "Light Gray", "Contemporary", "Geometric", "Chevron", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "52.0 cms (20.5 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "10\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "52.0 cms (20.5 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a geometric chevron pattern with a textured effect. The neutral beige tones create a subtle and sophisticated look. Recommended for adding depth and visual interest to any room in a residential setting.", "dominant_color_hex": "#F5F5DC", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 80, "mfr_sku": "ZW145/03", "pattern_name": "Pyrite", "color_name": "Goldsand", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Plain / Textured Weave (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "V: 5.0 cms (2.0 \"), H: 5.0 cms (2.0 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-03-pyrite-wallcovering-goldsand_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-03-pyrite-wallcovering-goldsand_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW145-03-pyrite-wallcovering-goldsand_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z756-01-cornelia-spacedust_05.jpg", "room_setting_images": [], "dw_sku": "DWZC-90", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:21.686372", "updated_at": "2026-03-18T17:51:40.412703", "color_hex": "#F5E7D1", "ai_colors": [{"hex": "#F5E7D1", "name": "Beige", "percentage": 45}, {"hex": "#D1B997", "name": "Tan", "percentage": 30}, {"hex": "#B39674", "name": "Light Brown", "percentage": 15}, {"hex": "#E6D6C0", "name": "Cream", "percentage": 10}], "ai_styles": ["Contemporary", "Scandinavian"], "ai_patterns": ["Geometric", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Light Brown", "Cream", "White", "Contemporary", "Scandinavian", "Geometric", "Textured", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": "5.0 cms (2.0 \")", "vertical_repeat": "5.0 cms (2.0 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "V: 5.0 cms (2.0 \"), H: 5.0 cms (2.0 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a geometric pattern with a textured effect. The neutral color palette and clean lines create a calming and sophisticated mood. It is recommended for use in residential spaces to add a touch of modern elegance.", "dominant_color_hex": "#F5E7D1", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 33, "mfr_sku": "ZW133/02", "pattern_name": "Edenite", "color_name": "Oyster", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-02-edenite-wallcovering-oyster_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-02-edenite-wallcovering-oyster_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-33", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:12.682961", "updated_at": "2026-03-18T17:47:59.506007", "color_hex": "#F5F0E1", "ai_colors": [{"hex": "#F5F0E1", "name": "Beige", "percentage": 55}, {"hex": "#E8E2D3", "name": "Light Beige", "percentage": 30}, {"hex": "#DED7C7", "name": "Pale Tan", "percentage": 10}, {"hex": "#CFC9B9", "name": "Cream", "percentage": 5}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Tan", "Cream", "White", "Traditional", "Textured", "Solid", "Grasscloth"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in a neutral beige tone. Its classic and understated design lends a traditional and calming mood to any space. Recommended for residential interiors seeking a touch of refined elegance.", "dominant_color_hex": "#F5F0E1", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 19, "mfr_sku": "ZW128/07", "pattern_name": "Cerium", "color_name": "Mercury", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-07-cerium-wallcovering-mercury_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-07-cerium-wallcovering-mercury_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-22", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:44.660579", "updated_at": "2026-03-18T17:46:54.001491", "color_hex": "#B2A799", "ai_colors": [{"hex": "#B2A799", "name": "Taupe", "percentage": 45}, {"hex": "#737373", "name": "Gray", "percentage": 30}, {"hex": "#D9CBBF", "name": "Beige", "percentage": 15}, {"hex": "#594F43", "name": "Dark Brown", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Gray", "Beige", "Dark Brown", "Traditional", "Coastal", "Textured", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a tightly woven, horizontal stripe texture. The neutral color palette evokes a sense of calm and sophistication. Ideal for creating a serene and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#B2A799", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 38, "mfr_sku": "ZW126/01", "pattern_name": "Jurbanite", "color_name": "Oyster", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-01-jurbanite-wallcovering-oyster_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-01-jurbanite-wallcovering-oyster_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-12", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:19.977844", "updated_at": "2026-03-18T17:48:22.99617", "color_hex": "#F5F1E5", "ai_colors": [{"hex": "#F5F1E5", "name": "Beige", "percentage": 60}, {"hex": "#E3DDCB", "name": "Light Beige", "percentage": 25}, {"hex": "#D1CCC0", "name": "Pale Beige", "percentage": 10}, {"hex": "#C0BBAF", "name": "Tan", "percentage": 5}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Beige", "Tan", "Traditional", "Coastal", "Textured", "Solid", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral beige tones evoke a sense of calm and sophistication. Recommended for creating a serene and inviting atmosphere in residential spaces.", "dominant_color_hex": "#F5F1E5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 30, "mfr_sku": "ZW133/08", "pattern_name": "Edenite", "color_name": "Eggplant", "collection": "Scope Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-08-edenite-wallcovering-eggplant_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-08-edenite-wallcovering-eggplant_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-36", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:08.206567", "updated_at": "2026-03-18T17:47:45.423747", "color_hex": "#363636", "ai_colors": [{"hex": "#363636", "name": "Charcoal Gray", "percentage": 45}, {"hex": "#4A4A4A", "name": "Dark Gray", "percentage": 30}, {"hex": "#636363", "name": "Taupe", "percentage": 15}, {"hex": "#777777", "name": "Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Charcoal Gray", "ai_tags": ["Charcoal Gray", "Gray", "Dark Gray", "Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Solid", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. The dark, neutral color palette lends a sophisticated and understated style. Ideal for creating a calming and refined atmosphere in residential or commercial spaces.", "dominant_color_hex": "#363636", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 40, "mfr_sku": "ZW126/03", "pattern_name": "Jurbanite", "color_name": "Spacedust", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-03-jurbanite-wallcovering-spacedust_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-03-jurbanite-wallcovering-spacedust_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-13", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:22.965949", "updated_at": "2026-03-18T17:48:32.423096", "color_hex": "#E5DED3", "ai_colors": [{"hex": "#E5DED3", "name": "Light Beige", "percentage": 45}, {"hex": "#CFC7BC", "name": "Pale Taupe", "percentage": 30}, {"hex": "#B9B1A7", "name": "Light Gray", "percentage": 15}, {"hex": "#A39B91", "name": "Taupe", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Beige", "ai_tags": ["Light Beige", "Pale Taupe", "Brown", "Light Gray", "Taupe", "Contemporary", "Minimalist", "Textured", "Solid", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. The neutral color palette and minimalist style create a calming and sophisticated ambiance. Recommended for use in residential or commercial spaces seeking a touch of understated elegance.", "dominant_color_hex": "#E5DED3", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 36, "mfr_sku": "ZW126/07", "pattern_name": "Jurbanite", "color_name": "Goldsand", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-07-jurbanite-wallcovering-goldsand_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-07-jurbanite-wallcovering-goldsand_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-07-jurbanite-wallcovering-goldsand_03.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-07-jurbanite-wallcovering-goldsand_04.jpg", "room_setting_images": [], "dw_sku": "DWZC-16", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:17.027462", "updated_at": "2026-03-18T17:48:13.576224", "color_hex": "#E0D0B4", "ai_colors": [{"hex": "#E0D0B4", "name": "Beige", "percentage": 45}, {"hex": "#D1C0A3", "name": "Light Beige", "percentage": 30}, {"hex": "#BFA987", "name": "Tan", "percentage": 15}, {"hex": "#A89271", "name": "Light Brown", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Tan", "Light Brown", "Traditional", "Coastal", "Textured", "Grasscloth"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured grasscloth design. Its neutral color palette evokes a sense of calm and understated elegance. Ideal for creating a warm and inviting atmosphere in living rooms, bedrooms, or offices.", "dominant_color_hex": "#E0D0B4", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 70, "mfr_sku": "ZW144/02", "pattern_name": "Oolite Matt", "color_name": "Mink", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-02-oolite-matt-wallcovering-mink_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-02-oolite-matt-wallcovering-mink_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-79", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:06.951813", "updated_at": "2026-03-18T17:50:53.330144", "color_hex": "#F2E5D9", "ai_colors": [{"hex": "#F2E5D9", "name": "Beige", "percentage": 45}, {"hex": "#D6C4B3", "name": "Tan", "percentage": 30}, {"hex": "#B9A796", "name": "Light Brown", "percentage": 15}, {"hex": "#9C8A79", "name": "Taupe", "percentage": 10}], "ai_styles": ["Traditional", "Textured"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Light Brown", "Taupe", "Brown", "Traditional", "Textured", "Non-woven", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern, creating a sophisticated and understated look. The neutral color palette evokes a sense of calm and elegance, making it suitable for a variety of interior styles. Recommended for living rooms, bedrooms, or any space where a touch of refined texture is desired.", "dominant_color_hex": "#F2E5D9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 39, "mfr_sku": "ZW126/05", "pattern_name": "Jurbanite", "color_name": "Patina", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-05-jurbanite-wallcovering-patina_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW126-05-jurbanite-wallcovering-patina_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-15", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:21.467462", "updated_at": "2026-03-18T17:48:27.754844", "color_hex": "#DAD4C5", "ai_colors": [{"hex": "#DAD4C5", "name": "Light Beige", "percentage": 55}, {"hex": "#B9B1A2", "name": "Beige", "percentage": 30}, {"hex": "#E5E0D3", "name": "Light Gray", "percentage": 10}, {"hex": "#979083", "name": "Gray", "percentage": 5}], "ai_styles": ["Traditional", "Farmhouse"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Beige", "ai_tags": ["Light Beige", "Beige", "Light Gray", "Gray", "Traditional", "Farmhouse", "Textured", "Solid", "Linen"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral color palette and linen-like texture evoke a sense of understated elegance and warmth. Ideal for creating a cozy and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#DAD4C5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 29, "mfr_sku": "ZW138/03", "pattern_name": "Deveraux", "color_name": "Verdigris", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "6 Metres (6.6 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW138-03-deveraux-wallcovering-verdigris_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW138-03-deveraux-wallcovering-verdigris_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW138-03-deveraux-wallcovering-verdigris_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-51", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:06.961059", "updated_at": "2026-03-18T17:47:40.851503", "color_hex": "#B2BEB5", "ai_colors": [{"hex": "#B2BEB5", "name": "Pale Green", "percentage": 45}, {"hex": "#8EA397", "name": "Sea Green", "percentage": 30}, {"hex": "#D0D5D1", "name": "Light Gray", "percentage": 15}, {"hex": "#5C635F", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Pale Green", "ai_tags": ["Pale Green", "Sea Green", "Light Gray", "Dark Gray", "Contemporary", "Minimalist", "Textured", "Stripe", "Silk"], "horizontal_repeat": "190.0 cms (74.8 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle stripe pattern with a textured effect. The pale green color palette creates a calming and minimalist aesthetic. Ideal for adding a touch of understated elegance to residential spaces.", "dominant_color_hex": "#B2BEB5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 24, "mfr_sku": "ZW121/03", "pattern_name": "Cortina", "color_name": "Tungsten", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "26.5 cms (10.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW121-03-cortina-wallcovering-tungsten_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW121-03-cortina-wallcovering-tungsten_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-9", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:59.448435", "updated_at": "2026-03-18T17:47:17.611497", "color_hex": "#D3D3D3", "ai_colors": [{"hex": "#D3D3D3", "name": "Light Gray", "percentage": 65}, {"hex": "#696969", "name": "Dark Gray", "percentage": 35}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Geometric"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Dark Gray", "Contemporary", "Minimalist", "Geometric", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": "26.5 cms (10.4 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "26.5 cms (10.4 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a dense pattern of small, open circles against a light gray background. The minimalist style and geometric pattern create a modern and clean aesthetic. Ideal for adding subtle texture and visual interest to any interior space.", "dominant_color_hex": "#D3D3D3", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 20, "mfr_sku": "ZW128/01", "pattern_name": "Cerium", "color_name": "Moonbeam", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-01-cerium-wallcovering-moonbeam_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-01-cerium-wallcovering-moonbeam_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-20", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:46.131948", "updated_at": "2026-03-18T17:46:58.732771", "color_hex": "#F5F5DC", "ai_colors": [{"hex": "#F5F5DC", "name": "Off-white", "percentage": 50}, {"hex": "#E0D8C4", "name": "Beige", "percentage": 30}, {"hex": "#C0B8A0", "name": "Light Brown", "percentage": 15}, {"hex": "#A8A088", "name": "Tan", "percentage": 5}], "ai_styles": ["Coastal", "Scandinavian"], "ai_patterns": ["Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Beige", "Light Brown", "Tan", "Coastal", "Scandinavian", "Textured", "Grasscloth"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a natural grasscloth texture with subtle variations in tone. Its neutral palette and organic feel evoke a sense of calm and understated elegance. Ideal for creating a serene and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#F5F5DC", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 35, "mfr_sku": "ZW140/03", "pattern_name": "Farentino", "color_name": "Cerulean", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "V: 300.0 cms (118.1 \"), H: 285.0 cms (112.2 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW140-03-farentino-wallcovering-cerulean_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW140-03-farentino-wallcovering-cerulean_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW140-03-farentino-wallcovering-cerulean_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-52", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:15.503127", "updated_at": "2026-03-18T17:48:08.91407", "color_hex": "#34787F", "ai_colors": [{"hex": "#34787F", "name": "Teal", "percentage": 45}, {"hex": "#2D656B", "name": "Dark Teal", "percentage": 30}, {"hex": "#428A91", "name": "Medium Teal", "percentage": 15}, {"hex": "#529CA3", "name": "Grayish Teal", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Teal", "ai_tags": ["Teal", "Blue", "Dark Teal", "Medium Teal", "Grayish Teal", "Contemporary", "Minimalist", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": "285.0 cms (112.2 \")", "vertical_repeat": "300.0 cms (118.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 300.0 cms (118.1 \"), H: 285.0 cms (112.2 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal texture in varying shades of teal. Its minimalist style evokes a sense of calm and sophistication. Recommended for creating a serene and modern atmosphere in residential or commercial spaces.", "dominant_color_hex": "#34787F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 31, "mfr_sku": "ZW133/07", "pattern_name": "Edenite", "color_name": "Goldsand", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-07-edenite-wallcovering-goldsand_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-07-edenite-wallcovering-goldsand_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-35", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:09.704086", "updated_at": "2026-03-18T17:47:50.099302", "color_hex": "#B2B0A6", "ai_colors": [{"hex": "#B2B0A6", "name": "Taupe", "percentage": 50}, {"hex": "#D1CEC3", "name": "Light Taupe", "percentage": 30}, {"hex": "#918F86", "name": "Gray", "percentage": 10}, {"hex": "#C6C3B8", "name": "Beige", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Light Taupe", "Gray", "Beige", "Traditional", "Coastal", "Textured", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured grasscloth pattern. The neutral taupe color palette evokes a sense of calm and sophistication. Ideal for creating a warm and inviting atmosphere in living rooms, bedrooms, or offices.", "dominant_color_hex": "#B2B0A6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 34, "mfr_sku": "ZW133/04", "pattern_name": "Edenite", "color_name": "Patina", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-04-edenite-wallcovering-patina_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-04-edenite-wallcovering-patina_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-34", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:14.188478", "updated_at": "2026-03-18T17:48:04.21499", "color_hex": "#E0D8C6", "ai_colors": [{"hex": "#E0D8C6", "name": "Beige", "percentage": 60}, {"hex": "#C8BFAE", "name": "Light Brown", "percentage": 40}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Brown", "Traditional", "Textured", "Grasscloth"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, woven texture that adds depth and visual interest. Its neutral color palette and classic design evoke a sense of understated elegance. Ideal for creating a warm and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#E0D8C6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 32, "mfr_sku": "ZW133/01", "pattern_name": "Edenite", "color_name": "Moonbeam", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-01-edenite-wallcovering-moonbeam_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW133-01-edenite-wallcovering-moonbeam_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-32", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:11.193517", "updated_at": "2026-03-18T17:47:54.818989", "color_hex": "#F5F3E8", "ai_colors": [{"hex": "#F5F3E8", "name": "Off-white", "percentage": 65}, {"hex": "#E5DDC6", "name": "Beige", "percentage": 25}, {"hex": "#D5CBB3", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Beige", "Light Beige", "Traditional", "Textured", "Paper", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured pattern that adds depth and visual interest. The neutral color palette evokes a sense of calm and sophistication, lending itself to a variety of design styles. Recommended for living rooms, bedrooms, or any space where a touch of understated elegance is desired.", "dominant_color_hex": "#F5F3E8", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 57, "mfr_sku": "ZW137/06", "pattern_name": "Maurier", "color_name": "Cerulean", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "6 Metres (6.6 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-06-maurier-wallcovering-cerulean_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-06-maurier-wallcovering-cerulean_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-06-maurier-wallcovering-cerulean_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-50", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:47.784883", "updated_at": "2026-03-18T17:49:52.247563", "color_hex": "#378899", "ai_colors": [{"hex": "#378899", "name": "Teal", "percentage": 60}, {"hex": "#F2F2E6", "name": "Off-white", "percentage": 30}, {"hex": "#E6D9C6", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Abstract", "Textured"], "ai_background_color": "Teal", "ai_tags": ["Teal", "Blue", "Off-white", "Light Beige", "Contemporary", "Abstract", "Textured", "Silk", "Animal", "Insects"], "horizontal_repeat": "190.0 cms (74.8 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features an abstract, swirling pattern in teal and off-white, creating a dynamic and artistic effect. Its contemporary style lends a modern and sophisticated touch to any space. Recommended for living rooms, bedrooms, or accent walls seeking a unique and stylish statement.", "dominant_color_hex": "#378899", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 26, "mfr_sku": "ZW115/03", "pattern_name": "Crans Montana", "color_name": "Gunmetal", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "52.0 cms (20.5 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW115-03-crans-montana-wallcovering-gunmetal_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW115-03-crans-montana-wallcovering-gunmetal_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-3", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:02.493263", "updated_at": "2026-03-18T17:47:26.91401", "color_hex": "#C0C0C0", "ai_colors": [{"hex": "#C0C0C0", "name": "Silver", "percentage": 45}, {"hex": "#808080", "name": "Gray", "percentage": 30}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 15}, {"hex": "#A9A9A9", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Geometric", "Chevron"], "ai_background_color": "Silver", "ai_tags": ["Silver", "Gray", "Light Gray", "Dark Gray", "Contemporary", "Geometric", "Chevron", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "52.0 cms (20.5 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "10\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "52.0 cms (20.5 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a geometric chevron pattern with a textured effect. The neutral color palette and clean lines create a modern and sophisticated mood. It is suitable for various applications, including residential and commercial spaces.", "dominant_color_hex": "#C0C0C0", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 76, "mfr_sku": "ZW148/04", "pattern_name": "Paulownia", "color_name": "Mercury", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-04-paulownia-wallcovering-mercury_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-04-paulownia-wallcovering-mercury_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW148-04-paulownia-wallcovering-mercury_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z764-07-cookie-hunting_05.jpg", "room_setting_images": [], "dw_sku": "DWZC-100", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:15.777683", "updated_at": "2026-03-18T17:51:21.528476", "color_hex": "#3F3D3D", "ai_colors": [{"hex": "#3F3D3D", "name": "Dark Gray", "percentage": 45}, {"hex": "#4D4C4C", "name": "Charcoal Gray", "percentage": 30}, {"hex": "#575555", "name": "Slate Gray", "percentage": 15}, {"hex": "#636161", "name": "Dim Gray", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Dark Gray", "ai_tags": ["Dark Gray", "Charcoal Gray", "Gray", "Slate Gray", "Dim Gray", "Contemporary", "Minimalist", "Textured", "Stripe", "Non-woven", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle vertical stripe texture, creating a sophisticated and understated look. The dark gray color palette evokes a sense of calm and modernity. Ideal for creating a refined atmosphere in both residential and commercial spaces.", "dominant_color_hex": "#3F3D3D", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 27, "mfr_sku": "ZW115/02", "pattern_name": "Crans Montana", "color_name": "Linen", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "52.0 cms (20.5 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW115-02-crans-montana-wallcovering-linen_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW115-02-crans-montana-wallcovering-linen_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-2", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:03.982225", "updated_at": "2026-03-18T17:47:31.557909", "color_hex": "#E5DED4", "ai_colors": [{"hex": "#E5DED4", "name": "Beige", "percentage": 45}, {"hex": "#B3A697", "name": "Taupe", "percentage": 30}, {"hex": "#D1C8BC", "name": "Light Beige", "percentage": 15}, {"hex": "#9E9386", "name": "Gray", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Geometric", "Chevron"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Taupe", "Brown", "Light Beige", "Gray", "Contemporary", "Geometric", "Chevron", "Non-woven", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": "52.0 cms (20.5 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Geometric", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "10\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "52.0 cms (20.5 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a geometric chevron pattern with a textured effect. The neutral color palette creates a sophisticated and modern style. It is suitable for adding visual interest to various interior spaces.", "dominant_color_hex": "#E5DED4", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 72, "mfr_sku": "ZW144/09", "pattern_name": "Oolite Matt", "color_name": "Racing", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-09-oolite-matt-wallcovering-racing_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-09-oolite-matt-wallcovering-racing_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-86", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:09.915207", "updated_at": "2026-03-18T17:51:02.710177", "color_hex": "#6B754A", "ai_colors": [{"hex": "#6B754A", "name": "Olive Green", "percentage": 60}, {"hex": "#59633E", "name": "Dark Olive Green", "percentage": 25}, {"hex": "#82856D", "name": "Taupe", "percentage": 10}, {"hex": "#403633", "name": "Brown", "percentage": 5}], "ai_styles": ["Traditional", "Farmhouse"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Olive Green", "ai_tags": ["Olive Green", "Green", "Dark Olive Green", "Taupe", "Brown", "Traditional", "Farmhouse", "Textured", "Solid", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in a muted olive green. Its understated design evokes a sense of rustic charm and timeless appeal. Ideal for creating a warm and inviting atmosphere in residential or commercial spaces.", "dominant_color_hex": "#6B754A", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 15, "mfr_sku": "ZW134/01", "pattern_name": "Cazenove", "color_name": "Silver Grey", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-01-cazenove-wallcovering-silver-grey_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-01-cazenove-wallcovering-silver-grey_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-01-cazenove-wallcovering-silver-grey_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-37", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:38.755592", "updated_at": "2026-03-18T17:46:35.217808", "color_hex": "#F2F0E8", "ai_colors": [{"hex": "#F2F0E8", "name": "Off-white", "percentage": 45}, {"hex": "#E3DFD5", "name": "Beige", "percentage": 30}, {"hex": "#D5D0C5", "name": "Light Gray", "percentage": 15}, {"hex": "#C7C2B7", "name": "Taupe", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Beige", "Light Gray", "Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Solid", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured pattern reminiscent of natural grasscloth. Its neutral color palette and minimalist design create a calming and sophisticated atmosphere. Ideal for adding depth and warmth to any interior space, from residential living rooms to commercial offices.", "dominant_color_hex": "#F2F0E8", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 14, "mfr_sku": "ZW134/02", "pattern_name": "Cazenove", "color_name": "Mist", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-02-cazenove-wallcovering-mist_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-02-cazenove-wallcovering-mist_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-02-cazenove-wallcovering-mist_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-38", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:37.270085", "updated_at": "2026-03-18T17:46:30.564974", "color_hex": "#D8D8D8", "ai_colors": [{"hex": "#D8D8D8", "name": "Light Gray", "percentage": 45}, {"hex": "#C2C2C2", "name": "Pale Gray", "percentage": 30}, {"hex": "#ACACAC", "name": "Silver Gray", "percentage": 15}, {"hex": "#B8B8B8", "name": "Light Taupe", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Pale Gray", "Silver Gray", "Gray", "Light Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern reminiscent of raw silk. Its minimalist style and neutral color palette evoke a sense of calm and sophistication. Recommended for creating a serene and elegant atmosphere in residential or commercial spaces.", "dominant_color_hex": "#D8D8D8", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 68, "mfr_sku": "ZW144/06", "pattern_name": "Oolite Matt", "color_name": "Elephant", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-06-oolite-matt-wallcovering-elephant_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-06-oolite-matt-wallcovering-elephant_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-83", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:03.975706", "updated_at": "2026-03-18T17:50:43.961311", "color_hex": "#E0DED5", "ai_colors": [{"hex": "#E0DED5", "name": "Light Gray", "percentage": 45}, {"hex": "#B3B0A9", "name": "Gray", "percentage": 30}, {"hex": "#857F75", "name": "Taupe", "percentage": 15}, {"hex": "#57534A", "name": "Dark Taupe", "percentage": 10}], "ai_styles": ["Traditional", "Textured"], "ai_patterns": ["Textured"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Gray", "Taupe", "Brown", "Dark Taupe", "Traditional", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern, creating a sophisticated and understated look. Its neutral color palette lends itself to a variety of design styles, adding depth and visual interest without overwhelming the space. Ideal for creating a calming and refined atmosphere in any room.", "dominant_color_hex": "#E0DED5", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 71, "mfr_sku": "ZW144/07", "pattern_name": "Oolite Matt", "color_name": "Obsidian", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-07-oolite-matt-wallcovering-obsidian_00.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-07-oolite-matt-wallcovering-obsidian_00.jpg", "room_setting_images": [], "dw_sku": "DWZC-84", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:08.439853", "updated_at": "2026-03-18T17:50:57.9976", "color_hex": "#4A4A4A", "ai_colors": [{"hex": "#4A4A4A", "name": "Dark Gray", "percentage": 60}, {"hex": "#5E5E5E", "name": "Charcoal Gray", "percentage": 25}, {"hex": "#453B36", "name": "Dark Brown", "percentage": 10}, {"hex": "#737373", "name": "Gray", "percentage": 5}], "ai_styles": ["Industrial", "Contemporary"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Dark Gray", "ai_tags": ["Dark Gray", "Charcoal Gray", "Gray", "Dark Brown", "Industrial", "Contemporary", "Textured", "Solid", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a textured, solid pattern in varying shades of dark gray. Its industrial and contemporary style lends a sophisticated and modern mood. Recommended for use in offices, hospitality settings, healthcare facilities, and residential spaces.", "dominant_color_hex": "#4A4A4A", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 65, "mfr_sku": "ZW129/02", "pattern_name": "Oolite Foil", "color_name": "Spacedust", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-02-oolite-wallcovering-spacedust_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-02-oolite-wallcovering-spacedust_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-25", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:59.486931", "updated_at": "2026-03-18T17:50:29.833675", "color_hex": "#F2F0EB", "ai_colors": [{"hex": "#F2F0EB", "name": "Off-white", "percentage": 65}, {"hex": "#C2B7A6", "name": "Beige", "percentage": 20}, {"hex": "#A6A8A9", "name": "Light Gray", "percentage": 10}, {"hex": "#8F887D", "name": "Taupe", "percentage": 5}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Beige", "Light Gray", "Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Non-woven", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in a neutral color palette. Its minimalist style and contemporary aesthetic make it a versatile choice for various interior spaces. Recommended for use in residential or commercial settings seeking a clean and sophisticated look.", "dominant_color_hex": "#F2F0EB", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 60, "mfr_sku": "ZW131/02", "pattern_name": "Monazite", "color_name": "Cerulean", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW131-02-monazite-wallcovering-cerulean_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW131-02-monazite-wallcovering-cerulean_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-28", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:52.04516", "updated_at": "2026-03-18T17:50:06.390531", "color_hex": "#E0D9C6", "ai_colors": [{"hex": "#E0D9C6", "name": "Beige", "percentage": 45}, {"hex": "#BDB5A2", "name": "Taupe", "percentage": 30}, {"hex": "#283040", "name": "Navy", "percentage": 15}, {"hex": "#F0EDE4", "name": "Light Beige", "percentage": 10}], "ai_styles": ["Coastal", "Scandinavian"], "ai_patterns": ["Stripe", "Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Taupe", "Brown", "Navy", "Blue", "Light Beige", "Coastal", "Scandinavian", "Stripe", "Textured", "Grasscloth"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Metallic (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle stripe pattern with a textured effect, creating a natural and organic look. Its neutral color palette evokes a sense of calm and tranquility, perfect for creating a relaxed atmosphere. Recommended for living rooms, bedrooms, or any space where a touch of understated elegance is desired.", "dominant_color_hex": "#E0D9C6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 66, "mfr_sku": "ZW144/08", "pattern_name": "Oolite Matt", "color_name": "Brunello", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-08-oolite-matt-wallcovering-bruenello_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-08-oolite-matt-wallcovering-bruenello_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-85", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:00.984339", "updated_at": "2026-03-18T17:50:34.563129", "color_hex": "#3C1E1A", "ai_colors": [{"hex": "#3C1E1A", "name": "Dark Sienna", "percentage": 45}, {"hex": "#713027", "name": "Burnt Sienna", "percentage": 30}, {"hex": "#271614", "name": "Dark Chocolate", "percentage": 15}, {"hex": "#D1C7C2", "name": "Grayish Beige", "percentage": 10}], "ai_styles": ["Traditional", "Industrial"], "ai_patterns": ["Textured"], "ai_background_color": "Dark Sienna", "ai_tags": ["Dark Sienna", "Brown", "Burnt Sienna", "Orange", "Dark Chocolate", "Grayish Beige", "Traditional", "Industrial", "Textured", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a heavily textured, abstract pattern reminiscent of aged wood or distressed leather. The deep, rich sienna tones evoke a sense of warmth and rustic elegance. Ideal for creating a cozy and inviting atmosphere in residential or commercial spaces.", "dominant_color_hex": "#3C1E1A", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 67, "mfr_sku": "ZW144/10", "pattern_name": "Oolite Matt", "color_name": "Electric Teal", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-10-oolite-matt-wallcovering-electric-teal_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW144-10-oolite-matt-wallcovering-electric-teal_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-87", "shopify_product_id": null, "crawled_at": "2026-03-16T21:23:02.461741", "updated_at": "2026-03-18T17:50:39.273515", "color_hex": "#2F666F", "ai_colors": [{"hex": "#2F666F", "name": "Teal", "percentage": 45}, {"hex": "#29545B", "name": "Dark Teal", "percentage": 30}, {"hex": "#353A3B", "name": "Charcoal Gray", "percentage": 15}, {"hex": "#BFC0C2", "name": "Silver", "percentage": 10}], "ai_styles": ["Contemporary", "Industrial"], "ai_patterns": ["Textured"], "ai_background_color": "Teal", "ai_tags": ["Teal", "Blue", "Dark Teal", "Charcoal Gray", "Gray", "Silver", "Contemporary", "Industrial", "Textured", "Cork", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Plain / Textured Weave (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a textured cork design in a deep teal hue. The contemporary and industrial style lends a modern and sophisticated mood. It is suitable for a variety of spaces, including offices, hospitality settings, healthcare facilities, and residential interiors.", "dominant_color_hex": "#2F666F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 63, "mfr_sku": "ZW129/04", "pattern_name": "Oolite Foil", "color_name": "Night Sky", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-04-oolite-wallcovering-night-sky_00.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-04-oolite-wallcovering-night-sky_00.jpg", "room_setting_images": [], "dw_sku": "DWZC-27", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:56.514028", "updated_at": "2026-03-18T17:50:20.433713", "color_hex": "#3A3B3F", "ai_colors": [{"hex": "#3A3B3F", "name": "Charcoal Gray", "percentage": 60}, {"hex": "#5A5B5F", "name": "Dark Gray", "percentage": 25}, {"hex": "#D1D3D5", "name": "Silver", "percentage": 10}, {"hex": "#7A7B7F", "name": "Slate Gray", "percentage": 5}], "ai_styles": ["Industrial", "Contemporary"], "ai_patterns": ["Textured", "Abstract"], "ai_background_color": "Charcoal Gray", "ai_tags": ["Charcoal Gray", "Gray", "Dark Gray", "Silver", "Slate Gray", "Industrial", "Contemporary", "Textured", "Abstract", "Vinyl"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a heavily textured abstract pattern with a distressed look. The dark gray backdrop is accented by flecks of silver, creating a modern and industrial aesthetic. Recommended for adding depth and visual interest to contemporary spaces.", "dominant_color_hex": "#3A3B3F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 62, "mfr_sku": "ZW129/01", "pattern_name": "Oolite Foil", "color_name": "Moonbeam", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-01-oolite-wallcovering-moonbeam_04.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-01-oolite-wallcovering-moonbeam_04.jpg", "room_setting_images": [], "dw_sku": "DWZC-24", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:55.01922", "updated_at": "2026-03-18T17:50:15.742637", "color_hex": "#F8F8F8", "ai_colors": [{"hex": "#F8F8F8", "name": "Off-white", "percentage": 45}, {"hex": "#E8E0D8", "name": "Beige", "percentage": 30}, {"hex": "#D0C8C0", "name": "Tan", "percentage": 15}, {"hex": "#B8B0A8", "name": "Light Brown", "percentage": 10}], "ai_styles": ["Scandinavian", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Beige", "Tan", "Light Brown", "Scandinavian", "Minimalist", "Textured", "Non-woven", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern in a neutral color palette. Its minimalist style and clean aesthetic make it a versatile choice for various interior design schemes. Recommended for creating a calming and sophisticated atmosphere in residential or commercial spaces.", "dominant_color_hex": "#F8F8F8", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 18, "mfr_sku": "ZW128/08", "pattern_name": "Cerium", "color_name": "Chalk", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-08-cerium-wallcovering-chalk_00.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-08-cerium-wallcovering-chalk_00.jpg", "room_setting_images": [], "dw_sku": "DWZC-23", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:43.172858", "updated_at": "2026-03-18T17:46:49.270547", "color_hex": "#F5F5DC", "ai_colors": [{"hex": "#F5F5DC", "name": "Beige", "percentage": 45}, {"hex": "#D2B48C", "name": "Light Brown", "percentage": 30}, {"hex": "#E9CFA4", "name": "Tan", "percentage": 15}, {"hex": "#EEE8AA", "name": "Pale Gold", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Brown", "Tan", "Pale Gold", "Yellow", "Traditional", "Coastal", "Textured", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a natural grasscloth texture with subtle horizontal striations. Its neutral color palette evokes a sense of calm and sophistication, lending itself to a variety of design styles. Recommended for creating a warm and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#F5F5DC", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 64, "mfr_sku": "ZW129/03", "pattern_name": "Oolite Foil", "color_name": "Smoke", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Product", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-03-oolite-wallcovering-smoke_03.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-03-oolite-wallcovering-smoke_03.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-03-oolite-wallcovering-smoke_04.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-03-oolite-wallcovering-smoke_05.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW129-03-oolite-wallcovering-smoke_06.jpg", "room_setting_images": [], "dw_sku": "DWZC-26", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:58.005637", "updated_at": "2026-03-18T17:50:25.12895", "color_hex": "#D2C1A9", "ai_colors": [{"hex": "#D2C1A9", "name": "Beige", "percentage": 45}, {"hex": "#A09383", "name": "Taupe", "percentage": 30}, {"hex": "#737373", "name": "Gray", "percentage": 15}, {"hex": "#D9D9D9", "name": "Silver", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Taupe", "Brown", "Gray", "Silver", "Contemporary", "Minimalist", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Product", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle textured pattern, creating a sophisticated and understated look. Its neutral color palette lends itself to a minimalist and contemporary style. Recommended for use in residential or commercial spaces seeking a touch of refined simplicity.", "dominant_color_hex": "#D2C1A9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 61, "mfr_sku": "ZW131/03", "pattern_name": "Monazite", "color_name": "Cocktail", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW131-03-monazite-wallcovering-cocktail_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW131-03-monazite-wallcovering-cocktail_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW131-03-monazite-wallcovering-cocktail_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW131-03-monazite-wallcovering-cocktail_03.jpg", "room_setting_images": [], "dw_sku": "DWZC-29", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:53.531133", "updated_at": "2026-03-18T17:50:11.069527", "color_hex": "#E5D8C6", "ai_colors": [{"hex": "#E5D8C6", "name": "Beige", "percentage": 55}, {"hex": "#BFA990", "name": "Tan", "percentage": 25}, {"hex": "#C9713A", "name": "Burnt Orange", "percentage": 15}, {"hex": "#8C6447", "name": "Brown", "percentage": 5}], "ai_styles": ["Coastal", "Farmhouse"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Tan", "Burnt Orange", "Orange", "Brown", "Coastal", "Farmhouse", "Textured", "Stripe", "Grasscloth"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Metallic (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe pattern with a textured, natural feel. The neutral color palette evokes a sense of calm and organic style. Ideal for creating a relaxed and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#E5D8C6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 25, "mfr_sku": "ZW122/02", "pattern_name": "Courchevel", "color_name": "Frost", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW122-02-courchevel-wallcovering-frost_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW122-02-courchevel-wallcovering-frost_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-10", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:00.97595", "updated_at": "2026-03-18T17:47:22.271342", "color_hex": "#F5F5F0", "ai_colors": [{"hex": "#F5F5F0", "name": "Off-white", "percentage": 55}, {"hex": "#D3D3D3", "name": "Light Gray", "percentage": 35}, {"hex": "#C0C0C0", "name": "Silver", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Stripe", "Textured"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Light Gray", "Silver", "Gray", "Contemporary", "Minimalist", "Stripe", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a subtle stripe pattern with a textured effect. Its minimalist style and neutral color palette create a calming and sophisticated atmosphere. Recommended for use in bedrooms, living rooms, or office spaces seeking a clean and modern aesthetic.", "dominant_color_hex": "#F5F5F0", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 17, "mfr_sku": "ZW134/08", "pattern_name": "Cazenove", "color_name": "Umber", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-08-cazenove-wallcovering-umber_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-08-cazenove-wallcovering-umber_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-08-cazenove-wallcovering-umber_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-41", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:41.695466", "updated_at": "2026-03-18T17:46:44.536713", "color_hex": "#D3CEC7", "ai_colors": [{"hex": "#D3CEC7", "name": "Light Gray", "percentage": 50}, {"hex": "#D9D4CD", "name": "Pale Beige", "percentage": 30}, {"hex": "#C7C2BA", "name": "Taupe", "percentage": 10}, {"hex": "#BDB8B1", "name": "Light Brown", "percentage": 10}], "ai_styles": ["Contemporary"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Pale Beige", "Taupe", "Brown", "Light Brown", "Contemporary", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral color palette and refined texture evoke a sense of understated elegance. Ideal for creating a serene and sophisticated atmosphere in residential spaces.", "dominant_color_hex": "#D3CEC7", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 58, "mfr_sku": "ZW137/05", "pattern_name": "Maurier", "color_name": "Charcoal", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "6 Metres (6.6 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-05-maurier-wallcovering-charcoal_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-05-maurier-wallcovering-charcoal_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-05-maurier-wallcovering-charcoal_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-49", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:49.244446", "updated_at": "2026-03-18T17:49:56.888387", "color_hex": "#77736F", "ai_colors": [{"hex": "#77736F", "name": "Gray", "percentage": 60}, {"hex": "#E0DED7", "name": "Off-white", "percentage": 40}], "ai_styles": ["Contemporary"], "ai_patterns": ["Abstract", "Textured"], "ai_background_color": "Gray", "ai_tags": ["Gray", "Off-white", "Contemporary", "Abstract", "Textured", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "190.0 cms (74.8 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features an abstract, swirling pattern in shades of gray and off-white. The textured effect adds depth and visual interest, creating a modern and sophisticated look. It is suitable for a variety of spaces, from residential to commercial settings.", "dominant_color_hex": "#77736F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 56, "mfr_sku": "ZW146/03", "pattern_name": "Magnetite", "color_name": "Night Sky", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW146-03-magentite-wallcovering-night-sky_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW146-03-magentite-wallcovering-night-sky_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-93", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:46.331587", "updated_at": "2026-03-18T17:49:47.581973", "color_hex": "#4A4741", "ai_colors": [{"hex": "#4A4741", "name": "Charcoal Gray", "percentage": 45}, {"hex": "#B2B09B", "name": "Taupe", "percentage": 30}, {"hex": "#737066", "name": "Dark Gray", "percentage": 15}, {"hex": "#D1CEB9", "name": "Beige", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Taupe", "ai_tags": ["Charcoal Gray", "Gray", "Taupe", "Brown", "Dark Gray", "Beige", "Contemporary", "Minimalist", "Textured", "Stripe", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a textured stripe pattern with a natural, organic feel. The neutral color palette and subtle texture create a sophisticated and understated look. Recommended for use in living rooms, bedrooms, or offices seeking a touch of modern elegance.", "dominant_color_hex": "#4A4741", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 59, "mfr_sku": "ZW137/03", "pattern_name": "Maurier", "color_name": "Tungsten", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "6 Metres (6.6 Yards)", "pattern_repeat": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-03-maurier-wallcovering-tungsten_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-03-maurier-wallcovering-tungsten_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW137-03-maurier-wallcovering-tungsten_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-48", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:50.697942", "updated_at": "2026-03-18T17:50:01.609074", "color_hex": "#A9A9A9", "ai_colors": [{"hex": "#A9A9A9", "name": "Gray", "percentage": 60}, {"hex": "#F5F5F5", "name": "White", "percentage": 40}], "ai_styles": ["Contemporary"], "ai_patterns": ["Abstract"], "ai_background_color": "Gray", "ai_tags": ["Gray", "White", "Contemporary", "Abstract", "Vinyl", "Animal", "Insects"], "horizontal_repeat": "190.0 cms (74.8 \")", "vertical_repeat": "150.0 cms (59.1 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "V: 150.0 cms (59.1 \"), H: 190.0 cms (74.8 \")", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features an abstract, swirling pattern in shades of gray and white. The design evokes a sense of movement and fluidity, lending a contemporary and sophisticated touch. Ideal for creating a serene and stylish atmosphere in residential spaces.", "dominant_color_hex": "#A9A9A9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 16, "mfr_sku": "ZW134/04", "pattern_name": "Cazenove", "color_name": "Spun Gold", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-04-cazenove-wallcovering-spun-gold_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-04-cazenove-wallcovering-spun-gold_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-04-cazenove-wallcovering-spun-gold_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-40", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:40.234193", "updated_at": "2026-03-18T17:46:39.881893", "color_hex": "#F0E6D6", "ai_colors": [{"hex": "#F0E6D6", "name": "Beige", "percentage": 45}, {"hex": "#E3D9C9", "name": "Light Beige", "percentage": 30}, {"hex": "#D6CEC0", "name": "Pale Beige", "percentage": 15}, {"hex": "#C9C2B6", "name": "Cream", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Beige", "ai_tags": ["Beige", "Light Beige", "Pale Beige", "Cream", "White", "Traditional", "Textured", "Solid", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. The neutral beige color palette evokes a sense of calm and sophistication. Ideal for creating a serene and inviting atmosphere in any residential space.", "dominant_color_hex": "#F0E6D6", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 55, "mfr_sku": "ZW146/01", "pattern_name": "Magnetite", "color_name": "Goldsand", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Print (WallCoverings)", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW146-01-magentite-wallcovering-goldsand_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW146-01-magentite-wallcovering-goldsand_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z767-02-sedgwick-tobacco_04.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/7/Z762-01-plan-b-tobacco_06.jpg", "room_setting_images": [], "dw_sku": "DWZC-91", "shopify_product_id": null, "crawled_at": "2026-03-16T21:22:44.856141", "updated_at": "2026-03-18T17:49:42.899514", "color_hex": "#D2B48C", "ai_colors": [{"hex": "#D2B48C", "name": "Tan", "percentage": 45}, {"hex": "#F5F5DC", "name": "Beige", "percentage": 30}, {"hex": "#A68A5A", "name": "Light Brown", "percentage": 15}, {"hex": "#795548", "name": "Dark Brown", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Beige", "ai_tags": ["Tan", "Beige", "Light Brown", "Dark Brown", "Traditional", "Coastal", "Textured", "Stripe", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Small Scale Design", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a natural grasscloth texture with subtle horizontal stripes. The neutral color palette evokes a sense of calm and sophistication. Ideal for creating a warm and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#D2B48C", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 23, "mfr_sku": "ZW121/02", "pattern_name": "Cortina", "color_name": "Silver Grey", "collection": "Escape Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "52 cms (20.5 \")", "material": "Printed Wallcovering", "roll_length": "10.05 Metres (11.0 Yards)", "pattern_repeat": "26.5 cms (10.4 \")", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW121-02-cortina-wallcovering-silver-grey_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW121-02-cortina-wallcovering-silver-grey_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-8", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:56.735759", "updated_at": "2026-03-18T17:47:12.932598", "color_hex": "#F2F2F2", "ai_colors": [{"hex": "#F2F2F2", "name": "Off-white", "percentage": 75}, {"hex": "#808080", "name": "Gray", "percentage": 25}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Geometric"], "ai_background_color": "Off-white", "ai_tags": ["Off-white", "Gray", "Contemporary", "Minimalist", "Geometric", "Paper"], "horizontal_repeat": null, "vertical_repeat": "26.5 cms (10.4 \")", "application_method": "Paste the Wall", "aftercare": null, "design_style": "Abstract", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "A4", "environmental": "PFAS Free, REACH Compliant", "width_inches": 20.5, "on_shopify": false, "repeat_v": "26.5 cms (10.4 \")", "repeat_h": null, "repeat_classification": "pattern", "ai_description": "This wallcovering features a dense pattern of small, outlined circles in varying sizes. The minimalist design and neutral color palette create a calming and modern aesthetic. Ideal for adding subtle texture and visual interest to residential spaces.", "dominant_color_hex": "#F2F2F2", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 21, "mfr_sku": "ZW128/06", "pattern_name": "Cerium", "color_name": "Night Sky", "collection": "Mineralogy Wallcoverings", "brand": "Zinc Textile", "product_type": "Wallcovering", "width": "91 cms (35.8 \")", "material": "Textural Wallcovering", "roll_length": "7.3 Metres (8.0 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-06-cerium-wallcovering-night-sky_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-06-cerium-wallcovering-night-sky_01.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW128-06-cerium-wallcovering-night-sky_02.jpg", "room_setting_images": [], "dw_sku": "DWZC-21", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:47.616746", "updated_at": "2026-03-18T17:47:03.44762", "color_hex": "#385970", "ai_colors": [{"hex": "#385970", "name": "Dark Blue", "percentage": 45}, {"hex": "#4A6A80", "name": "Steel Blue", "percentage": 30}, {"hex": "#304858", "name": "Charcoal Gray", "percentage": 15}, {"hex": "#A09268", "name": "Beige", "percentage": 10}], "ai_styles": ["Traditional", "Coastal"], "ai_patterns": ["Textured", "Stripe"], "ai_background_color": "Dark Blue", "ai_tags": ["Dark Blue", "Steel Blue", "Gray", "Charcoal Gray", "Beige", "Traditional", "Coastal", "Textured", "Stripe", "Grasscloth", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Semi-plain", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 35.8, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle horizontal stripe texture, reminiscent of natural grasscloth. The dark blue color palette evokes a sense of calm and sophistication. Recommended for adding a touch of understated elegance to living rooms, bedrooms, or office spaces.", "dominant_color_hex": "#385970", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 13, "mfr_sku": "ZW134/10", "pattern_name": "Cazenove", "color_name": "Mercury", "collection": "Cazenove Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-10-cazenove-wallcovering-mercury_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-10-cazenove-wallcovering-mercury_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-10-cazenove-wallcovering-mercury_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-42", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:35.825159", "updated_at": "2026-03-18T17:46:25.80669", "color_hex": "#A39A8F", "ai_colors": [{"hex": "#A39A8F", "name": "Taupe", "percentage": 45}, {"hex": "#8C857B", "name": "Gray", "percentage": 30}, {"hex": "#B2A99F", "name": "Light Brown", "percentage": 15}, {"hex": "#7A7369", "name": "Dark Gray", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Taupe", "ai_tags": ["Taupe", "Brown", "Gray", "Light Brown", "Dark Gray", "Traditional", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Print (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its neutral taupe color palette evokes a sense of understated elegance and sophistication. Ideal for creating a serene and refined atmosphere in residential spaces.", "dominant_color_hex": "#A39A8F", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 12, "mfr_sku": "ZW134/03", "pattern_name": "Cazenove", "color_name": "Linen", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-03-cazenove-wallcovering-linen_02.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-03-cazenove-wallcovering-linen_02.jpg | https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-03-cazenove-wallcovering-linen_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-39", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:34.506013", "updated_at": "2026-03-18T17:46:21.166932", "color_hex": "#D3D0C9", "ai_colors": [{"hex": "#D3D0C9", "name": "Light Gray", "percentage": 45}, {"hex": "#BDBAB3", "name": "Pale Gray", "percentage": 30}, {"hex": "#A7A49D", "name": "Silver Gray", "percentage": 15}, {"hex": "#918E87", "name": "Taupe", "percentage": 10}], "ai_styles": ["Contemporary", "Minimalist"], "ai_patterns": ["Textured", "Solid"], "ai_background_color": "Light Gray", "ai_tags": ["Light Gray", "Pale Gray", "Silver Gray", "Gray", "Taupe", "Brown", "Contemporary", "Minimalist", "Textured", "Solid", "Silk", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured solid pattern. Its minimalist style evokes a sense of calm and sophistication. Recommended for bedrooms, living rooms, or any space seeking a touch of understated elegance.", "dominant_color_hex": "#D3D0C9", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
+{"id": 11, "mfr_sku": "ZW134/13", "pattern_name": "Cazenove", "color_name": "Cypress", "collection": "Caract\u00e8re Wallcoverings", "brand": "Zinc Textile", "product_type": "Commercial Wallcovering", "width": "95 cms (37.4 \")", "material": "Silk Wallcovering", "roll_length": "9 Metres (9.8 Yards)", "pattern_repeat": "", "match_type": "", "application": "Paste the Wall", "image_url": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-13-cazenove-wallcovering-cypress_01.jpg", "all_images": "https://static.theromogroup.com/zi/cache/image/720x720/catalog/product/Z/W/ZW134-13-cazenove-wallcovering-cypress_01.jpg", "room_setting_images": [], "dw_sku": "DWZC-44", "shopify_product_id": null, "crawled_at": "2026-03-16T21:21:33.049017", "updated_at": "2026-03-18T17:46:16.518808", "color_hex": "#807A59", "ai_colors": [{"hex": "#807A59", "name": "Olive", "percentage": 45}, {"hex": "#B3B08A", "name": "Khaki", "percentage": 30}, {"hex": "#524F39", "name": "Dark Olive Green", "percentage": 15}, {"hex": "#A09D7A", "name": "Gray", "percentage": 10}], "ai_styles": ["Traditional"], "ai_patterns": ["Textured"], "ai_background_color": "Olive", "ai_tags": ["Olive", "Green", "Khaki", "Dark Olive Green", "Gray", "Traditional", "Textured", "Silk", "Animal", "Insects"], "horizontal_repeat": null, "vertical_repeat": null, "application_method": "Paste the Wall", "aftercare": null, "design_style": "Plain / Solid", "composition": "Silk / Silk blend (WallCoverings)", "fire_rating": null, "memo_size": "8\" x 12\"", "environmental": "PFAS Free, REACH Compliant", "width_inches": 37.4, "on_shopify": false, "repeat_v": "", "repeat_h": null, "repeat_classification": "unknown", "ai_description": "This wallcovering features a subtle, textured stripe pattern. Its neutral color palette evokes a sense of calm and sophistication. Recommended for creating a refined and inviting atmosphere in living rooms, bedrooms, or studies.", "dominant_color_hex": "#807A59", "image_rejected": false, "image_rejection_reason": null, "tariff_pct": null, "tariff_amount_per_roll": null, "tariff_amount_per_yard": null, "tariff_updated_at": null, "price_retail": null, "line": "Zinc Textile"}
diff --git a/vendors/arteriors/viewer/fieldmap.json b/vendors/arteriors/viewer/fieldmap.json
new file mode 100644
index 0000000..40792cf
--- /dev/null
+++ b/vendors/arteriors/viewer/fieldmap.json
@@ -0,0 +1,6 @@
+{
+  "title": "Arteriors",
+  "samples_only": true,
+  "vendor_code": "arteriors",
+  "subdomain": "arteriors"
+}
diff --git a/vendors/arteriors/viewer/public/buybutton.js b/vendors/arteriors/viewer/public/buybutton.js
new file mode 100644
index 0000000..f479e9a
--- /dev/null
+++ b/vendors/arteriors/viewer/public/buybutton.js
@@ -0,0 +1,70 @@
+/* Shopify sample checkout for the DW vendor microsites.
+ *
+ * These vendor lines are OFF Shopify (no per-product Shopify variant), so "Request
+ * Sample" cannot add a per-product variant. Instead it uses ONE generic "Memo Sample"
+ * Shopify product/variant and adds it to a real Shopify cart once per requested swatch,
+ * carrying each swatch's pattern/color/SKU/vendor as line-item custom properties, then
+ * opens Shopify's secure hosted checkout. The order line-items tell fulfillment which
+ * swatches to pull.
+ *
+ * Config is injected by the server at /config.js as window.DWV_CFG = {
+ *   domain: '<store>.myshopify.com', storefrontToken: '<token>', sampleVariantId: '<gid or numeric>'
+ * }. Until storefrontToken + sampleVariantId are set, this falls back to the no-payment
+ * JSONL sample-request endpoint (POST /api/sample-request) so the button always works.
+ */
+(function () {
+  var CFG = window.DWV_CFG || {};
+  var ready = CFG.storefrontToken && CFG.sampleVariantId && CFG.domain;
+  var client = null, checkoutId = null;
+
+  function loadSDK(cb) {
+    if (window.ShopifyBuy && window.ShopifyBuy.buildClient) return cb();
+    var s = document.createElement('script');
+    s.src = 'https://sdks.shopifycdn.com/js-buy-sdk/latest/index.umd.min.js';
+    s.onload = cb; s.onerror = function () { ready = false; cb(); };
+    document.head.appendChild(s);
+  }
+
+  function ensureClient(cb) {
+    if (client) return cb();
+    loadSDK(function () {
+      if (!window.ShopifyBuy || !ready) { ready = false; return cb(); }
+      client = window.ShopifyBuy.buildClient({ domain: CFG.domain, storefrontAccessToken: CFG.storefrontToken });
+      client.checkout.create().then(function (co) { checkoutId = co.id; cb(); }).catch(function () { ready = false; cb(); });
+    });
+  }
+
+  // items: [{sku, mfr_sku, pattern_name, color_name, line}]  -> Shopify checkout
+  function shopifyCheckout(items, contact) {
+    return new Promise(function (resolve, reject) {
+      ensureClient(function () {
+        if (!ready || !client || !checkoutId) return reject(new Error('shopify-unavailable'));
+        var lines = items.slice(0, 250).map(function (it) {
+          return {
+            variantId: CFG.sampleVariantId,
+            quantity: 1,
+            customAttributes: [
+              { key: 'Pattern', value: String(it.pattern_name || it.sku || '') },
+              { key: 'Color', value: String(it.color_name || '') },
+              { key: 'SKU', value: String(it.mfr_sku || it.sku || '') },
+              { key: 'Line', value: String(it.line || '') }
+            ]
+          };
+        });
+        var attrs = [];
+        if (contact && contact.name) attrs.push({ key: 'Requested by', value: contact.name });
+        var p = client.checkout.addLineItems(checkoutId, lines);
+        p.then(function (co) {
+          if (attrs.length) return client.checkout.updateAttributes(checkoutId, { customAttributes: attrs }).then(function () { return co; });
+          return co;
+        }).then(function (co) { window.location.href = co.webUrl; resolve(co); }).catch(reject);
+      });
+    });
+  }
+
+  // Expose for the viewer's sample modal. Returns true if Shopify path is wired.
+  window.DWV_SAMPLE = {
+    available: function () { return !!ready; },
+    checkout: shopifyCheckout
+  };
+})();
diff --git a/vendors/arteriors/viewer/public/index.html b/vendors/arteriors/viewer/public/index.html
new file mode 100644
index 0000000..ce0d82b
--- /dev/null
+++ b/vendors/arteriors/viewer/public/index.html
@@ -0,0 +1,414 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="robots" content="noindex, nofollow">
+<title>Trade Lines</title>
+<style>
+  :root{
+    --cols: 5;            /* density-driven grid columns */
+    --ink:#1c1a17; --muted:#6f6a62; --line:#e7e2da; --bg:#faf8f4; --card:#fff;
+    --accent:#7a6a52; --accent2:#3c5a4a;
+  }
+  *{box-sizing:border-box}
+  html,body{margin:0}
+  body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg)}
+  a{color:inherit}
+  header.top{padding:22px 24px 12px;border-bottom:1px solid var(--line);background:#fff;position:sticky;top:0;z-index:30}
+  .brand{font-size:24px;letter-spacing:.04em;font-weight:600}
+  .brand small{display:block;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:500;margin-top:3px}
+  .count{color:var(--muted);font-size:13px;margin-left:auto}
+  .toprow{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap}
+  /* controls bar */
+  .controls{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding:12px 24px;border-bottom:1px solid var(--line);background:#fff;position:sticky;top:73px;z-index:20}
+  .controls label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);display:flex;flex-direction:column;gap:4px}
+  select,input[type=search],input[type=text],input[type=email],textarea{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink)}
+  input[type=range]{width:120px}
+  .grow{flex:1;min-width:180px}
+  .density{display:flex;flex-direction:column;gap:4px}
+  .cartbtn{margin-left:auto;background:var(--ink);color:#fff;border:none;border-radius:8px;padding:9px 16px;font-weight:600;cursor:pointer;letter-spacing:.02em}
+  .cartbtn .n{display:inline-block;background:var(--accent2);border-radius:20px;padding:1px 8px;margin-left:6px;font-size:12px}
+  /* active-filter chips bar */
+  .activebar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px 24px;border-bottom:1px solid var(--line);background:#fcfbf8}
+  .activebar.empty{display:none}
+  .achip{display:inline-flex;align-items:center;gap:6px;background:var(--ink);color:#fff;border-radius:20px;padding:4px 6px 4px 11px;font-size:12.5px;line-height:1}
+  .achip .k{opacity:.6;text-transform:uppercase;letter-spacing:.06em;font-size:10px}
+  .achip .x{border:none;background:rgba(255,255,255,.2);color:#fff;border-radius:50%;width:18px;height:18px;cursor:pointer;font-size:13px;line-height:1;padding:0}
+  .clearall{margin-left:auto;border:1px solid var(--line);background:#fff;border-radius:7px;padding:6px 12px;cursor:pointer;font-size:12.5px}
+  /* layout */
+  .wrap{display:flex;align-items:flex-start}
+  aside{width:248px;flex:0 0 248px;padding:18px 16px 60px;border-right:1px solid var(--line);position:sticky;top:135px;max-height:calc(100vh - 135px);overflow:auto}
+  aside h3{font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin:18px 0 8px}
+  aside h3:first-child{margin-top:0}
+  /* facet CHIPS (toggle, multi-select) */
+  .chips{display:flex;flex-wrap:wrap;gap:6px}
+  .chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:18px;padding:4px 10px;font-size:12.5px;cursor:pointer;user-select:none}
+  .chip .cc{color:var(--muted);font-size:10.5px}
+  .chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
+  .chip.on .cc{color:rgba(255,255,255,.7)}
+  .chip.zero{opacity:.38;cursor:default;pointer-events:none}
+  .chip .swatch{width:11px;height:11px;border-radius:50%;border:1px solid rgba(0,0,0,.2);flex:0 0 auto}
+  .facet-search{width:100%;margin-bottom:8px;padding:5px 8px;font-size:13px}
+  .facet-scroll{max-height:230px;overflow:auto;padding-right:4px}
+  .clearbtn{margin-top:14px;width:100%;padding:8px;border:1px solid var(--line);background:#fff;border-radius:7px;cursor:pointer;font-size:13px}
+  main{flex:1;padding:18px 24px 80px;min-width:0}
+  .grid{display:grid;grid-template-columns:repeat(var(--cols),minmax(0,1fr));gap:14px}
+  /* MINIMAL image-forward cards: image + hex dot(s) only; detail on hover/focus */
+  .card{position:relative;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column}
+  .card .imgwrap{aspect-ratio:1/1;background:#f1ede6;overflow:hidden;position:relative}
+  .card img{width:100%;height:100%;object-fit:cover;display:block}
+  .card .dots{position:absolute;left:8px;bottom:8px;display:flex;gap:4px;z-index:2}
+  .card .dot{width:14px;height:14px;border-radius:50%;border:1px solid rgba(255,255,255,.85);box-shadow:0 0 0 1px rgba(0,0,0,.18)}
+  /* reveal overlay (hover or .open via click) */
+  .reveal{position:absolute;inset:auto 0 0 0;background:linear-gradient(to top,rgba(20,18,15,.92),rgba(20,18,15,.78) 60%,rgba(20,18,15,0));color:#fff;padding:30px 11px 11px;transform:translateY(101%);transition:transform .18s ease;display:flex;flex-direction:column;gap:3px}
+  .card:hover .reveal,.card.open .reveal,.card:focus-within .reveal{transform:translateY(0)}
+  .reveal .ptitle{font-weight:600;font-size:13.5px;line-height:1.25}
+  .reveal .rmeta{font-size:11.5px;color:rgba(255,255,255,.82)}
+  .reveal .badge{display:inline-block;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;background:rgba(255,255,255,.16);border-radius:20px;padding:2px 7px;align-self:flex-start;margin-bottom:1px}
+  .reqbtn{margin-top:6px;border:1px solid #fff;background:transparent;color:#fff;border-radius:7px;padding:6px;font-size:12px;font-weight:600;cursor:pointer}
+  .reqbtn.in{background:var(--accent2);border-color:var(--accent2)}
+  #sentinel{height:60px}
+  .status{text-align:center;color:var(--muted);padding:24px;font-size:13px}
+  /* modal */
+  .overlay{position:fixed;inset:0;background:rgba(28,26,23,.45);display:none;align-items:flex-start;justify-content:center;z-index:50;padding:40px 16px;overflow:auto}
+  .overlay.open{display:flex}
+  .modal{background:#fff;border-radius:12px;max-width:560px;width:100%;padding:22px 24px 26px}
+  .modal h2{margin:0 0 4px;font-size:20px}
+  .modal p.sub{margin:0 0 16px;color:var(--muted);font-size:13px}
+  .cartlist{max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:8px;margin-bottom:16px}
+  .citem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);font-size:13px}
+  .citem:last-child{border-bottom:none}
+  .citem img{width:42px;height:42px;object-fit:cover;border-radius:6px;background:#eee}
+  .citem .x{margin-left:auto;border:none;background:none;color:var(--muted);cursor:pointer;font-size:18px}
+  .field{display:flex;flex-direction:column;gap:4px;margin-bottom:11px}
+  .field label{font-size:12px;color:var(--muted)}
+  .row2{display:flex;gap:11px}.row2 .field{flex:1}
+  .submit{width:100%;background:var(--ink);color:#fff;border:none;border-radius:8px;padding:12px;font-weight:600;font-size:15px;cursor:pointer;margin-top:4px}
+  .submit:disabled{opacity:.5;cursor:default}
+  .closex{float:right;border:none;background:none;font-size:22px;cursor:pointer;color:var(--muted);line-height:1}
+  .ok{background:#eef5ef;border:1px solid #cfe3d4;color:#2c5d3c;padding:12px;border-radius:8px;font-size:14px}
+  @media(max-width:820px){aside{display:none}.controls{top:auto;position:static}}
+</style>
+</head>
+<body>
+<header class="top">
+  <div class="toprow">
+    <div class="brand" id="brand">Trade Lines<small>Designer Wallcoverings</small></div>
+    <div class="count" id="count">loading…</div>
+  </div>
+</header>
+
+<div class="controls">
+  <label class="grow">Search
+    <input type="search" id="q" placeholder="pattern, color, SKU, collection…" autocomplete="off">
+  </label>
+  <label>Sort
+    <select id="sort">
+      <option value="newest">Newest</option>
+      <option value="family">Color Family</option>
+      <option value="style">Style</option>
+      <option value="pattern">Pattern A→Z</option>
+      <option value="color_name">Color name A→Z</option>
+      <option value="collection">Collection A→Z</option>
+      <option value="line">Line</option>
+      <option value="product_type">Product Type</option>
+      <option value="material">Material</option>
+      <option value="light">Light → Dark</option>
+      <option value="dark">Dark → Light</option>
+      <option value="hue">Color Wheel (hue)</option>
+      <option value="sku">SKU A→Z</option>
+    </select>
+  </label>
+  <label class="density">Density
+    <input type="range" id="density" min="2" max="8" step="1" value="5">
+  </label>
+  <button class="cartbtn" id="cartbtn">Request Samples<span class="n" id="cartn">0</span></button>
+</div>
+
+<!-- active-filter chips -->
+<div class="activebar empty" id="activebar"></div>
+
+<div class="wrap">
+  <aside id="facets"></aside>
+  <main>
+    <div class="grid" id="grid"></div>
+    <div id="sentinel"></div>
+    <div class="status" id="status"></div>
+  </main>
+</div>
+
+<!-- sample request modal -->
+<div class="overlay" id="overlay">
+  <div class="modal">
+    <button class="closex" id="closex">&times;</button>
+    <h2>Request Samples</h2>
+    <p class="sub">No payment — we’ll mail trade samples of the items below.</p>
+    <div id="formArea">
+      <div class="cartlist" id="cartlist"></div>
+      <form id="reqform">
+        <div class="row2">
+          <div class="field"><label>Name *</label><input type="text" name="name" required></div>
+          <div class="field"><label>Email *</label><input type="email" name="email" required></div>
+        </div>
+        <div class="row2">
+          <div class="field"><label>Company / Studio</label><input type="text" name="company"></div>
+          <div class="field"><label>Phone</label><input type="text" name="phone"></div>
+        </div>
+        <div class="field"><label>Shipping address</label><textarea name="address" rows="2"></textarea></div>
+        <div class="field"><label>Notes</label><textarea name="notes" rows="2" placeholder="Optional"></textarea></div>
+        <button class="submit" id="submitbtn" type="submit">Submit sample request</button>
+      </form>
+    </div>
+    <div id="doneArea" style="display:none"></div>
+  </div>
+</div>
+
+<script>
+// per-vendor localStorage namespace (set after /api/config so two microsites don't collide)
+let NS = 'dwvm';
+const LS = {
+  get:(k,d)=>{try{const v=localStorage.getItem(NS+'.'+k);return v==null?d:JSON.parse(v);}catch{return d;}},
+  set:(k,v)=>{try{localStorage.setItem(NS+'.'+k,JSON.stringify(v));}catch{}}
+};
+const $ = (s)=>document.querySelector(s);
+const grid=$('#grid'), statusEl=$('#status'), countEl=$('#count');
+
+// approximate swatch color per family (for the chip dot)
+const FAMILY_SWATCH = {
+  'Red':'#c0392b','Orange/Brown':'#b5651d','Yellow':'#e1c340','Green':'#4a7c3f','Teal':'#2a9d8f',
+  'Blue':'#3a6ea5','Purple':'#7e57c2','Pink':'#e08aa8','Neutral/Beige':'#d8cbb3','Black':'#222',
+  'Grey':'#9a9a9a','White':'#f4f4f0'
+};
+// pretty labels for the active-chip key
+const FACET_LABEL = {family:'Color',style:'Style',material_bucket:'Material',enriched:'Status',line:'Line',product_type:'Type',collection:'Collection'};
+
+// ---- persisted UI state ----
+let sort, density, cart, active;
+let offset=0, total=0, loading=false, done=false;
+const LIMIT=60;
+
+function qs(){
+  const p=new URLSearchParams();
+  p.set('sort',sort); p.set('offset',offset); p.set('limit',LIMIT);
+  const q=$('#q').value.trim(); if(q) p.set('q',q);
+  for(const k of Object.keys(active)){ if(active[k] && active[k].length) p.set(k, active[k].join('|')); }
+  return p.toString();
+}
+function reset(){ offset=0; total=0; done=false; grid.innerHTML=''; statusEl.textContent=''; renderActive(); load(); }
+
+async function load(){
+  if(loading||done) return;
+  loading=true; statusEl.textContent='loading…';
+  try{
+    const r=await fetch('/api/skus?'+qs());
+    const d=await r.json();
+    total=d.total;
+    for(const row of d.rows) grid.appendChild(card(row));
+    offset += d.rows.length;
+    if(offset>=total || d.rows.length===0) done=true;
+    countEl.textContent = total.toLocaleString()+' of '+d.all.toLocaleString()+' products';
+    statusEl.textContent = done ? (total? 'End of results — '+total.toLocaleString()+' shown' : 'No products match your filters.') : '';
+  }catch(e){ statusEl.textContent='Error loading products.'; }
+  loading=false;
+}
+
+function inCart(sku){ return cart.some(c=>c.sku===sku); }
+function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c])); }
+
+// MINIMAL card: image + hex dot(s) only; everything else in hover/click reveal
+function card(row){
+  const el=document.createElement('div'); el.className='card'; el.tabIndex=0;
+  const img = row.image ? `<img loading="lazy" src="${row.image}" alt="${esc(row.pattern_name)}" onerror="this.style.opacity=.25">` : '';
+  let dots='';
+  if(row.color_hex) dots += `<span class="dot" style="background:${row.color_hex}" title="${row.color_hex}"></span>`;
+  if(!row.color_hex && row.family) dots += `<span class="dot" style="background:${FAMILY_SWATCH[row.family]||'#bbb'}" title="${esc(row.family)}"></span>`;
+  const lineBadge = row.line ? `<span class="badge">${esc(row.line)}</span>` : '';
+  el.innerHTML = `
+    <div class="imgwrap">
+      ${img}
+      <div class="dots">${dots}</div>
+      <div class="reveal">
+        ${lineBadge}
+        <div class="ptitle">${esc(row.pattern_name)}</div>
+        <div class="rmeta">${esc(row.color_name||'—')}${row.family?' · '+esc(row.family):''}</div>
+        ${row.collection?`<div class="rmeta">${esc(row.collection)}</div>`:''}
+        <button class="reqbtn ${inCart(row.sku)?'in':''}" data-sku="${esc(row.sku)}">${inCart(row.sku)?'✓ In sample request':'Request Sample'}</button>
+      </div>
+    </div>`;
+  // click anywhere on card (not the button) toggles the reveal open (touch/click reveal)
+  el.addEventListener('click',(e)=>{ if(e.target.closest('.reqbtn')) return; el.classList.toggle('open'); });
+  el.querySelector('.reqbtn').addEventListener('click',(e)=>{e.stopPropagation();toggleCart(row, e.currentTarget);});
+  return el;
+}
+
+// ---- cart ----
+function toggleCart(row, btn){
+  if(inCart(row.sku)){ cart=cart.filter(c=>c.sku!==row.sku); }
+  else cart.push({sku:row.sku,mfr_sku:row.mfr_sku,pattern_name:row.pattern_name,color_name:row.color_name,line:row.line,image:row.image});
+  LS.set('cart',cart);
+  if(btn){ btn.classList.toggle('in',inCart(row.sku)); btn.textContent=inCart(row.sku)?'✓ In sample request':'Request Sample'; }
+  $('#cartn').textContent=cart.length;
+}
+
+// ---- active-filter chip bar (removable) ----
+function renderActive(){
+  const bar=$('#activebar'); bar.innerHTML='';
+  let any=false;
+  for(const k of Object.keys(active)){
+    for(const v of (active[k]||[])){
+      any=true;
+      const c=document.createElement('span'); c.className='achip';
+      const label = k==='enriched' ? (v==='enriched'?'Enriched':'Unenriched') : v;
+      c.innerHTML=`<span class="k">${esc(FACET_LABEL[k]||k)}</span><span>${esc(label)}</span><button class="x" title="remove">&times;</button>`;
+      c.querySelector('.x').addEventListener('click',()=>{ active[k]=active[k].filter(x=>x!==v); if(!active[k].length) delete active[k]; LS.set('filters',active); loadFacets(); reset(); });
+      bar.appendChild(c);
+    }
+  }
+  if(any){
+    const clr=document.createElement('button'); clr.className='clearall'; clr.textContent='Clear all';
+    clr.addEventListener('click',()=>{active={};LS.set('filters',active);loadFacets();reset();});
+    bar.appendChild(clr);
+    bar.classList.remove('empty');
+  } else bar.classList.add('empty');
+}
+
+function toggleFacet(key,value){
+  active[key]=active[key]||[];
+  if(active[key].includes(value)) active[key]=active[key].filter(v=>v!==value);
+  else active[key].push(value);
+  if(!active[key].length) delete active[key];
+  LS.set('filters',active); loadFacets(); reset();
+}
+
+// ---- facets as CHIPS ----
+async function loadFacets(){
+  const r=await fetch('/api/facets'); const d=await r.json();
+  const f=d.facets;
+  const meta=[
+    ['family','Color Family',f.family,false,true],
+    ['style','Style',f.style,false,false],
+    ['material_bucket','Material',f.material_bucket,false,false],
+    ['enriched','Enrichment',f.enriched,false,false],
+    ['line','Line',f.line,false,false],
+    ['product_type','Product Type',f.product_type,false,false],
+    ['collection','Collection',f.collection,true,false],
+  ];
+  const root=$('#facets'); root.innerHTML='';
+  for(const [key,title,vals,searchable,swatch] of meta){
+    if(!vals || !vals.length) continue;
+    const h=document.createElement('h3'); h.textContent=title; root.appendChild(h);
+    let search=null;
+    if(searchable){
+      search=document.createElement('input'); search.type='text'; search.className='facet-search'; search.placeholder='Filter '+title.toLowerCase()+'…';
+      root.appendChild(search);
+    }
+    const box=document.createElement('div'); box.className=searchable?'chips facet-scroll':'chips';
+    for(const {value,count} of vals){
+      const on=(active[key]||[]).includes(value);
+      const chip=document.createElement('span');
+      chip.className='chip'+(on?' on':'')+(count===0&&!on?' zero':'');
+      chip.dataset.v=value.toLowerCase();
+      const label = key==='enriched' ? (value==='enriched'?'Enriched':'Unenriched') : value;
+      const sw = swatch ? `<span class="swatch" style="background:${FAMILY_SWATCH[value]||'#bbb'}"></span>` : '';
+      chip.innerHTML=`${sw}<span>${esc(label)}</span><span class="cc">${count}</span>`;
+      if(!(count===0&&!on)) chip.addEventListener('click',()=>toggleFacet(key,value));
+      box.appendChild(chip);
+    }
+    root.appendChild(box);
+    if(search) search.addEventListener('input',()=>{const t=search.value.toLowerCase();box.querySelectorAll('.chip').forEach(l=>l.style.display=l.dataset.v.includes(t)?'':'none');});
+  }
+  const clear=document.createElement('button'); clear.className='clearbtn'; clear.textContent='Clear all filters';
+  clear.addEventListener('click',()=>{active={};LS.set('filters',active);loadFacets();reset();});
+  root.appendChild(clear);
+}
+
+// ---- controls ----
+$('#sort').addEventListener('change',e=>{sort=e.target.value;LS.set('sort',sort);reset();});
+$('#density').addEventListener('input',e=>{density=+e.target.value;LS.set('density',density);document.documentElement.style.setProperty('--cols',density);});
+let qt; $('#q').addEventListener('input',()=>{clearTimeout(qt);qt=setTimeout(reset,250);});
+
+// ---- infinite scroll ----
+new IntersectionObserver((ents)=>{ if(ents[0].isIntersecting) load(); },{rootMargin:'600px'}).observe($('#sentinel'));
+
+// ---- sample modal ----
+const overlay=$('#overlay');
+function openCart(){
+  renderCartList();
+  $('#formArea').style.display = cart.length? '' : 'none';
+  $('#doneArea').style.display='none'; $('#doneArea').innerHTML='';
+  overlay.classList.add('open');
+}
+function closeCart(){ overlay.classList.remove('open'); }
+$('#cartbtn').addEventListener('click',openCart);
+$('#closex').addEventListener('click',closeCart);
+overlay.addEventListener('click',e=>{if(e.target===overlay)closeCart();});
+
+function renderCartList(){
+  const list=$('#cartlist');
+  if(!cart.length){ list.innerHTML='<div class="status">No items yet. Click “Request Sample” on a product.</div>'; return; }
+  list.innerHTML='';
+  cart.forEach(it=>{
+    const row=document.createElement('div'); row.className='citem';
+    row.innerHTML=`${it.image?`<img src="${it.image}">`:''}
+      <div><strong>${esc(it.pattern_name||it.sku)}</strong><br><span style="color:#6f6a62">${esc(it.color_name||'')} ${it.line?'· '+esc(it.line):''}</span></div>
+      <button class="x" title="remove">&times;</button>`;
+    row.querySelector('.x').addEventListener('click',()=>{cart=cart.filter(c=>c.sku!==it.sku);LS.set('cart',cart);$('#cartn').textContent=cart.length;document.querySelectorAll('.reqbtn').forEach(b=>{if(b.dataset.sku===it.sku){b.classList.remove('in');b.textContent='Request Sample';}});openCart();});
+    list.appendChild(row);
+  });
+}
+
+$('#reqform').addEventListener('submit',async e=>{
+  e.preventDefault();
+  if(!cart.length) return;
+  const fd=new FormData(e.target);
+  const payload={items:cart};
+  for(const [k,v] of fd.entries()) payload[k]=v;
+  const btn=$('#submitbtn'); btn.disabled=true; btn.textContent='Submitting…';
+  // Shopify checkout path (real sample order) when wired; else no-payment request below.
+  if(window.DWV_SAMPLE && window.DWV_SAMPLE.available()){
+    try{ btn.textContent='Opening secure checkout…'; await window.DWV_SAMPLE.checkout(cart,{name:payload.name,email:payload.email}); return; }
+    catch(err){ /* fall through to the no-payment request flow */ }
+  }
+  try{
+    const r=await fetch('/api/sample-request',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)});
+    const d=await r.json();
+    if(d.ok){
+      cart=[]; LS.set('cart',cart); $('#cartn').textContent=0;
+      document.querySelectorAll('.reqbtn.in').forEach(b=>{b.classList.remove('in');b.textContent='Request Sample';});
+      $('#formArea').style.display='none';
+      $('#doneArea').style.display='';
+      $('#doneArea').innerHTML=`<div class="ok">Thank you, ${esc(payload.name)} — your request for ${d.count} sample${d.count===1?'':'s'} was received. We’ll be in touch at ${esc(payload.email)}.</div>`;
+    } else { btn.disabled=false; btn.textContent='Submit sample request'; alert(d.error||'Could not submit.'); }
+  }catch(err){ btn.disabled=false; btn.textContent='Submit sample request'; alert('Network error.'); }
+});
+
+// ---- boot: read /api/config for title + per-vendor namespace, then hydrate state ----
+(async function boot(){
+  try{
+    const cfg=await (await fetch('/api/config')).json();
+    if(cfg.title){
+      document.title = cfg.title;
+      $('#brand').innerHTML = esc(cfg.title)+'<small>Designer Wallcoverings</small>';
+      NS = 'dwvm.'+cfg.title.replace(/[^a-z0-9]+/gi,'_').toLowerCase();
+    }
+    window.DWV_CFG = cfg.shopify || {};
+    if(window.DWV_CFG.storefrontToken && window.DWV_CFG.sampleVariantId){
+      await new Promise(res=>{const s=document.createElement('script');s.src='/buybutton.js';s.onload=res;s.onerror=res;document.head.appendChild(s);});
+    }
+  }catch{}
+  sort = LS.get('sort','newest');
+  density = LS.get('density',5);
+  cart = LS.get('cart',[]);
+  active = LS.get('filters',{});
+  $('#sort').value=sort;
+  $('#density').value=density;
+  document.documentElement.style.setProperty('--cols',density);
+  $('#cartn').textContent=cart.length;
+  renderActive();
+  loadFacets();
+  load();
+})();
+</script>
+</body>
+</html>
diff --git a/vendors/arteriors/viewer/server.js b/vendors/arteriors/viewer/server.js
new file mode 100644
index 0000000..9904dbf
--- /dev/null
+++ b/vendors/arteriors/viewer/server.js
@@ -0,0 +1,417 @@
+#!/usr/bin/env node
+/**
+ * DW Vendor Microsite — generalized catalog viewer (LOCAL, read-only browse + sample-order).
+ *
+ * Generalized from ~/Projects/cowtan-lines/viewer/server.js. The engine is
+ * vendor-agnostic: buildRows / sorters / facets / the /api/sample-request flow are
+ * uniform across every vendor's catalog schema (the staging JSONL is already
+ * normalized to the canonical cowtan shape by lib/export-catalog.sh).
+ *
+ * What is vendor-specific (read from argv / env / fieldmap.json):
+ *   - JSONL source path   : argv[3] || env VENDOR_JSONL || ../staging/cowtan.jsonl
+ *   - banner / page title : env VENDOR_TITLE || fieldmap.title || 'Vendor Trade Lines'
+ *   - samples-only policy  : fieldmap.samples_only (no prices/checkout when true)
+ *
+ * These lines are intentionally OFF Shopify — the ONLY purchase action is a no-payment
+ * sample request. No prices are sold, no Shopify links, no checkout.
+ *
+ * Zero dependencies. Images are live vendor CDN URLs, used as-is (never upscaled).
+ *   node server.js [port] [jsonl] [fieldmap]
+ *     port      default 0 = OS-assigned free port
+ *     jsonl     default env VENDOR_JSONL || ../staging/cowtan.jsonl
+ *     fieldmap  default env VENDOR_FIELDMAP || ./fieldmap.json (optional)
+ */
+const http = require('http');
+const fs = require('fs');
+const path = require('path');
+
+const PORT = parseInt(process.argv[2] || '0', 10);
+const DIR = path.join(__dirname, '..', '..', '..', 'staging'); // repo/vendors/<v>/viewer -> repo/staging
+const SRC = process.argv[3] || process.env.VENDOR_JSONL || path.join(__dirname, '..', 'staging', 'cowtan.jsonl');
+const FIELDMAP_PATH = process.argv[4] || process.env.VENDOR_FIELDMAP || path.join(__dirname, 'fieldmap.json');
+const PUBLIC = path.join(__dirname, 'public');
+const DATA = path.join(__dirname, 'data');
+const REQUESTS = path.join(DATA, 'sample-requests.jsonl');
+
+let FIELDMAP = {};
+try { if (fs.existsSync(FIELDMAP_PATH)) FIELDMAP = JSON.parse(fs.readFileSync(FIELDMAP_PATH, 'utf8')); } catch { FIELDMAP = {}; }
+const TITLE = process.env.VENDOR_TITLE || FIELDMAP.title || 'Vendor Trade Lines';
+const SAMPLES_ONLY = FIELDMAP.samples_only !== false; // default true (samples-only / no checkout)
+
+const readJsonl = (f) => (fs.existsSync(f)
+  ? fs.readFileSync(f, 'utf8').trim().split('\n').filter(Boolean).map((l) => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean)
+  : []);
+
+const num = (v) => { if (v == null) return null; const m = String(v).match(/[\d.]+/); return m ? parseFloat(m[0]) : null; };
+
+// perceived luminance 0..255 from #rrggbb
+function lum(hex) {
+  if (!hex || hex[0] !== '#' || hex.length !== 7) return null;
+  const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
+  return 0.2126 * r + 0.7152 * g + 0.0722 * b;
+}
+// hue 0..360 from #rrggbb (for color-wheel sort)
+function hue(hex) {
+  if (!hex || hex[0] !== '#' || hex.length !== 7) return null;
+  let r = parseInt(hex.slice(1, 3), 16) / 255, g = parseInt(hex.slice(3, 5), 16) / 255, b = parseInt(hex.slice(5, 7), 16) / 255;
+  const mx = Math.max(r, g, b), mn = Math.min(r, g, b), d = mx - mn;
+  if (d === 0) return -1; // grayscale -> sort to end
+  let h;
+  if (mx === r) h = ((g - b) / d) % 6;
+  else if (mx === g) h = (b - r) / d + 2;
+  else h = (r - g) / d + 4;
+  h *= 60; if (h < 0) h += 360;
+  return h;
+}
+
+// ---- ENHANCED bucketing (Steve's spec) ------------------------------------
+// Full HSL from #rrggbb -> {h:0..360, s:0..1, l:0..1} or null.
+function hsl(hex) {
+  if (!hex || hex[0] !== '#' || hex.length !== 7) return null;
+  let r = parseInt(hex.slice(1, 3), 16) / 255, g = parseInt(hex.slice(3, 5), 16) / 255, b = parseInt(hex.slice(5, 7), 16) / 255;
+  if ([r, g, b].some((v) => Number.isNaN(v))) return null;
+  const mx = Math.max(r, g, b), mn = Math.min(r, g, b), d = mx - mn;
+  const l = (mx + mn) / 2;
+  let s = 0, h = 0;
+  if (d !== 0) {
+    s = l > 0.5 ? d / (2 - mx - mn) : d / (mx + mn);
+    if (mx === r) h = ((g - b) / d) % 6;
+    else if (mx === g) h = (b - r) / d + 2;
+    else h = (r - g) / d + 4;
+    h *= 60; if (h < 0) h += 360;
+  }
+  return { h, s, l };
+}
+
+// Canonical color families (order = display order; 0-count still listed by facets()).
+const COLOR_FAMILIES = ['Red', 'Orange/Brown', 'Yellow', 'Green', 'Teal', 'Blue', 'Purple', 'Pink', 'Neutral/Beige', 'Black', 'Grey', 'White'];
+// ai_colors hint words -> family (fallback when hex absent/ambiguous).
+const AI_COLOR_TO_FAMILY = {
+  red: 'Red', crimson: 'Red', scarlet: 'Red', burgundy: 'Red', maroon: 'Red', wine: 'Red',
+  orange: 'Orange/Brown', terracotta: 'Orange/Brown', rust: 'Orange/Brown', brown: 'Orange/Brown', tan: 'Orange/Brown', camel: 'Orange/Brown', copper: 'Orange/Brown', bronze: 'Orange/Brown', amber: 'Orange/Brown', coffee: 'Orange/Brown', chocolate: 'Orange/Brown',
+  yellow: 'Yellow', gold: 'Yellow', mustard: 'Yellow', ochre: 'Yellow',
+  green: 'Green', olive: 'Green', sage: 'Green', lime: 'Green', emerald: 'Green', forest: 'Green', moss: 'Green',
+  teal: 'Teal', turquoise: 'Teal', aqua: 'Teal', cyan: 'Teal',
+  blue: 'Blue', navy: 'Blue', indigo: 'Blue', cobalt: 'Blue', azure: 'Blue', denim: 'Blue',
+  purple: 'Purple', violet: 'Purple', lavender: 'Purple', plum: 'Purple', mauve: 'Purple', lilac: 'Purple',
+  pink: 'Pink', rose: 'Pink', blush: 'Pink', fuchsia: 'Pink', magenta: 'Pink', coral: 'Pink', salmon: 'Pink',
+  beige: 'Neutral/Beige', cream: 'Neutral/Beige', ivory: 'Neutral/Beige', taupe: 'Neutral/Beige', sand: 'Neutral/Beige', linen: 'Neutral/Beige', natural: 'Neutral/Beige', oatmeal: 'Neutral/Beige', greige: 'Neutral/Beige', stone: 'Neutral/Beige',
+  black: 'Black', charcoal: 'Black', ebony: 'Black', onyx: 'Black',
+  grey: 'Grey', gray: 'Grey', silver: 'Grey', slate: 'Grey', pewter: 'Grey', smoke: 'Grey',
+  white: 'White', chalk: 'White', alabaster: 'White', snow: 'White',
+};
+// hue-degrees -> chromatic family bucket.
+function familyFromHue(h) {
+  if (h < 15 || h >= 345) return 'Red';
+  if (h < 45) return 'Orange/Brown';
+  if (h < 70) return 'Yellow';
+  if (h < 160) return 'Green';
+  if (h < 195) return 'Teal';
+  if (h < 255) return 'Blue';
+  if (h < 290) return 'Purple';
+  if (h < 345) return 'Pink';
+  return 'Red';
+}
+// Derive the color family for a row. hex first (HSL), ai_colors as fallback hint.
+function colorFamily(hex, aiColors) {
+  const c = hsl(hex);
+  if (c) {
+    // low-saturation -> achromatic by luminance
+    if (c.s < 0.12) {
+      if (c.l < 0.18) return 'Black';
+      if (c.l > 0.88) return 'White';
+      if (c.l > 0.70) return 'Neutral/Beige';
+      return 'Grey';
+    }
+    // low-ish sat + warm hue + mid/high lum -> beige rather than a vivid family
+    if (c.s < 0.22 && c.l > 0.62 && (c.h < 70 || c.h >= 330)) return 'Neutral/Beige';
+    return familyFromHue(c.h);
+  }
+  // hex missing/invalid -> ai_colors hint (first matchable word)
+  if (Array.isArray(aiColors)) {
+    for (const w of aiColors) {
+      const key = String(w || '').trim().toLowerCase();
+      if (AI_COLOR_TO_FAMILY[key]) return AI_COLOR_TO_FAMILY[key];
+      // partial: "dark green" -> green
+      for (const word of key.split(/[^a-z]+/)) if (AI_COLOR_TO_FAMILY[word]) return AI_COLOR_TO_FAMILY[word];
+    }
+  }
+  return null;
+}
+
+// Canonical styles (display order). Derived from ai_styles + ai_patterns keywords.
+const STYLE_BUCKETS = ['Floral', 'Botanical', 'Damask', 'Toile', 'Stripe', 'Geometric', 'Plaid/Check', 'Trellis', 'Animal/Fauna', 'Scenic/Mural', 'Abstract', 'Texture/Plain', 'Metallic', 'Traditional', 'Modern'];
+const STYLE_KEYWORDS = [
+  ['Floral', ['floral', 'flower', 'rose', 'peony', 'bloom', 'blossom', 'chintz']],
+  ['Botanical', ['botanical', 'leaf', 'leaves', 'fern', 'palm', 'foliage', 'tree', 'vine', 'garden', 'jungle', 'tropical']],
+  ['Damask', ['damask', 'medallion', 'ogee']],
+  ['Toile', ['toile']],
+  ['Stripe', ['stripe', 'striped', 'pinstripe', 'ticking']],
+  ['Plaid/Check', ['plaid', 'check', 'tartan', 'gingham', 'houndstooth', 'windowpane']],
+  ['Trellis', ['trellis', 'lattice', 'fretwork']],
+  ['Geometric', ['geometric', 'chevron', 'herringbone', 'diamond', 'hexagon', 'grid', 'dot', 'polka', 'moroccan', 'fret', 'greek key', 'op art']],
+  ['Animal/Fauna', ['animal', 'bird', 'butterfly', 'fauna', 'leopard', 'zebra', 'tiger', 'peacock', 'fish', 'insect', 'skin', 'hide']],
+  ['Scenic/Mural', ['scenic', 'mural', 'landscape', 'panoramic', 'chinoiserie', 'view', 'cityscape', 'map']],
+  ['Metallic', ['metallic', 'foil', 'mica', 'gilt', 'gilded', 'shimmer', 'glitter']],
+  ['Texture/Plain', ['texture', 'textured', 'plain', 'solid', 'grasscloth', 'linen', 'woven', 'weave', 'sisal', 'cork', 'faux', 'concrete', 'stucco', 'plaster', 'leather', 'suede', 'tweed']],
+  ['Abstract', ['abstract', 'organic', 'watercolor', 'marble', 'painterly', 'brushstroke', 'ombre', 'tie dye', 'splatter']],
+  ['Traditional', ['traditional', 'classic', 'heritage', 'colonial', 'victorian']],
+  ['Modern', ['modern', 'contemporary', 'minimal', 'mid-century', 'midcentury', 'scandinavian']],
+];
+// First matching style bucket from the row's ai_styles + ai_patterns words.
+function styleBucket(aiStyles, aiPatterns) {
+  const words = [];
+  for (const arr of [aiStyles, aiPatterns]) if (Array.isArray(arr)) for (const w of arr) words.push(String(w || '').toLowerCase());
+  const blob = ' ' + words.join(' ') + ' ';
+  for (const [bucket, kws] of STYLE_KEYWORDS) for (const kw of kws) if (blob.includes(kw)) return bucket;
+  return null;
+}
+
+// Material buckets from material / product_type strings.
+const MATERIAL_BUCKETS = ['Non-woven', 'Paper', 'Vinyl', 'Grasscloth', 'Fabric/Textile', 'Cork', 'Mylar/Metallic', 'Leather/Suede', 'Mural', 'Other'];
+const MATERIAL_KEYWORDS = [
+  ['Non-woven', ['non-woven', 'nonwoven', 'non woven']],
+  ['Grasscloth', ['grasscloth', 'grass cloth', 'sisal', 'jute', 'hemp', 'raffia', 'arrowroot', 'seagrass']],
+  ['Vinyl', ['vinyl', 'pvc', 'type ii', 'type 2', 'commercial']],
+  ['Cork', ['cork']],
+  ['Mylar/Metallic', ['mylar', 'metallic', 'foil', 'mica']],
+  ['Leather/Suede', ['leather', 'suede', 'ultrasuede', 'hide']],
+  ['Mural', ['mural', 'panel', 'panoramic']],
+  ['Fabric/Textile', ['fabric', 'textile', 'linen', 'silk', 'cotton', 'wool', 'velvet', 'woven', 'weave']],
+  ['Paper', ['paper', 'wallpaper', 'wallcovering', 'pulp']],
+];
+function materialBucket(material, ptype) {
+  const blob = ' ' + (String(material || '') + ' ' + String(ptype || '')).toLowerCase() + ' ';
+  if (blob.trim() === '') return null;
+  for (const [bucket, kws] of MATERIAL_KEYWORDS) for (const kw of kws) if (blob.includes(kw)) return bucket;
+  return null;
+}
+
+function buildRows() {
+  const rows = [];
+  let i = 0;
+  for (const r of readJsonl(SRC)) {
+    let images = [];
+    if (Array.isArray(r.all_images)) images = r.all_images;
+    else if (typeof r.all_images === 'string' && r.all_images.trim()) { try { images = JSON.parse(r.all_images); } catch { images = []; } }
+    if (!images.length && r.image_url) images = [r.image_url];
+    const ptype = (r.product_type || '').replace(/^./, (c) => c.toUpperCase()); // normalize casing
+    const parseArr = (v) => Array.isArray(v) ? v : (typeof v === 'string' && v.trim() ? (() => { try { return JSON.parse(v); } catch { return []; } })() : []);
+    const aiColors = parseArr(r.ai_colors), aiStyles = parseArr(r.ai_styles), aiPatterns = parseArr(r.ai_patterns);
+    const enriched = (aiColors.length > 0 || aiStyles.length > 0); // ai_colors OR ai_styles non-empty
+    rows.push({
+      idx: i++,
+      sku: r.dw_sku || r.mfr_sku || String(i),
+      mfr_sku: r.mfr_sku || null,
+      pattern_name: r.pattern_name || r.mfr_sku || '(untitled)',
+      color_name: r.color_name || null,
+      collection: r.collection || null,
+      product_type: ptype || null,
+      material: r.material || null,
+      width: r.width || null,
+      repeat_v: r.repeat_v || null,
+      repeat_h: r.repeat_h || null,
+      color_primary: r.color_primary || null,
+      color_hex: r.color_hex || null,
+      ai_colors: aiColors,
+      ai_styles: aiStyles,
+      ai_patterns: aiPatterns,
+      repeat_classification: r.repeat_classification || null,
+      finish: r.finish || null,
+      application: r.application || null,
+      coverage: r.coverage || null,
+      fire_rating: r.fire_rating || null,
+      line: r.line || r.material || null,
+      image: r.image_url || images[0] || null,
+      images,
+      image_count: images.length,
+      // ENHANCED buckets (server-side)
+      family: colorFamily(r.color_hex, aiColors),
+      style: styleBucket(aiStyles, aiPatterns),
+      material_bucket: materialBucket(r.material, ptype),
+      enriched,
+      _lum: lum(r.color_hex),
+      _hue: hue(r.color_hex),
+    });
+  }
+  return rows;
+}
+
+let ROWS = buildRows();
+fs.watchFile(SRC, { interval: 5000 }, () => { ROWS = buildRows(); });
+
+const cmpStr = (a, b) => String(a == null ? '' : a).localeCompare(String(b == null ? '' : b), undefined, { sensitivity: 'base' });
+const nullsLast = (v) => (v == null ? Infinity : v);
+
+const sorters = {
+  newest: null, // natural staged order
+  pattern: (a, b) => cmpStr(a.pattern_name, b.pattern_name),
+  color_name: (a, b) => cmpStr(a.color_name, b.color_name),
+  collection: (a, b) => cmpStr(a.collection, b.collection) || cmpStr(a.pattern_name, b.pattern_name),
+  line: (a, b) => cmpStr(a.line, b.line) || cmpStr(a.pattern_name, b.pattern_name),
+  product_type: (a, b) => cmpStr(a.product_type, b.product_type) || cmpStr(a.pattern_name, b.pattern_name),
+  material: (a, b) => cmpStr(a.material, b.material) || cmpStr(a.pattern_name, b.pattern_name),
+  // light -> dark: brightest first; missing-hex always sort last
+  light: (a, b) => { const la = a._lum == null ? -1 : a._lum, lb = b._lum == null ? -1 : b._lum; return lb - la; },
+  // dark -> light: darkest first; missing-hex always sort last
+  dark: (a, b) => { const la = a._lum == null ? 999 : a._lum, lb = b._lum == null ? 999 : b._lum; return la - lb; },
+  hue: (a, b) => {
+    // grayscale (-1) and null sort to the very end
+    const ha = a._hue == null || a._hue < 0 ? 9999 : a._hue;
+    const hb = b._hue == null || b._hue < 0 ? 9999 : b._hue;
+    return ha - hb;
+  },
+  sku: (a, b) => cmpStr(a.mfr_sku || a.sku, b.mfr_sku || b.sku),
+  // group by canonical color family (display order), nulls last, then by hue within
+  family: (a, b) => {
+    const ia = a.family == null ? 999 : COLOR_FAMILIES.indexOf(a.family);
+    const ib = b.family == null ? 999 : COLOR_FAMILIES.indexOf(b.family);
+    if (ia !== ib) return ia - ib;
+    const ha = a._hue == null || a._hue < 0 ? 9999 : a._hue, hb = b._hue == null || b._hue < 0 ? 9999 : b._hue;
+    return ha - hb;
+  },
+  // group by canonical style (display order), nulls last, then pattern name
+  style: (a, b) => {
+    const ia = a.style == null ? 999 : STYLE_BUCKETS.indexOf(a.style);
+    const ib = b.style == null ? 999 : STYLE_BUCKETS.indexOf(b.style);
+    return ia - ib || cmpStr(a.pattern_name, b.pattern_name);
+  },
+};
+
+function facets() {
+  // ENHANCED facets: color-family / style / material (bucketed) REPLACE raw color_primary
+  // as the color facet. Plus enriched, line, product_type, collection.
+  const fam = {}, sty = {}, mat = {};
+  const f = { line: {}, product_type: {}, collection: {} };
+  let enrichedN = 0, unenrichedN = 0;
+  for (const r of ROWS) {
+    const bump = (o, v) => { if (v == null || v === '') return; o[v] = (o[v] || 0) + 1; };
+    bump(fam, r.family);
+    bump(sty, r.style);
+    bump(mat, r.material_bucket);
+    bump(f.line, r.line);
+    bump(f.product_type, r.product_type);
+    bump(f.collection, r.collection);
+    if (r.enriched) enrichedN++; else unenrichedN++;
+  }
+  // canonical-ordered facets: every value listed even at count 0 (UI greys 0s)
+  const ordered = (canon, counts) => canon.map((value) => ({ value, count: counts[value] || 0 }));
+  // count-desc for free-form facets; collection alpha (searchable)
+  const byCount = (counts) => Object.entries(counts).sort((a, b) => b[1] - a[1]).map(([value, count]) => ({ value, count }));
+  const byAlpha = (counts) => Object.entries(counts).sort((a, b) => a[0].localeCompare(b[0])).map(([value, count]) => ({ value, count }));
+  return {
+    family: ordered(COLOR_FAMILIES, fam),
+    style: ordered(STYLE_BUCKETS, sty),
+    material_bucket: ordered(MATERIAL_BUCKETS, mat),
+    enriched: [
+      { value: 'enriched', count: enrichedN },
+      { value: 'unenriched', count: unenrichedN },
+    ],
+    line: byCount(f.line),
+    product_type: byCount(f.product_type),
+    collection: byAlpha(f.collection),
+  };
+}
+
+const json = (res, code, obj) => { res.writeHead(code, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(obj)); };
+
+const server = http.createServer((req, res) => {
+  const u = new URL(req.url, 'http://localhost');
+
+  if (u.pathname === '/api/config') {
+    return json(res, 200, { title: TITLE, samples_only: SAMPLES_ONLY, total: ROWS.length,
+      shopify: {
+        domain: process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com',
+        storefrontToken: process.env.SHOPIFY_STOREFRONT_TOKEN || '',
+        sampleVariantId: process.env.SHOPIFY_SAMPLE_VARIANT_ID || ''
+      } });
+  }
+
+  if (u.pathname === '/api/facets') {
+    return json(res, 200, { total: ROWS.length, facets: facets() });
+  }
+
+  if (u.pathname === '/api/skus') {
+    const q = (u.searchParams.get('q') || '').trim().toLowerCase();
+    const sort = u.searchParams.get('sort') || 'newest';
+    const offset = parseInt(u.searchParams.get('offset') || '0', 10);
+    const limit = Math.min(parseInt(u.searchParams.get('limit') || '60', 10), 200);
+    // multi-select facets: pipe-separated ('|'). Buckets + free-form + enriched.
+    const sel = (k) => { const v = u.searchParams.get(k); return v ? v.split('|').filter(Boolean) : []; };
+    const fFam = sel('family'), fStyle = sel('style'), fMat = sel('material_bucket');
+    const fEnr = sel('enriched'); // 'enriched' | 'unenriched' (multi tolerated -> OR)
+    const fLine = sel('line'), fType = sel('product_type'), fColl = sel('collection');
+
+    let rows = ROWS;
+    const inAny = (arr, val) => arr.length === 0 || arr.includes(val == null ? '' : val);
+    const enrMatch = (r) => {
+      if (!fEnr.length) return true;
+      const wantE = fEnr.includes('enriched'), wantU = fEnr.includes('unenriched');
+      return (wantE && r.enriched) || (wantU && !r.enriched);
+    };
+    rows = rows.filter((r) =>
+      inAny(fFam, r.family) && inAny(fStyle, r.style) && inAny(fMat, r.material_bucket) &&
+      inAny(fLine, r.line) && inAny(fType, r.product_type) && inAny(fColl, r.collection) && enrMatch(r));
+    if (q) {
+      rows = rows.filter((r) => (
+        (r.pattern_name || '') + ' ' + (r.color_name || '') + ' ' + (r.mfr_sku || '') + ' ' +
+        (r.sku || '') + ' ' + (r.collection || '')).toLowerCase().includes(q));
+    }
+    if (sorters[sort]) rows = [...rows].sort(sorters[sort]);
+    const page = rows.slice(offset, offset + limit);
+    return json(res, 200, { total: rows.length, all: ROWS.length, offset, limit, rows: page });
+  }
+
+  if (u.pathname === '/api/sample-request' && req.method === 'POST') {
+    let body = '';
+    req.on('data', (c) => { body += c; if (body.length > 1e6) req.destroy(); });
+    req.on('end', () => {
+      let p; try { p = JSON.parse(body || '{}'); } catch { return json(res, 400, { ok: false, error: 'bad json' }); }
+      const name = (p.name || '').toString().trim();
+      const email = (p.email || '').toString().trim();
+      const items = Array.isArray(p.items) ? p.items.slice(0, 200) : [];
+      if (!name || !email || !/.+@.+\..+/.test(email) || !items.length) {
+        return json(res, 400, { ok: false, error: 'name, valid email, and at least one item are required' });
+      }
+      const rec = {
+        ts: new Date().toISOString(),
+        vendor: TITLE,
+        name, email,
+        company: (p.company || '').toString().trim() || null,
+        phone: (p.phone || '').toString().trim() || null,
+        address: (p.address || '').toString().trim() || null,
+        notes: (p.notes || '').toString().trim() || null,
+        items: items.map((it) => ({
+          sku: (it.sku || '').toString(),
+          mfr_sku: (it.mfr_sku || '').toString() || null,
+          pattern_name: (it.pattern_name || '').toString() || null,
+          color_name: (it.color_name || '').toString() || null,
+          line: (it.line || '').toString() || null,
+        })),
+        ua: (req.headers['user-agent'] || '').slice(0, 200),
+      };
+      try {
+        fs.mkdirSync(DATA, { recursive: true });
+        fs.appendFileSync(REQUESTS, JSON.stringify(rec) + '\n');
+      } catch (e) {
+        return json(res, 500, { ok: false, error: 'could not save request' });
+      }
+      return json(res, 200, { ok: true, count: rec.items.length });
+    });
+    return;
+  }
+
+  // static
+  let pth = u.pathname === '/' ? '/index.html' : u.pathname;
+  const file = path.join(PUBLIC, path.normalize(pth).replace(/^(\.\.[/\\])+/, ''));
+  if (!file.startsWith(PUBLIC) || !fs.existsSync(file) || fs.statSync(file).isDirectory()) { res.writeHead(404); return res.end('not found'); }
+  const ext = path.extname(file);
+  const mime = { '.html': 'text/html; charset=utf-8', '.js': 'text/javascript', '.css': 'text/css', '.svg': 'image/svg+xml', '.png': 'image/png', '.jpg': 'image/jpeg', '.ico': 'image/x-icon' }[ext] || 'text/plain';
+  res.writeHead(200, { 'Content-Type': mime });
+  res.end(fs.readFileSync(file));
+});
+
+server.listen(PORT, () => {
+  const addr = server.address();
+  console.log(`${TITLE} viewer -> http://localhost:${addr.port}  (${ROWS.length} products${SAMPLES_ONLY ? ', samples-only' : ''})`);
+});
diff --git a/vendors/york_contract/viewer/fieldmap.json b/vendors/york_contract/viewer/fieldmap.json
new file mode 100644
index 0000000..d0f868a
--- /dev/null
+++ b/vendors/york_contract/viewer/fieldmap.json
@@ -0,0 +1,6 @@
+{
+  "title": "York Contract",
+  "samples_only": true,
+  "vendor_code": "york_contract",
+  "subdomain": "york-contract"
+}
diff --git a/vendors/york_contract/viewer/public/buybutton.js b/vendors/york_contract/viewer/public/buybutton.js
new file mode 100644
index 0000000..f479e9a
--- /dev/null
+++ b/vendors/york_contract/viewer/public/buybutton.js
@@ -0,0 +1,70 @@
+/* Shopify sample checkout for the DW vendor microsites.
+ *
+ * These vendor lines are OFF Shopify (no per-product Shopify variant), so "Request
+ * Sample" cannot add a per-product variant. Instead it uses ONE generic "Memo Sample"
+ * Shopify product/variant and adds it to a real Shopify cart once per requested swatch,
+ * carrying each swatch's pattern/color/SKU/vendor as line-item custom properties, then
+ * opens Shopify's secure hosted checkout. The order line-items tell fulfillment which
+ * swatches to pull.
+ *
+ * Config is injected by the server at /config.js as window.DWV_CFG = {
+ *   domain: '<store>.myshopify.com', storefrontToken: '<token>', sampleVariantId: '<gid or numeric>'
+ * }. Until storefrontToken + sampleVariantId are set, this falls back to the no-payment
+ * JSONL sample-request endpoint (POST /api/sample-request) so the button always works.
+ */
+(function () {
+  var CFG = window.DWV_CFG || {};
+  var ready = CFG.storefrontToken && CFG.sampleVariantId && CFG.domain;
+  var client = null, checkoutId = null;
+
+  function loadSDK(cb) {
+    if (window.ShopifyBuy && window.ShopifyBuy.buildClient) return cb();
+    var s = document.createElement('script');
+    s.src = 'https://sdks.shopifycdn.com/js-buy-sdk/latest/index.umd.min.js';
+    s.onload = cb; s.onerror = function () { ready = false; cb(); };
+    document.head.appendChild(s);
+  }
+
+  function ensureClient(cb) {
+    if (client) return cb();
+    loadSDK(function () {
+      if (!window.ShopifyBuy || !ready) { ready = false; return cb(); }
+      client = window.ShopifyBuy.buildClient({ domain: CFG.domain, storefrontAccessToken: CFG.storefrontToken });
+      client.checkout.create().then(function (co) { checkoutId = co.id; cb(); }).catch(function () { ready = false; cb(); });
+    });
+  }
+
+  // items: [{sku, mfr_sku, pattern_name, color_name, line}]  -> Shopify checkout
+  function shopifyCheckout(items, contact) {
+    return new Promise(function (resolve, reject) {
+      ensureClient(function () {
+        if (!ready || !client || !checkoutId) return reject(new Error('shopify-unavailable'));
+        var lines = items.slice(0, 250).map(function (it) {
+          return {
+            variantId: CFG.sampleVariantId,
+            quantity: 1,
+            customAttributes: [
+              { key: 'Pattern', value: String(it.pattern_name || it.sku || '') },
+              { key: 'Color', value: String(it.color_name || '') },
+              { key: 'SKU', value: String(it.mfr_sku || it.sku || '') },
+              { key: 'Line', value: String(it.line || '') }
+            ]
+          };
+        });
+        var attrs = [];
+        if (contact && contact.name) attrs.push({ key: 'Requested by', value: contact.name });
+        var p = client.checkout.addLineItems(checkoutId, lines);
+        p.then(function (co) {
+          if (attrs.length) return client.checkout.updateAttributes(checkoutId, { customAttributes: attrs }).then(function () { return co; });
+          return co;
+        }).then(function (co) { window.location.href = co.webUrl; resolve(co); }).catch(reject);
+      });
+    });
+  }
+
+  // Expose for the viewer's sample modal. Returns true if Shopify path is wired.
+  window.DWV_SAMPLE = {
+    available: function () { return !!ready; },
+    checkout: shopifyCheckout
+  };
+})();
diff --git a/vendors/york_contract/viewer/public/index.html b/vendors/york_contract/viewer/public/index.html
new file mode 100644
index 0000000..ce0d82b
--- /dev/null
+++ b/vendors/york_contract/viewer/public/index.html
@@ -0,0 +1,414 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="robots" content="noindex, nofollow">
+<title>Trade Lines</title>
+<style>
+  :root{
+    --cols: 5;            /* density-driven grid columns */
+    --ink:#1c1a17; --muted:#6f6a62; --line:#e7e2da; --bg:#faf8f4; --card:#fff;
+    --accent:#7a6a52; --accent2:#3c5a4a;
+  }
+  *{box-sizing:border-box}
+  html,body{margin:0}
+  body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg)}
+  a{color:inherit}
+  header.top{padding:22px 24px 12px;border-bottom:1px solid var(--line);background:#fff;position:sticky;top:0;z-index:30}
+  .brand{font-size:24px;letter-spacing:.04em;font-weight:600}
+  .brand small{display:block;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:500;margin-top:3px}
+  .count{color:var(--muted);font-size:13px;margin-left:auto}
+  .toprow{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap}
+  /* controls bar */
+  .controls{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding:12px 24px;border-bottom:1px solid var(--line);background:#fff;position:sticky;top:73px;z-index:20}
+  .controls label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);display:flex;flex-direction:column;gap:4px}
+  select,input[type=search],input[type=text],input[type=email],textarea{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink)}
+  input[type=range]{width:120px}
+  .grow{flex:1;min-width:180px}
+  .density{display:flex;flex-direction:column;gap:4px}
+  .cartbtn{margin-left:auto;background:var(--ink);color:#fff;border:none;border-radius:8px;padding:9px 16px;font-weight:600;cursor:pointer;letter-spacing:.02em}
+  .cartbtn .n{display:inline-block;background:var(--accent2);border-radius:20px;padding:1px 8px;margin-left:6px;font-size:12px}
+  /* active-filter chips bar */
+  .activebar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px 24px;border-bottom:1px solid var(--line);background:#fcfbf8}
+  .activebar.empty{display:none}
+  .achip{display:inline-flex;align-items:center;gap:6px;background:var(--ink);color:#fff;border-radius:20px;padding:4px 6px 4px 11px;font-size:12.5px;line-height:1}
+  .achip .k{opacity:.6;text-transform:uppercase;letter-spacing:.06em;font-size:10px}
+  .achip .x{border:none;background:rgba(255,255,255,.2);color:#fff;border-radius:50%;width:18px;height:18px;cursor:pointer;font-size:13px;line-height:1;padding:0}
+  .clearall{margin-left:auto;border:1px solid var(--line);background:#fff;border-radius:7px;padding:6px 12px;cursor:pointer;font-size:12.5px}
+  /* layout */
+  .wrap{display:flex;align-items:flex-start}
+  aside{width:248px;flex:0 0 248px;padding:18px 16px 60px;border-right:1px solid var(--line);position:sticky;top:135px;max-height:calc(100vh - 135px);overflow:auto}
+  aside h3{font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin:18px 0 8px}
+  aside h3:first-child{margin-top:0}
+  /* facet CHIPS (toggle, multi-select) */
+  .chips{display:flex;flex-wrap:wrap;gap:6px}
+  .chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:18px;padding:4px 10px;font-size:12.5px;cursor:pointer;user-select:none}
+  .chip .cc{color:var(--muted);font-size:10.5px}
+  .chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
+  .chip.on .cc{color:rgba(255,255,255,.7)}
+  .chip.zero{opacity:.38;cursor:default;pointer-events:none}
+  .chip .swatch{width:11px;height:11px;border-radius:50%;border:1px solid rgba(0,0,0,.2);flex:0 0 auto}
+  .facet-search{width:100%;margin-bottom:8px;padding:5px 8px;font-size:13px}
+  .facet-scroll{max-height:230px;overflow:auto;padding-right:4px}
+  .clearbtn{margin-top:14px;width:100%;padding:8px;border:1px solid var(--line);background:#fff;border-radius:7px;cursor:pointer;font-size:13px}
+  main{flex:1;padding:18px 24px 80px;min-width:0}
+  .grid{display:grid;grid-template-columns:repeat(var(--cols),minmax(0,1fr));gap:14px}
+  /* MINIMAL image-forward cards: image + hex dot(s) only; detail on hover/focus */
+  .card{position:relative;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column}
+  .card .imgwrap{aspect-ratio:1/1;background:#f1ede6;overflow:hidden;position:relative}
+  .card img{width:100%;height:100%;object-fit:cover;display:block}
+  .card .dots{position:absolute;left:8px;bottom:8px;display:flex;gap:4px;z-index:2}
+  .card .dot{width:14px;height:14px;border-radius:50%;border:1px solid rgba(255,255,255,.85);box-shadow:0 0 0 1px rgba(0,0,0,.18)}
+  /* reveal overlay (hover or .open via click) */
+  .reveal{position:absolute;inset:auto 0 0 0;background:linear-gradient(to top,rgba(20,18,15,.92),rgba(20,18,15,.78) 60%,rgba(20,18,15,0));color:#fff;padding:30px 11px 11px;transform:translateY(101%);transition:transform .18s ease;display:flex;flex-direction:column;gap:3px}
+  .card:hover .reveal,.card.open .reveal,.card:focus-within .reveal{transform:translateY(0)}
+  .reveal .ptitle{font-weight:600;font-size:13.5px;line-height:1.25}
+  .reveal .rmeta{font-size:11.5px;color:rgba(255,255,255,.82)}
+  .reveal .badge{display:inline-block;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;background:rgba(255,255,255,.16);border-radius:20px;padding:2px 7px;align-self:flex-start;margin-bottom:1px}
+  .reqbtn{margin-top:6px;border:1px solid #fff;background:transparent;color:#fff;border-radius:7px;padding:6px;font-size:12px;font-weight:600;cursor:pointer}
+  .reqbtn.in{background:var(--accent2);border-color:var(--accent2)}
+  #sentinel{height:60px}
+  .status{text-align:center;color:var(--muted);padding:24px;font-size:13px}
+  /* modal */
+  .overlay{position:fixed;inset:0;background:rgba(28,26,23,.45);display:none;align-items:flex-start;justify-content:center;z-index:50;padding:40px 16px;overflow:auto}
+  .overlay.open{display:flex}
+  .modal{background:#fff;border-radius:12px;max-width:560px;width:100%;padding:22px 24px 26px}
+  .modal h2{margin:0 0 4px;font-size:20px}
+  .modal p.sub{margin:0 0 16px;color:var(--muted);font-size:13px}
+  .cartlist{max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:8px;margin-bottom:16px}
+  .citem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);font-size:13px}
+  .citem:last-child{border-bottom:none}
+  .citem img{width:42px;height:42px;object-fit:cover;border-radius:6px;background:#eee}
+  .citem .x{margin-left:auto;border:none;background:none;color:var(--muted);cursor:pointer;font-size:18px}
+  .field{display:flex;flex-direction:column;gap:4px;margin-bottom:11px}
+  .field label{font-size:12px;color:var(--muted)}
+  .row2{display:flex;gap:11px}.row2 .field{flex:1}
+  .submit{width:100%;background:var(--ink);color:#fff;border:none;border-radius:8px;padding:12px;font-weight:600;font-size:15px;cursor:pointer;margin-top:4px}
+  .submit:disabled{opacity:.5;cursor:default}
+  .closex{float:right;border:none;background:none;font-size:22px;cursor:pointer;color:var(--muted);line-height:1}
+  .ok{background:#eef5ef;border:1px solid #cfe3d4;color:#2c5d3c;padding:12px;border-radius:8px;font-size:14px}
+  @media(max-width:820px){aside{display:none}.controls{top:auto;position:static}}
+</style>
+</head>
+<body>
+<header class="top">
+  <div class="toprow">
+    <div class="brand" id="brand">Trade Lines<small>Designer Wallcoverings</small></div>
+    <div class="count" id="count">loading…</div>
+  </div>
+</header>
+
+<div class="controls">
+  <label class="grow">Search
+    <input type="search" id="q" placeholder="pattern, color, SKU, collection…" autocomplete="off">
+  </label>
+  <label>Sort
+    <select id="sort">
+      <option value="newest">Newest</option>
+      <option value="family">Color Family</option>
+      <option value="style">Style</option>
+      <option value="pattern">Pattern A→Z</option>
+      <option value="color_name">Color name A→Z</option>
+      <option value="collection">Collection A→Z</option>
+      <option value="line">Line</option>
+      <option value="product_type">Product Type</option>
+      <option value="material">Material</option>
+      <option value="light">Light → Dark</option>
+      <option value="dark">Dark → Light</option>
+      <option value="hue">Color Wheel (hue)</option>
+      <option value="sku">SKU A→Z</option>
+    </select>
+  </label>
+  <label class="density">Density
+    <input type="range" id="density" min="2" max="8" step="1" value="5">
+  </label>
+  <button class="cartbtn" id="cartbtn">Request Samples<span class="n" id="cartn">0</span></button>
+</div>
+
+<!-- active-filter chips -->
+<div class="activebar empty" id="activebar"></div>
+
+<div class="wrap">
+  <aside id="facets"></aside>
+  <main>
+    <div class="grid" id="grid"></div>
+    <div id="sentinel"></div>
+    <div class="status" id="status"></div>
+  </main>
+</div>
+
+<!-- sample request modal -->
+<div class="overlay" id="overlay">
+  <div class="modal">
+    <button class="closex" id="closex">&times;</button>
+    <h2>Request Samples</h2>
+    <p class="sub">No payment — we’ll mail trade samples of the items below.</p>
+    <div id="formArea">
+      <div class="cartlist" id="cartlist"></div>
+      <form id="reqform">
+        <div class="row2">
+          <div class="field"><label>Name *</label><input type="text" name="name" required></div>
+          <div class="field"><label>Email *</label><input type="email" name="email" required></div>
+        </div>
+        <div class="row2">
+          <div class="field"><label>Company / Studio</label><input type="text" name="company"></div>
+          <div class="field"><label>Phone</label><input type="text" name="phone"></div>
+        </div>
+        <div class="field"><label>Shipping address</label><textarea name="address" rows="2"></textarea></div>
+        <div class="field"><label>Notes</label><textarea name="notes" rows="2" placeholder="Optional"></textarea></div>
+        <button class="submit" id="submitbtn" type="submit">Submit sample request</button>
+      </form>
+    </div>
+    <div id="doneArea" style="display:none"></div>
+  </div>
+</div>
+
+<script>
+// per-vendor localStorage namespace (set after /api/config so two microsites don't collide)
+let NS = 'dwvm';
+const LS = {
+  get:(k,d)=>{try{const v=localStorage.getItem(NS+'.'+k);return v==null?d:JSON.parse(v);}catch{return d;}},
+  set:(k,v)=>{try{localStorage.setItem(NS+'.'+k,JSON.stringify(v));}catch{}}
+};
+const $ = (s)=>document.querySelector(s);
+const grid=$('#grid'), statusEl=$('#status'), countEl=$('#count');
+
+// approximate swatch color per family (for the chip dot)
+const FAMILY_SWATCH = {
+  'Red':'#c0392b','Orange/Brown':'#b5651d','Yellow':'#e1c340','Green':'#4a7c3f','Teal':'#2a9d8f',
+  'Blue':'#3a6ea5','Purple':'#7e57c2','Pink':'#e08aa8','Neutral/Beige':'#d8cbb3','Black':'#222',
+  'Grey':'#9a9a9a','White':'#f4f4f0'
+};
+// pretty labels for the active-chip key
+const FACET_LABEL = {family:'Color',style:'Style',material_bucket:'Material',enriched:'Status',line:'Line',product_type:'Type',collection:'Collection'};
+
+// ---- persisted UI state ----
+let sort, density, cart, active;
+let offset=0, total=0, loading=false, done=false;
+const LIMIT=60;
+
+function qs(){
+  const p=new URLSearchParams();
+  p.set('sort',sort); p.set('offset',offset); p.set('limit',LIMIT);
+  const q=$('#q').value.trim(); if(q) p.set('q',q);
+  for(const k of Object.keys(active)){ if(active[k] && active[k].length) p.set(k, active[k].join('|')); }
+  return p.toString();
+}
+function reset(){ offset=0; total=0; done=false; grid.innerHTML=''; statusEl.textContent=''; renderActive(); load(); }
+
+async function load(){
+  if(loading||done) return;
+  loading=true; statusEl.textContent='loading…';
+  try{
+    const r=await fetch('/api/skus?'+qs());
+    const d=await r.json();
+    total=d.total;
+    for(const row of d.rows) grid.appendChild(card(row));
+    offset += d.rows.length;
+    if(offset>=total || d.rows.length===0) done=true;
+    countEl.textContent = total.toLocaleString()+' of '+d.all.toLocaleString()+' products';
+    statusEl.textContent = done ? (total? 'End of results — '+total.toLocaleString()+' shown' : 'No products match your filters.') : '';
+  }catch(e){ statusEl.textContent='Error loading products.'; }
+  loading=false;
+}
+
+function inCart(sku){ return cart.some(c=>c.sku===sku); }
+function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c])); }
+
+// MINIMAL card: image + hex dot(s) only; everything else in hover/click reveal
+function card(row){
+  const el=document.createElement('div'); el.className='card'; el.tabIndex=0;
+  const img = row.image ? `<img loading="lazy" src="${row.image}" alt="${esc(row.pattern_name)}" onerror="this.style.opacity=.25">` : '';
+  let dots='';
+  if(row.color_hex) dots += `<span class="dot" style="background:${row.color_hex}" title="${row.color_hex}"></span>`;
+  if(!row.color_hex && row.family) dots += `<span class="dot" style="background:${FAMILY_SWATCH[row.family]||'#bbb'}" title="${esc(row.family)}"></span>`;
+  const lineBadge = row.line ? `<span class="badge">${esc(row.line)}</span>` : '';
+  el.innerHTML = `
+    <div class="imgwrap">
+      ${img}
+      <div class="dots">${dots}</div>
+      <div class="reveal">
+        ${lineBadge}
+        <div class="ptitle">${esc(row.pattern_name)}</div>
+        <div class="rmeta">${esc(row.color_name||'—')}${row.family?' · '+esc(row.family):''}</div>
+        ${row.collection?`<div class="rmeta">${esc(row.collection)}</div>`:''}
+        <button class="reqbtn ${inCart(row.sku)?'in':''}" data-sku="${esc(row.sku)}">${inCart(row.sku)?'✓ In sample request':'Request Sample'}</button>
+      </div>
+    </div>`;
+  // click anywhere on card (not the button) toggles the reveal open (touch/click reveal)
+  el.addEventListener('click',(e)=>{ if(e.target.closest('.reqbtn')) return; el.classList.toggle('open'); });
+  el.querySelector('.reqbtn').addEventListener('click',(e)=>{e.stopPropagation();toggleCart(row, e.currentTarget);});
+  return el;
+}
+
+// ---- cart ----
+function toggleCart(row, btn){
+  if(inCart(row.sku)){ cart=cart.filter(c=>c.sku!==row.sku); }
+  else cart.push({sku:row.sku,mfr_sku:row.mfr_sku,pattern_name:row.pattern_name,color_name:row.color_name,line:row.line,image:row.image});
+  LS.set('cart',cart);
+  if(btn){ btn.classList.toggle('in',inCart(row.sku)); btn.textContent=inCart(row.sku)?'✓ In sample request':'Request Sample'; }
+  $('#cartn').textContent=cart.length;
+}
+
+// ---- active-filter chip bar (removable) ----
+function renderActive(){
+  const bar=$('#activebar'); bar.innerHTML='';
+  let any=false;
+  for(const k of Object.keys(active)){
+    for(const v of (active[k]||[])){
+      any=true;
+      const c=document.createElement('span'); c.className='achip';
+      const label = k==='enriched' ? (v==='enriched'?'Enriched':'Unenriched') : v;
+      c.innerHTML=`<span class="k">${esc(FACET_LABEL[k]||k)}</span><span>${esc(label)}</span><button class="x" title="remove">&times;</button>`;
+      c.querySelector('.x').addEventListener('click',()=>{ active[k]=active[k].filter(x=>x!==v); if(!active[k].length) delete active[k]; LS.set('filters',active); loadFacets(); reset(); });
+      bar.appendChild(c);
+    }
+  }
+  if(any){
+    const clr=document.createElement('button'); clr.className='clearall'; clr.textContent='Clear all';
+    clr.addEventListener('click',()=>{active={};LS.set('filters',active);loadFacets();reset();});
+    bar.appendChild(clr);
+    bar.classList.remove('empty');
+  } else bar.classList.add('empty');
+}
+
+function toggleFacet(key,value){
+  active[key]=active[key]||[];
+  if(active[key].includes(value)) active[key]=active[key].filter(v=>v!==value);
+  else active[key].push(value);
+  if(!active[key].length) delete active[key];
+  LS.set('filters',active); loadFacets(); reset();
+}
+
+// ---- facets as CHIPS ----
+async function loadFacets(){
+  const r=await fetch('/api/facets'); const d=await r.json();
+  const f=d.facets;
+  const meta=[
+    ['family','Color Family',f.family,false,true],
+    ['style','Style',f.style,false,false],
+    ['material_bucket','Material',f.material_bucket,false,false],
+    ['enriched','Enrichment',f.enriched,false,false],
+    ['line','Line',f.line,false,false],
+    ['product_type','Product Type',f.product_type,false,false],
+    ['collection','Collection',f.collection,true,false],
+  ];
+  const root=$('#facets'); root.innerHTML='';
+  for(const [key,title,vals,searchable,swatch] of meta){
+    if(!vals || !vals.length) continue;
+    const h=document.createElement('h3'); h.textContent=title; root.appendChild(h);
+    let search=null;
+    if(searchable){
+      search=document.createElement('input'); search.type='text'; search.className='facet-search'; search.placeholder='Filter '+title.toLowerCase()+'…';
+      root.appendChild(search);
+    }
+    const box=document.createElement('div'); box.className=searchable?'chips facet-scroll':'chips';
+    for(const {value,count} of vals){
+      const on=(active[key]||[]).includes(value);
+      const chip=document.createElement('span');
+      chip.className='chip'+(on?' on':'')+(count===0&&!on?' zero':'');
+      chip.dataset.v=value.toLowerCase();
+      const label = key==='enriched' ? (value==='enriched'?'Enriched':'Unenriched') : value;
+      const sw = swatch ? `<span class="swatch" style="background:${FAMILY_SWATCH[value]||'#bbb'}"></span>` : '';
+      chip.innerHTML=`${sw}<span>${esc(label)}</span><span class="cc">${count}</span>`;
+      if(!(count===0&&!on)) chip.addEventListener('click',()=>toggleFacet(key,value));
+      box.appendChild(chip);
+    }
+    root.appendChild(box);
+    if(search) search.addEventListener('input',()=>{const t=search.value.toLowerCase();box.querySelectorAll('.chip').forEach(l=>l.style.display=l.dataset.v.includes(t)?'':'none');});
+  }
+  const clear=document.createElement('button'); clear.className='clearbtn'; clear.textContent='Clear all filters';
+  clear.addEventListener('click',()=>{active={};LS.set('filters',active);loadFacets();reset();});
+  root.appendChild(clear);
+}
+
+// ---- controls ----
+$('#sort').addEventListener('change',e=>{sort=e.target.value;LS.set('sort',sort);reset();});
+$('#density').addEventListener('input',e=>{density=+e.target.value;LS.set('density',density);document.documentElement.style.setProperty('--cols',density);});
+let qt; $('#q').addEventListener('input',()=>{clearTimeout(qt);qt=setTimeout(reset,250);});
+
+// ---- infinite scroll ----
+new IntersectionObserver((ents)=>{ if(ents[0].isIntersecting) load(); },{rootMargin:'600px'}).observe($('#sentinel'));
+
+// ---- sample modal ----
+const overlay=$('#overlay');
+function openCart(){
+  renderCartList();
+  $('#formArea').style.display = cart.length? '' : 'none';
+  $('#doneArea').style.display='none'; $('#doneArea').innerHTML='';
+  overlay.classList.add('open');
+}
+function closeCart(){ overlay.classList.remove('open'); }
+$('#cartbtn').addEventListener('click',openCart);
+$('#closex').addEventListener('click',closeCart);
+overlay.addEventListener('click',e=>{if(e.target===overlay)closeCart();});
+
+function renderCartList(){
+  const list=$('#cartlist');
+  if(!cart.length){ list.innerHTML='<div class="status">No items yet. Click “Request Sample” on a product.</div>'; return; }
+  list.innerHTML='';
+  cart.forEach(it=>{
+    const row=document.createElement('div'); row.className='citem';
+    row.innerHTML=`${it.image?`<img src="${it.image}">`:''}
+      <div><strong>${esc(it.pattern_name||it.sku)}</strong><br><span style="color:#6f6a62">${esc(it.color_name||'')} ${it.line?'· '+esc(it.line):''}</span></div>
+      <button class="x" title="remove">&times;</button>`;
+    row.querySelector('.x').addEventListener('click',()=>{cart=cart.filter(c=>c.sku!==it.sku);LS.set('cart',cart);$('#cartn').textContent=cart.length;document.querySelectorAll('.reqbtn').forEach(b=>{if(b.dataset.sku===it.sku){b.classList.remove('in');b.textContent='Request Sample';}});openCart();});
+    list.appendChild(row);
+  });
+}
+
+$('#reqform').addEventListener('submit',async e=>{
+  e.preventDefault();
+  if(!cart.length) return;
+  const fd=new FormData(e.target);
+  const payload={items:cart};
+  for(const [k,v] of fd.entries()) payload[k]=v;
+  const btn=$('#submitbtn'); btn.disabled=true; btn.textContent='Submitting…';
+  // Shopify checkout path (real sample order) when wired; else no-payment request below.
+  if(window.DWV_SAMPLE && window.DWV_SAMPLE.available()){
+    try{ btn.textContent='Opening secure checkout…'; await window.DWV_SAMPLE.checkout(cart,{name:payload.name,email:payload.email}); return; }
+    catch(err){ /* fall through to the no-payment request flow */ }
+  }
+  try{
+    const r=await fetch('/api/sample-request',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)});
+    const d=await r.json();
+    if(d.ok){
+      cart=[]; LS.set('cart',cart); $('#cartn').textContent=0;
+      document.querySelectorAll('.reqbtn.in').forEach(b=>{b.classList.remove('in');b.textContent='Request Sample';});
+      $('#formArea').style.display='none';
+      $('#doneArea').style.display='';
+      $('#doneArea').innerHTML=`<div class="ok">Thank you, ${esc(payload.name)} — your request for ${d.count} sample${d.count===1?'':'s'} was received. We’ll be in touch at ${esc(payload.email)}.</div>`;
+    } else { btn.disabled=false; btn.textContent='Submit sample request'; alert(d.error||'Could not submit.'); }
+  }catch(err){ btn.disabled=false; btn.textContent='Submit sample request'; alert('Network error.'); }
+});
+
+// ---- boot: read /api/config for title + per-vendor namespace, then hydrate state ----
+(async function boot(){
+  try{
+    const cfg=await (await fetch('/api/config')).json();
+    if(cfg.title){
+      document.title = cfg.title;
+      $('#brand').innerHTML = esc(cfg.title)+'<small>Designer Wallcoverings</small>';
+      NS = 'dwvm.'+cfg.title.replace(/[^a-z0-9]+/gi,'_').toLowerCase();
+    }
+    window.DWV_CFG = cfg.shopify || {};
+    if(window.DWV_CFG.storefrontToken && window.DWV_CFG.sampleVariantId){
+      await new Promise(res=>{const s=document.createElement('script');s.src='/buybutton.js';s.onload=res;s.onerror=res;document.head.appendChild(s);});
+    }
+  }catch{}
+  sort = LS.get('sort','newest');
+  density = LS.get('density',5);
+  cart = LS.get('cart',[]);
+  active = LS.get('filters',{});
+  $('#sort').value=sort;
+  $('#density').value=density;
+  document.documentElement.style.setProperty('--cols',density);
+  $('#cartn').textContent=cart.length;
+  renderActive();
+  loadFacets();
+  load();
+})();
+</script>
+</body>
+</html>
diff --git a/vendors/york_contract/viewer/server.js b/vendors/york_contract/viewer/server.js
new file mode 100644
index 0000000..9904dbf
--- /dev/null
+++ b/vendors/york_contract/viewer/server.js
@@ -0,0 +1,417 @@
+#!/usr/bin/env node
+/**
+ * DW Vendor Microsite — generalized catalog viewer (LOCAL, read-only browse + sample-order).
+ *
+ * Generalized from ~/Projects/cowtan-lines/viewer/server.js. The engine is
+ * vendor-agnostic: buildRows / sorters / facets / the /api/sample-request flow are
+ * uniform across every vendor's catalog schema (the staging JSONL is already
+ * normalized to the canonical cowtan shape by lib/export-catalog.sh).
+ *
+ * What is vendor-specific (read from argv / env / fieldmap.json):
+ *   - JSONL source path   : argv[3] || env VENDOR_JSONL || ../staging/cowtan.jsonl
+ *   - banner / page title : env VENDOR_TITLE || fieldmap.title || 'Vendor Trade Lines'
+ *   - samples-only policy  : fieldmap.samples_only (no prices/checkout when true)
+ *
+ * These lines are intentionally OFF Shopify — the ONLY purchase action is a no-payment
+ * sample request. No prices are sold, no Shopify links, no checkout.
+ *
+ * Zero dependencies. Images are live vendor CDN URLs, used as-is (never upscaled).
+ *   node server.js [port] [jsonl] [fieldmap]
+ *     port      default 0 = OS-assigned free port
+ *     jsonl     default env VENDOR_JSONL || ../staging/cowtan.jsonl
+ *     fieldmap  default env VENDOR_FIELDMAP || ./fieldmap.json (optional)
+ */
+const http = require('http');
+const fs = require('fs');
+const path = require('path');
+
+const PORT = parseInt(process.argv[2] || '0', 10);
+const DIR = path.join(__dirname, '..', '..', '..', 'staging'); // repo/vendors/<v>/viewer -> repo/staging
+const SRC = process.argv[3] || process.env.VENDOR_JSONL || path.join(__dirname, '..', 'staging', 'cowtan.jsonl');
+const FIELDMAP_PATH = process.argv[4] || process.env.VENDOR_FIELDMAP || path.join(__dirname, 'fieldmap.json');
+const PUBLIC = path.join(__dirname, 'public');
+const DATA = path.join(__dirname, 'data');
+const REQUESTS = path.join(DATA, 'sample-requests.jsonl');
+
+let FIELDMAP = {};
+try { if (fs.existsSync(FIELDMAP_PATH)) FIELDMAP = JSON.parse(fs.readFileSync(FIELDMAP_PATH, 'utf8')); } catch { FIELDMAP = {}; }
+const TITLE = process.env.VENDOR_TITLE || FIELDMAP.title || 'Vendor Trade Lines';
+const SAMPLES_ONLY = FIELDMAP.samples_only !== false; // default true (samples-only / no checkout)
+
+const readJsonl = (f) => (fs.existsSync(f)
+  ? fs.readFileSync(f, 'utf8').trim().split('\n').filter(Boolean).map((l) => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean)
+  : []);
+
+const num = (v) => { if (v == null) return null; const m = String(v).match(/[\d.]+/); return m ? parseFloat(m[0]) : null; };
+
+// perceived luminance 0..255 from #rrggbb
+function lum(hex) {
+  if (!hex || hex[0] !== '#' || hex.length !== 7) return null;
+  const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
+  return 0.2126 * r + 0.7152 * g + 0.0722 * b;
+}
+// hue 0..360 from #rrggbb (for color-wheel sort)
+function hue(hex) {
+  if (!hex || hex[0] !== '#' || hex.length !== 7) return null;
+  let r = parseInt(hex.slice(1, 3), 16) / 255, g = parseInt(hex.slice(3, 5), 16) / 255, b = parseInt(hex.slice(5, 7), 16) / 255;
+  const mx = Math.max(r, g, b), mn = Math.min(r, g, b), d = mx - mn;
+  if (d === 0) return -1; // grayscale -> sort to end
+  let h;
+  if (mx === r) h = ((g - b) / d) % 6;
+  else if (mx === g) h = (b - r) / d + 2;
+  else h = (r - g) / d + 4;
+  h *= 60; if (h < 0) h += 360;
+  return h;
+}
+
+// ---- ENHANCED bucketing (Steve's spec) ------------------------------------
+// Full HSL from #rrggbb -> {h:0..360, s:0..1, l:0..1} or null.
+function hsl(hex) {
+  if (!hex || hex[0] !== '#' || hex.length !== 7) return null;
+  let r = parseInt(hex.slice(1, 3), 16) / 255, g = parseInt(hex.slice(3, 5), 16) / 255, b = parseInt(hex.slice(5, 7), 16) / 255;
+  if ([r, g, b].some((v) => Number.isNaN(v))) return null;
+  const mx = Math.max(r, g, b), mn = Math.min(r, g, b), d = mx - mn;
+  const l = (mx + mn) / 2;
+  let s = 0, h = 0;
+  if (d !== 0) {
+    s = l > 0.5 ? d / (2 - mx - mn) : d / (mx + mn);
+    if (mx === r) h = ((g - b) / d) % 6;
+    else if (mx === g) h = (b - r) / d + 2;
+    else h = (r - g) / d + 4;
+    h *= 60; if (h < 0) h += 360;
+  }
+  return { h, s, l };
+}
+
+// Canonical color families (order = display order; 0-count still listed by facets()).
+const COLOR_FAMILIES = ['Red', 'Orange/Brown', 'Yellow', 'Green', 'Teal', 'Blue', 'Purple', 'Pink', 'Neutral/Beige', 'Black', 'Grey', 'White'];
+// ai_colors hint words -> family (fallback when hex absent/ambiguous).
+const AI_COLOR_TO_FAMILY = {
+  red: 'Red', crimson: 'Red', scarlet: 'Red', burgundy: 'Red', maroon: 'Red', wine: 'Red',
+  orange: 'Orange/Brown', terracotta: 'Orange/Brown', rust: 'Orange/Brown', brown: 'Orange/Brown', tan: 'Orange/Brown', camel: 'Orange/Brown', copper: 'Orange/Brown', bronze: 'Orange/Brown', amber: 'Orange/Brown', coffee: 'Orange/Brown', chocolate: 'Orange/Brown',
+  yellow: 'Yellow', gold: 'Yellow', mustard: 'Yellow', ochre: 'Yellow',
+  green: 'Green', olive: 'Green', sage: 'Green', lime: 'Green', emerald: 'Green', forest: 'Green', moss: 'Green',
+  teal: 'Teal', turquoise: 'Teal', aqua: 'Teal', cyan: 'Teal',
+  blue: 'Blue', navy: 'Blue', indigo: 'Blue', cobalt: 'Blue', azure: 'Blue', denim: 'Blue',
+  purple: 'Purple', violet: 'Purple', lavender: 'Purple', plum: 'Purple', mauve: 'Purple', lilac: 'Purple',
+  pink: 'Pink', rose: 'Pink', blush: 'Pink', fuchsia: 'Pink', magenta: 'Pink', coral: 'Pink', salmon: 'Pink',
+  beige: 'Neutral/Beige', cream: 'Neutral/Beige', ivory: 'Neutral/Beige', taupe: 'Neutral/Beige', sand: 'Neutral/Beige', linen: 'Neutral/Beige', natural: 'Neutral/Beige', oatmeal: 'Neutral/Beige', greige: 'Neutral/Beige', stone: 'Neutral/Beige',
+  black: 'Black', charcoal: 'Black', ebony: 'Black', onyx: 'Black',
+  grey: 'Grey', gray: 'Grey', silver: 'Grey', slate: 'Grey', pewter: 'Grey', smoke: 'Grey',
+  white: 'White', chalk: 'White', alabaster: 'White', snow: 'White',
+};
+// hue-degrees -> chromatic family bucket.
+function familyFromHue(h) {
+  if (h < 15 || h >= 345) return 'Red';
+  if (h < 45) return 'Orange/Brown';
+  if (h < 70) return 'Yellow';
+  if (h < 160) return 'Green';
+  if (h < 195) return 'Teal';
+  if (h < 255) return 'Blue';
+  if (h < 290) return 'Purple';
+  if (h < 345) return 'Pink';
+  return 'Red';
+}
+// Derive the color family for a row. hex first (HSL), ai_colors as fallback hint.
+function colorFamily(hex, aiColors) {
+  const c = hsl(hex);
+  if (c) {
+    // low-saturation -> achromatic by luminance
+    if (c.s < 0.12) {
+      if (c.l < 0.18) return 'Black';
+      if (c.l > 0.88) return 'White';
+      if (c.l > 0.70) return 'Neutral/Beige';
+      return 'Grey';
+    }
+    // low-ish sat + warm hue + mid/high lum -> beige rather than a vivid family
+    if (c.s < 0.22 && c.l > 0.62 && (c.h < 70 || c.h >= 330)) return 'Neutral/Beige';
+    return familyFromHue(c.h);
+  }
+  // hex missing/invalid -> ai_colors hint (first matchable word)
+  if (Array.isArray(aiColors)) {
+    for (const w of aiColors) {
+      const key = String(w || '').trim().toLowerCase();
+      if (AI_COLOR_TO_FAMILY[key]) return AI_COLOR_TO_FAMILY[key];
+      // partial: "dark green" -> green
+      for (const word of key.split(/[^a-z]+/)) if (AI_COLOR_TO_FAMILY[word]) return AI_COLOR_TO_FAMILY[word];
+    }
+  }
+  return null;
+}
+
+// Canonical styles (display order). Derived from ai_styles + ai_patterns keywords.
+const STYLE_BUCKETS = ['Floral', 'Botanical', 'Damask', 'Toile', 'Stripe', 'Geometric', 'Plaid/Check', 'Trellis', 'Animal/Fauna', 'Scenic/Mural', 'Abstract', 'Texture/Plain', 'Metallic', 'Traditional', 'Modern'];
+const STYLE_KEYWORDS = [
+  ['Floral', ['floral', 'flower', 'rose', 'peony', 'bloom', 'blossom', 'chintz']],
+  ['Botanical', ['botanical', 'leaf', 'leaves', 'fern', 'palm', 'foliage', 'tree', 'vine', 'garden', 'jungle', 'tropical']],
+  ['Damask', ['damask', 'medallion', 'ogee']],
+  ['Toile', ['toile']],
+  ['Stripe', ['stripe', 'striped', 'pinstripe', 'ticking']],
+  ['Plaid/Check', ['plaid', 'check', 'tartan', 'gingham', 'houndstooth', 'windowpane']],
+  ['Trellis', ['trellis', 'lattice', 'fretwork']],
+  ['Geometric', ['geometric', 'chevron', 'herringbone', 'diamond', 'hexagon', 'grid', 'dot', 'polka', 'moroccan', 'fret', 'greek key', 'op art']],
+  ['Animal/Fauna', ['animal', 'bird', 'butterfly', 'fauna', 'leopard', 'zebra', 'tiger', 'peacock', 'fish', 'insect', 'skin', 'hide']],
+  ['Scenic/Mural', ['scenic', 'mural', 'landscape', 'panoramic', 'chinoiserie', 'view', 'cityscape', 'map']],
+  ['Metallic', ['metallic', 'foil', 'mica', 'gilt', 'gilded', 'shimmer', 'glitter']],
+  ['Texture/Plain', ['texture', 'textured', 'plain', 'solid', 'grasscloth', 'linen', 'woven', 'weave', 'sisal', 'cork', 'faux', 'concrete', 'stucco', 'plaster', 'leather', 'suede', 'tweed']],
+  ['Abstract', ['abstract', 'organic', 'watercolor', 'marble', 'painterly', 'brushstroke', 'ombre', 'tie dye', 'splatter']],
+  ['Traditional', ['traditional', 'classic', 'heritage', 'colonial', 'victorian']],
+  ['Modern', ['modern', 'contemporary', 'minimal', 'mid-century', 'midcentury', 'scandinavian']],
+];
+// First matching style bucket from the row's ai_styles + ai_patterns words.
+function styleBucket(aiStyles, aiPatterns) {
+  const words = [];
+  for (const arr of [aiStyles, aiPatterns]) if (Array.isArray(arr)) for (const w of arr) words.push(String(w || '').toLowerCase());
+  const blob = ' ' + words.join(' ') + ' ';
+  for (const [bucket, kws] of STYLE_KEYWORDS) for (const kw of kws) if (blob.includes(kw)) return bucket;
+  return null;
+}
+
+// Material buckets from material / product_type strings.
+const MATERIAL_BUCKETS = ['Non-woven', 'Paper', 'Vinyl', 'Grasscloth', 'Fabric/Textile', 'Cork', 'Mylar/Metallic', 'Leather/Suede', 'Mural', 'Other'];
+const MATERIAL_KEYWORDS = [
+  ['Non-woven', ['non-woven', 'nonwoven', 'non woven']],
+  ['Grasscloth', ['grasscloth', 'grass cloth', 'sisal', 'jute', 'hemp', 'raffia', 'arrowroot', 'seagrass']],
+  ['Vinyl', ['vinyl', 'pvc', 'type ii', 'type 2', 'commercial']],
+  ['Cork', ['cork']],
+  ['Mylar/Metallic', ['mylar', 'metallic', 'foil', 'mica']],
+  ['Leather/Suede', ['leather', 'suede', 'ultrasuede', 'hide']],
+  ['Mural', ['mural', 'panel', 'panoramic']],
+  ['Fabric/Textile', ['fabric', 'textile', 'linen', 'silk', 'cotton', 'wool', 'velvet', 'woven', 'weave']],
+  ['Paper', ['paper', 'wallpaper', 'wallcovering', 'pulp']],
+];
+function materialBucket(material, ptype) {
+  const blob = ' ' + (String(material || '') + ' ' + String(ptype || '')).toLowerCase() + ' ';
+  if (blob.trim() === '') return null;
+  for (const [bucket, kws] of MATERIAL_KEYWORDS) for (const kw of kws) if (blob.includes(kw)) return bucket;
+  return null;
+}
+
+function buildRows() {
+  const rows = [];
+  let i = 0;
+  for (const r of readJsonl(SRC)) {
+    let images = [];
+    if (Array.isArray(r.all_images)) images = r.all_images;
+    else if (typeof r.all_images === 'string' && r.all_images.trim()) { try { images = JSON.parse(r.all_images); } catch { images = []; } }
+    if (!images.length && r.image_url) images = [r.image_url];
+    const ptype = (r.product_type || '').replace(/^./, (c) => c.toUpperCase()); // normalize casing
+    const parseArr = (v) => Array.isArray(v) ? v : (typeof v === 'string' && v.trim() ? (() => { try { return JSON.parse(v); } catch { return []; } })() : []);
+    const aiColors = parseArr(r.ai_colors), aiStyles = parseArr(r.ai_styles), aiPatterns = parseArr(r.ai_patterns);
+    const enriched = (aiColors.length > 0 || aiStyles.length > 0); // ai_colors OR ai_styles non-empty
+    rows.push({
+      idx: i++,
+      sku: r.dw_sku || r.mfr_sku || String(i),
+      mfr_sku: r.mfr_sku || null,
+      pattern_name: r.pattern_name || r.mfr_sku || '(untitled)',
+      color_name: r.color_name || null,
+      collection: r.collection || null,
+      product_type: ptype || null,
+      material: r.material || null,
+      width: r.width || null,
+      repeat_v: r.repeat_v || null,
+      repeat_h: r.repeat_h || null,
+      color_primary: r.color_primary || null,
+      color_hex: r.color_hex || null,
+      ai_colors: aiColors,
+      ai_styles: aiStyles,
+      ai_patterns: aiPatterns,
+      repeat_classification: r.repeat_classification || null,
+      finish: r.finish || null,
+      application: r.application || null,
+      coverage: r.coverage || null,
+      fire_rating: r.fire_rating || null,
+      line: r.line || r.material || null,
+      image: r.image_url || images[0] || null,
+      images,
+      image_count: images.length,
+      // ENHANCED buckets (server-side)
+      family: colorFamily(r.color_hex, aiColors),
+      style: styleBucket(aiStyles, aiPatterns),
+      material_bucket: materialBucket(r.material, ptype),
+      enriched,
+      _lum: lum(r.color_hex),
+      _hue: hue(r.color_hex),
+    });
+  }
+  return rows;
+}
+
+let ROWS = buildRows();
+fs.watchFile(SRC, { interval: 5000 }, () => { ROWS = buildRows(); });
+
+const cmpStr = (a, b) => String(a == null ? '' : a).localeCompare(String(b == null ? '' : b), undefined, { sensitivity: 'base' });
+const nullsLast = (v) => (v == null ? Infinity : v);
+
+const sorters = {
+  newest: null, // natural staged order
+  pattern: (a, b) => cmpStr(a.pattern_name, b.pattern_name),
+  color_name: (a, b) => cmpStr(a.color_name, b.color_name),
+  collection: (a, b) => cmpStr(a.collection, b.collection) || cmpStr(a.pattern_name, b.pattern_name),
+  line: (a, b) => cmpStr(a.line, b.line) || cmpStr(a.pattern_name, b.pattern_name),
+  product_type: (a, b) => cmpStr(a.product_type, b.product_type) || cmpStr(a.pattern_name, b.pattern_name),
+  material: (a, b) => cmpStr(a.material, b.material) || cmpStr(a.pattern_name, b.pattern_name),
+  // light -> dark: brightest first; missing-hex always sort last
+  light: (a, b) => { const la = a._lum == null ? -1 : a._lum, lb = b._lum == null ? -1 : b._lum; return lb - la; },
+  // dark -> light: darkest first; missing-hex always sort last
+  dark: (a, b) => { const la = a._lum == null ? 999 : a._lum, lb = b._lum == null ? 999 : b._lum; return la - lb; },
+  hue: (a, b) => {
+    // grayscale (-1) and null sort to the very end
+    const ha = a._hue == null || a._hue < 0 ? 9999 : a._hue;
+    const hb = b._hue == null || b._hue < 0 ? 9999 : b._hue;
+    return ha - hb;
+  },
+  sku: (a, b) => cmpStr(a.mfr_sku || a.sku, b.mfr_sku || b.sku),
+  // group by canonical color family (display order), nulls last, then by hue within
+  family: (a, b) => {
+    const ia = a.family == null ? 999 : COLOR_FAMILIES.indexOf(a.family);
+    const ib = b.family == null ? 999 : COLOR_FAMILIES.indexOf(b.family);
+    if (ia !== ib) return ia - ib;
+    const ha = a._hue == null || a._hue < 0 ? 9999 : a._hue, hb = b._hue == null || b._hue < 0 ? 9999 : b._hue;
+    return ha - hb;
+  },
+  // group by canonical style (display order), nulls last, then pattern name
+  style: (a, b) => {
+    const ia = a.style == null ? 999 : STYLE_BUCKETS.indexOf(a.style);
+    const ib = b.style == null ? 999 : STYLE_BUCKETS.indexOf(b.style);
+    return ia - ib || cmpStr(a.pattern_name, b.pattern_name);
+  },
+};
+
+function facets() {
+  // ENHANCED facets: color-family / style / material (bucketed) REPLACE raw color_primary
+  // as the color facet. Plus enriched, line, product_type, collection.
+  const fam = {}, sty = {}, mat = {};
+  const f = { line: {}, product_type: {}, collection: {} };
+  let enrichedN = 0, unenrichedN = 0;
+  for (const r of ROWS) {
+    const bump = (o, v) => { if (v == null || v === '') return; o[v] = (o[v] || 0) + 1; };
+    bump(fam, r.family);
+    bump(sty, r.style);
+    bump(mat, r.material_bucket);
+    bump(f.line, r.line);
+    bump(f.product_type, r.product_type);
+    bump(f.collection, r.collection);
+    if (r.enriched) enrichedN++; else unenrichedN++;
+  }
+  // canonical-ordered facets: every value listed even at count 0 (UI greys 0s)
+  const ordered = (canon, counts) => canon.map((value) => ({ value, count: counts[value] || 0 }));
+  // count-desc for free-form facets; collection alpha (searchable)
+  const byCount = (counts) => Object.entries(counts).sort((a, b) => b[1] - a[1]).map(([value, count]) => ({ value, count }));
+  const byAlpha = (counts) => Object.entries(counts).sort((a, b) => a[0].localeCompare(b[0])).map(([value, count]) => ({ value, count }));
+  return {
+    family: ordered(COLOR_FAMILIES, fam),
+    style: ordered(STYLE_BUCKETS, sty),
+    material_bucket: ordered(MATERIAL_BUCKETS, mat),
+    enriched: [
+      { value: 'enriched', count: enrichedN },
+      { value: 'unenriched', count: unenrichedN },
+    ],
+    line: byCount(f.line),
+    product_type: byCount(f.product_type),
+    collection: byAlpha(f.collection),
+  };
+}
+
+const json = (res, code, obj) => { res.writeHead(code, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(obj)); };
+
+const server = http.createServer((req, res) => {
+  const u = new URL(req.url, 'http://localhost');
+
+  if (u.pathname === '/api/config') {
+    return json(res, 200, { title: TITLE, samples_only: SAMPLES_ONLY, total: ROWS.length,
+      shopify: {
+        domain: process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com',
+        storefrontToken: process.env.SHOPIFY_STOREFRONT_TOKEN || '',
+        sampleVariantId: process.env.SHOPIFY_SAMPLE_VARIANT_ID || ''
+      } });
+  }
+
+  if (u.pathname === '/api/facets') {
+    return json(res, 200, { total: ROWS.length, facets: facets() });
+  }
+
+  if (u.pathname === '/api/skus') {
+    const q = (u.searchParams.get('q') || '').trim().toLowerCase();
+    const sort = u.searchParams.get('sort') || 'newest';
+    const offset = parseInt(u.searchParams.get('offset') || '0', 10);
+    const limit = Math.min(parseInt(u.searchParams.get('limit') || '60', 10), 200);
+    // multi-select facets: pipe-separated ('|'). Buckets + free-form + enriched.
+    const sel = (k) => { const v = u.searchParams.get(k); return v ? v.split('|').filter(Boolean) : []; };
+    const fFam = sel('family'), fStyle = sel('style'), fMat = sel('material_bucket');
+    const fEnr = sel('enriched'); // 'enriched' | 'unenriched' (multi tolerated -> OR)
+    const fLine = sel('line'), fType = sel('product_type'), fColl = sel('collection');
+
+    let rows = ROWS;
+    const inAny = (arr, val) => arr.length === 0 || arr.includes(val == null ? '' : val);
+    const enrMatch = (r) => {
+      if (!fEnr.length) return true;
+      const wantE = fEnr.includes('enriched'), wantU = fEnr.includes('unenriched');
+      return (wantE && r.enriched) || (wantU && !r.enriched);
+    };
+    rows = rows.filter((r) =>
+      inAny(fFam, r.family) && inAny(fStyle, r.style) && inAny(fMat, r.material_bucket) &&
+      inAny(fLine, r.line) && inAny(fType, r.product_type) && inAny(fColl, r.collection) && enrMatch(r));
+    if (q) {
+      rows = rows.filter((r) => (
+        (r.pattern_name || '') + ' ' + (r.color_name || '') + ' ' + (r.mfr_sku || '') + ' ' +
+        (r.sku || '') + ' ' + (r.collection || '')).toLowerCase().includes(q));
+    }
+    if (sorters[sort]) rows = [...rows].sort(sorters[sort]);
+    const page = rows.slice(offset, offset + limit);
+    return json(res, 200, { total: rows.length, all: ROWS.length, offset, limit, rows: page });
+  }
+
+  if (u.pathname === '/api/sample-request' && req.method === 'POST') {
+    let body = '';
+    req.on('data', (c) => { body += c; if (body.length > 1e6) req.destroy(); });
+    req.on('end', () => {
+      let p; try { p = JSON.parse(body || '{}'); } catch { return json(res, 400, { ok: false, error: 'bad json' }); }
+      const name = (p.name || '').toString().trim();
+      const email = (p.email || '').toString().trim();
+      const items = Array.isArray(p.items) ? p.items.slice(0, 200) : [];
+      if (!name || !email || !/.+@.+\..+/.test(email) || !items.length) {
+        return json(res, 400, { ok: false, error: 'name, valid email, and at least one item are required' });
+      }
+      const rec = {
+        ts: new Date().toISOString(),
+        vendor: TITLE,
+        name, email,
+        company: (p.company || '').toString().trim() || null,
+        phone: (p.phone || '').toString().trim() || null,
+        address: (p.address || '').toString().trim() || null,
+        notes: (p.notes || '').toString().trim() || null,
+        items: items.map((it) => ({
+          sku: (it.sku || '').toString(),
+          mfr_sku: (it.mfr_sku || '').toString() || null,
+          pattern_name: (it.pattern_name || '').toString() || null,
+          color_name: (it.color_name || '').toString() || null,
+          line: (it.line || '').toString() || null,
+        })),
+        ua: (req.headers['user-agent'] || '').slice(0, 200),
+      };
+      try {
+        fs.mkdirSync(DATA, { recursive: true });
+        fs.appendFileSync(REQUESTS, JSON.stringify(rec) + '\n');
+      } catch (e) {
+        return json(res, 500, { ok: false, error: 'could not save request' });
+      }
+      return json(res, 200, { ok: true, count: rec.items.length });
+    });
+    return;
+  }
+
+  // static
+  let pth = u.pathname === '/' ? '/index.html' : u.pathname;
+  const file = path.join(PUBLIC, path.normalize(pth).replace(/^(\.\.[/\\])+/, ''));
+  if (!file.startsWith(PUBLIC) || !fs.existsSync(file) || fs.statSync(file).isDirectory()) { res.writeHead(404); return res.end('not found'); }
+  const ext = path.extname(file);
+  const mime = { '.html': 'text/html; charset=utf-8', '.js': 'text/javascript', '.css': 'text/css', '.svg': 'image/svg+xml', '.png': 'image/png', '.jpg': 'image/jpeg', '.ico': 'image/x-icon' }[ext] || 'text/plain';
+  res.writeHead(200, { 'Content-Type': mime });
+  res.end(fs.readFileSync(file));
+});
+
+server.listen(PORT, () => {
+  const addr = server.address();
+  console.log(`${TITLE} viewer -> http://localhost:${addr.port}  (${ROWS.length} products${SAMPLES_ONLY ? ', samples-only' : ''})`);
+});

← 88510e2 build wolf_gordon (Wolf Gordon) -> BUILT, port 10086, 5397 s  ·  back to Dw Vendor Microsites  ·  build york_contract (York Contract) -> BUILT, port 10087, 32 5cd0148 →