← back to Mylarwallpaper
brand: replace remaining fake brand globally → 'mylarwallpaper' across head/meta/wordmark/footer — enforces MEMORY brand-stem rule
fcdcfe62dbc79608cd0e3a0dadefbefce08a828f · 2026-05-13 07:15:17 -0700 · Steve
Files touched
A data/products.json.bak.dwscrub.1778220082335A data/products.json.bak.tagscrub.1778220122388A public/care.htmlA public/history.htmlM public/index.htmlA public/index.html.bak.dwfoot.1778203445687A public/index.html.bak.gtagev.1778426585356A public/index.html.bak.ns-canonicalA public/index.html.bak.nspropagate.1778203385131A public/index.html.bak.nspropagate.1778209715067A public/index.html.bak.nspropagate.1778226815166A public/index.html.bak.nspropagate.1778226888816A public/index.html.pre-sort-frontendA public/sourcing.htmlA public/trade.htmlA server.js.pre-sort-skill
Diff
commit fcdcfe62dbc79608cd0e3a0dadefbefce08a828f
Author: Steve <steve@designerwallcoverings.com>
Date: Wed May 13 07:15:17 2026 -0700
brand: replace remaining fake brand globally → 'mylarwallpaper' across head/meta/wordmark/footer — enforces MEMORY brand-stem rule
---
data/products.json.bak.dwscrub.1778220082335 | 3803 +++++++++++++++++++++++
data/products.json.bak.tagscrub.1778220122388 | 3803 +++++++++++++++++++++++
public/care.html | 55 +
public/history.html | 41 +
public/index.html | 14 +-
public/index.html.bak.dwfoot.1778203445687 | 962 ++++++
public/index.html.bak.gtagev.1778426585356 | 970 ++++++
public/index.html.bak.ns-canonical | 977 ++++++
public/index.html.bak.nspropagate.1778203385131 | 947 ++++++
public/index.html.bak.nspropagate.1778209715067 | 962 ++++++
public/index.html.bak.nspropagate.1778226815166 | 964 ++++++
public/index.html.bak.nspropagate.1778226888816 | 966 ++++++
public/index.html.pre-sort-frontend | 850 +++++
public/sourcing.html | 65 +
public/trade.html | 60 +
server.js.pre-sort-skill | 156 +
16 files changed, 15588 insertions(+), 7 deletions(-)
diff --git a/data/products.json.bak.dwscrub.1778220082335 b/data/products.json.bak.dwscrub.1778220082335
new file mode 100644
index 0000000..6ca0e30
--- /dev/null
+++ b/data/products.json.bak.dwscrub.1778220082335
@@ -0,0 +1,3803 @@
+[
+ {
+ "sku": "glyph-by-innovations-usa-dwc-glyph-6",
+ "handle": "glyph-by-innovations-usa-dwc-glyph-6",
+ "title": "Glyph | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Glyph-6.jpg?v=1736199454",
+ "tags": [
+ "Architectural",
+ "ASTM E84",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Geometric",
+ "Glyph-6",
+ "Gray",
+ "Innovations USA",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 3.5,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/glyph-by-innovations-usa-dwc-glyph-6"
+ },
+ {
+ "sku": "camila-silver-modern-damask-wallpaper-wallpaper-cca-82848",
+ "handle": "camila-silver-modern-damask-wallpaper-wallpaper-cca-82848",
+ "title": "Camila Silver Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/5bc6114cf3f8763c3a886d89ebab27e3.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Contemporary",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "LA Walls",
+ "Light Blue",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Takumi",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-silver-modern-damask-wallpaper-wallpaper-cca-82848"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_ros-4146-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_ros-4146-jpg",
+ "title": "Rossana - True Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ros-4146.jpg?v=1762304939",
+ "tags": [
+ "100% Mylar",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Metallic",
+ "Mylar",
+ "Rossana",
+ "Silver",
+ "Textured",
+ "True Silver",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_ros-4146-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_merg-5813-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_merg-5813-jpg",
+ "title": "Merge - Gold Bracelet | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/merg-5813.jpg?v=1762300760",
+ "tags": [
+ "22% Nylon",
+ "3% Polyester",
+ "30% Cotton",
+ "45% Wool",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gold",
+ "Gold Bracelet",
+ "Grasscloth",
+ "Merge",
+ "Metallic",
+ "Stripe",
+ "Textured",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Wool",
+ "Woven",
+ "Woven Upholstery",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_merg-5813-jpg"
+ },
+ {
+ "sku": "dwkk-139760",
+ "handle": "dwkk-139760",
+ "title": "Fiorentina - Silver/Ivory Silver By Lee Jofa | | Diamond Wallcovering Print",
+ "vendor": "Lee Jofa",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2009006_111_0e8257cc-5673-4a40-9b6f-bf4e8b3edf4a.jpg?v=1753291364",
+ "tags": [
+ "30In",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "China",
+ "Commercial",
+ "Contemporary",
+ "Diamond",
+ "display_variant",
+ "Fabric",
+ "Fiorentina",
+ "Geometric",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Ivory",
+ "Lee Jofa",
+ "Luxury",
+ "Metallic",
+ "Non-Wallcovering",
+ "P2009006.111.0",
+ "Print",
+ "Silver",
+ "Silver/Ivory",
+ "Sisal - 85%;Cotton - 15%",
+ "Textured",
+ "Wallcovering",
+ "White"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-139760"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5026m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5026m-jpg",
+ "title": "Ballari Mylar - Stardust | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5026M.jpg?v=1762288377",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Black",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gold",
+ "Industrial",
+ "Metallic",
+ "Mylar",
+ "Stardust",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5026m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5019m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5019m-jpg",
+ "title": "Ballari Mylar - Gold Luster | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5019M.jpg?v=1762288122",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Beige",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Gold Luster",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5019m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_ad9512-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_ad9512-jpg",
+ "title": "Ambient Metallic - AD9512 | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_ad9511.jpg?v=1733874142",
+ "tags": [
+ "Animal/Insects",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Metallic",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_ad9512-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5021m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5021m-jpg",
+ "title": "Ballari Mylar - Copper | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5021M.jpg?v=1762288193",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Copper",
+ "Gray",
+ "Industrial",
+ "Metallic",
+ "Mylar",
+ "Orange",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5021m-jpg"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12906",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12906",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Designer Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/765a7692adba432658470a08ef9cbcdf.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gray",
+ "Lattice",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Silver",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering",
+ "White"
+ ],
+ "max_price": 99.06,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12906"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-2",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-2",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-2.jpg?v=1736199380",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Gold",
+ "Immersion-2",
+ "Innovations USA",
+ "Metallic",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-2"
+ },
+ {
+ "sku": "crushed-costoluto-vinyl-dwx-58010",
+ "handle": "crushed-costoluto-vinyl-dwx-58010",
+ "title": "Crushed Costoluto Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58010-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709699",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contract",
+ "Contract Wallcovering",
+ "Crushed",
+ "Dark Gold",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Organic",
+ "Sophisticated",
+ "Texture",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Warm",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/crushed-costoluto-vinyl-dwx-58010"
+ },
+ {
+ "sku": "dwtt-71298-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-71298-designer-wallcoverings-los-angeles",
+ "title": "Wallcoverings Gold | Thibaut",
+ "vendor": "Thibaut",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T83020_0405cee7-a5ad-46c1-a4cc-00253b2691f6.jpg?v=1733894266",
+ "tags": [
+ "Abstract",
+ "Contemporary",
+ "Dining Room",
+ "Energetic",
+ "Entryway",
+ "Gold",
+ "Living Room",
+ "Metallic",
+ "Metallic Gold",
+ "Non-Woven",
+ "Pattern",
+ "REVIEW",
+ "Small Scale",
+ "Sophisticated",
+ "T83020",
+ "Thibaut",
+ "Thibaut Wallcoverings",
+ "Wallcovering",
+ "Wallcoverings",
+ "Warm Gold"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-71298-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5025m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5025m-jpg",
+ "title": "Ballari Mylar - Turquoise | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5025M.jpg?v=1762288343",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Gray",
+ "Metallic",
+ "Multi",
+ "Mylar",
+ "Textured",
+ "Turquoise",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5025m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5027m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5027m-jpg",
+ "title": "Ballari Mylar - Silver Glint | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5027M.jpg?v=1762288413",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Metallic",
+ "Mylar",
+ "Silver",
+ "Silver Glint",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5027m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dstm-542-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dstm-542-jpg",
+ "title": "Stromatolite - Moonstone | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dstm-542.jpg?v=1762292431",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Gray",
+ "Moonstone",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Stromatolite",
+ "Textured",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dstm-542-jpg"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-3",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-3",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-3.jpg?v=1736199378",
+ "tags": [
+ "abstract",
+ "Architectural",
+ "ASTM E84",
+ "Black",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "contemporary",
+ "Gray",
+ "Immersion-3",
+ "Innovations USA",
+ "Metallic",
+ "textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-3"
+ },
+ {
+ "sku": "mica-madness-real-cork-chip-wallpapers-mic-98621",
+ "handle": "mica-madness-real-cork-chip-wallpapers-mic-98621",
+ "title": "Mica Madness Real Cork Chip s | Phillipe Romano",
+ "vendor": "Phillipe Romano",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1d13ceb2cc53fca0c0eed77d922f1bda.jpg?v=1775082717",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Bedroom",
+ "Commercial",
+ "Contemporary",
+ "Cork",
+ "Gray",
+ "Light Silver Grey",
+ "Living Room",
+ "Metallic",
+ "Mica",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Naturals",
+ "Nickel",
+ "Office",
+ "Paper",
+ "Phillipe Romano",
+ "Phillipe Romano Naturals",
+ "Retail",
+ "Silver",
+ "Solid/Textural",
+ "Textured",
+ "Wallcovering",
+ "White",
+ "Wuhan Woven Wallcovering"
+ ],
+ "max_price": 34.12,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/mica-madness-real-cork-chip-wallpapers-mic-98621"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_merg-5808-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_merg-5808-jpg",
+ "title": "Merge - Copper Wire | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/merg-5808.jpg?v=1762300589",
+ "tags": [
+ "22% Nylon",
+ "3% Polyester",
+ "30% Cotton",
+ "45% Wool",
+ "Architectural",
+ "Beige",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Copper",
+ "Copper Wire",
+ "Merge",
+ "Metallic",
+ "Orange",
+ "stripe",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Wool",
+ "woven",
+ "Woven Upholstery"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_merg-5808-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dech-490-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dech-490-jpg",
+ "title": "Digital Echo - Soft Gray | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dech-490.jpg?v=1762290971",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Chevron",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Digital Echo",
+ "Geometric",
+ "Light Gray",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Soft Gray",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dech-490-jpg"
+ },
+ {
+ "sku": "spalt-by-innovations-usa-dwc-spalt-2",
+ "handle": "spalt-by-innovations-usa-dwc-spalt-2",
+ "title": "Spalt | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Spalt-2.jpg?v=1736199103",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Gray",
+ "Innovations USA",
+ "Metallic",
+ "Silver",
+ "Spalt-2",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/spalt-by-innovations-usa-dwc-spalt-2"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dstm-541-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dstm-541-jpg",
+ "title": "Stromatolite - Turquoise | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dstm-541.jpg?v=1762292394",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Dark Teal",
+ "Digital Curated",
+ "Light Teal",
+ "Mylar",
+ "Paper",
+ "Stromatolite",
+ "Teal",
+ "Textured",
+ "Turquoise",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dstm-541-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_mru-3296_8-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_mru-3296_8-jpg",
+ "title": "Marlu - Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mru-3296_8.jpg?v=1762301619",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Geometric",
+ "Gray",
+ "Marlu",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_mru-3296_8-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5015m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5015m-jpg",
+ "title": "Ballari Mylar - Buff | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5015M.jpg?v=1762287971",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5015m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kam-5098-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kam-5098-jpg",
+ "title": "Kami - Copper | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kam-5098.jpg?v=1762298243",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Contract",
+ "Copper",
+ "geometric",
+ "Kami",
+ "Metallic",
+ "Orange",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kam-5098-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58158",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58158",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58158-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725515",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Gold",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Metallic Gold",
+ "Natural Look",
+ "Neutral",
+ "Striped",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58158"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58155",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58155",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58155-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725434",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58155"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12905",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12905",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Designer Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9ccc6e8f1d2d741b91faf46f439bd12f.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Beige",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gold",
+ "Lattice",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 99.06,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12905"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_br009-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_br009-jpg",
+ "title": "Burnished Metallic | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/br009.jpg?v=1762288727",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Brown",
+ "Burnished Metallic",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gray",
+ "Metallic",
+ "Scuffmaster",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_br009-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dvts-522-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dvts-522-jpg",
+ "title": "Vista - Snow | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dvts-522.jpg?v=1762293138",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Geometric",
+ "Light Gray",
+ "Minimalist",
+ "Mylar",
+ "Paper",
+ "Snow",
+ "Vista",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dvts-522-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_grv-2902_8-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_grv-2902_8-jpg",
+ "title": "Grove - Nickel | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grv-2902_8.jpg?v=1762296600",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Grove",
+ "Metallic",
+ "Nickel",
+ "Silver",
+ "Stripe",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_grv-2902_8-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_br013-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_br013-jpg",
+ "title": "Burnished Metallic | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/br013.jpg?v=1762288841",
+ "tags": [
+ "Architectural",
+ "Bronze",
+ "Brown",
+ "Burnished Metallic",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Industrial",
+ "Metallic",
+ "Scuffmaster",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_br013-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_bbo-4955-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_bbo-4955-jpg",
+ "title": "Bilbao - Platinum | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bbo-4955.jpg?v=1762287470",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Bilbao",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Mylar",
+ "Platinum",
+ "Stripe",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_bbo-4955-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58166",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58166",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58166-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725720",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Champagne",
+ "Coastal",
+ "Color: Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Cream",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Beige",
+ "Linen Texture",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Sand",
+ "Serene",
+ "Stripe",
+ "Tan",
+ "Textured",
+ "Traditional",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58166"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_mass-5780-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_mass-5780-jpg",
+ "title": "Mass - Mahogany | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mass-5780.jpg?v=1762300268",
+ "tags": [
+ "23% Nylon",
+ "36% Wool",
+ "37% Cotton",
+ "4% Polyester",
+ "Abstract",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Cotton",
+ "Gold",
+ "Mahogany",
+ "Mass",
+ "Metallic",
+ "Red",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Woven Upholstery",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_mass-5780-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dnuv-511-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dnuv-511-jpg",
+ "title": "Digital Nouveau - Silver Sand | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dnuv-511.jpg?v=1762291189",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Art Deco",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Digital Curated",
+ "Digital Nouveau",
+ "Geometric",
+ "Lattice",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Silver Sand",
+ "Tan",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dnuv-511-jpg"
+ },
+ {
+ "sku": "dwkk-139597",
+ "handle": "dwkk-139597",
+ "title": "Chalet - Ivory/Gold Ivory By Lee Jofa Modern | Kelly Wearstler Wallpapers Ii | Modern Wallcovering",
+ "vendor": "Lee Jofa",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3502_164_3550e42f-ed14-4cb0-9d22-1c628bf1d6ca.jpg?v=1753291540",
+ "tags": [
+ "27In",
+ "AI-Analyzed-v2",
+ "Almond",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "Beige",
+ "Chalet",
+ "Commercial",
+ "Contemporary",
+ "display_variant",
+ "Geometric",
+ "Gold",
+ "Gwp-3502.164.0",
+ "Ivory",
+ "Ivory/Gold",
+ "Lee Jofa",
+ "Lee Jofa Modern",
+ "Lemon",
+ "Luxury",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Paper - 100%",
+ "Pattern",
+ "United States",
+ "Wallcovering",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-139597"
+ },
+ {
+ "sku": "mica-madness-real-cork-chip-wallpapers-mic-98624",
+ "handle": "mica-madness-real-cork-chip-wallpapers-mic-98624",
+ "title": "Mica Madness Real Cork Chip s | Phillipe Romano",
+ "vendor": "Phillipe Romano",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/747552c419b9120a603da7474b097fae.jpg?v=1775083068",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Bathroom",
+ "Bedroom",
+ "Commercial",
+ "Contemporary",
+ "Cork",
+ "Gray",
+ "Light Blue",
+ "Living Room",
+ "Metallic",
+ "Mica",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Naturals",
+ "Office",
+ "Phillipe Romano",
+ "Phillipe Romano Naturals",
+ "Silver",
+ "Textural",
+ "Textured",
+ "Wallcovering",
+ "White",
+ "Wuhan Woven Wallcovering"
+ ],
+ "max_price": 34.12,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/mica-madness-real-cork-chip-wallpapers-mic-98624"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dprh-502-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dprh-502-jpg",
+ "title": "Perch - Smokey | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dprh-502.jpg?v=1762291563",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Geometric",
+ "Mylar",
+ "Perch",
+ "Smokey",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dprh-502-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_am11390-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_am11390-jpg",
+ "title": "AMBIENT METALLIC | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/am11390.jpg?v=1762358658",
+ "tags": [
+ "AMBIENT METALLIC",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Khaki",
+ "Metallic",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_am11390-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_sm8005-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_sm8005-jpg",
+ "title": "SOLID METAL | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sm8005.jpg?v=1762358770",
+ "tags": [
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gold",
+ "Metallic",
+ "Solid",
+ "SOLID METAL",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_sm8005-jpg"
+ },
+ {
+ "sku": "crushed-costoluto-vinyl-dwx-58009",
+ "handle": "crushed-costoluto-vinyl-dwx-58009",
+ "title": "Crushed Costoluto Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58009-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709696",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contract",
+ "Contract Wallcovering",
+ "Crushed",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Organic",
+ "Texture",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/crushed-costoluto-vinyl-dwx-58009"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_atp-4701-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_atp-4701-jpg",
+ "title": "Allotrope - Limestone | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/atp-4701.jpg?v=1762287348",
+ "tags": [
+ "100% Mylar",
+ "Allotrope",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Geometric",
+ "Khaki",
+ "Lattice",
+ "Limestone",
+ "Mylar",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_atp-4701-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5121-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5121-jpg",
+ "title": "Kabuto - Corten | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5121.jpg?v=1762298755",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Corten",
+ "Industrial",
+ "Kabuto",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5121-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dnuv-512-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dnuv-512-jpg",
+ "title": "Digital Nouveau - Gunmetal | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dnuv-512.jpg?v=1762291227",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Art Deco",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Copper",
+ "Digital Curated",
+ "Digital Nouveau",
+ "Geometric",
+ "Gray",
+ "Lattice",
+ "Mylar",
+ "Orange",
+ "Paper",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dnuv-512-jpg"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58168",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58168",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58168-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724221",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Taupe",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58168"
+ },
+ {
+ "sku": "word-walls-scr-8126",
+ "handle": "word-walls-scr-8126",
+ "title": "Word Walls",
+ "vendor": "Designer Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/035314c024143a7310f65960cd6d4d93.jpg?v=1572309108",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Contemporary",
+ "Designer Wallcoverings",
+ "Gold",
+ "Luxury Screen Printed Wallpapers",
+ "Metallic",
+ "Paper",
+ "Screen Print",
+ "Textured",
+ "Wallcovering",
+ "Whimsical Screen Prints Vol. 1",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 263.82,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/word-walls-scr-8126"
+ },
+ {
+ "sku": "dwtt-80999-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-80999-designer-wallcoverings-los-angeles",
+ "title": "Charlotte Raffia Black and Metallic Silver Wallcovering",
+ "vendor": "Anna French",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Nara-CharlotteRaffiaWP-01-GCR.jpg?v=1770341584",
+ "tags": [
+ "AT9842",
+ "Bedroom",
+ "Black",
+ "Calm",
+ "Charcoal",
+ "Charlotte Geomteric Fret Natural Raffia",
+ "Charlotte Geomteric Fret Natural Raffia Black",
+ "Contemporary",
+ "Cool Gray",
+ "Dining Room",
+ "Dove Gray",
+ "Elegant",
+ "Entryway",
+ "Geometric",
+ "Ivory",
+ "Light Gray",
+ "Living Room",
+ "Medium Gray",
+ "Medium Scale",
+ "Metallic",
+ "Metallic Silver",
+ "Modern",
+ "Nara",
+ "Neutral",
+ "Off-White",
+ "Office",
+ "Pattern",
+ "Pewter",
+ "Powder Room",
+ "Refined",
+ "Silver",
+ "Sophisticated",
+ "Thibaut Wallcovering",
+ "Transitional",
+ "Wallcovering",
+ "Warm Gray"
+ ],
+ "max_price": 215.02,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-80999-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5127-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5127-jpg",
+ "title": "Kabuto - Amazonite | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5127.jpg?v=1762298972",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Amazonite",
+ "Architectural",
+ "Black",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Kabuto",
+ "Metallic",
+ "Mylar",
+ "Teal",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5127-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_mass-5779-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_mass-5779-jpg",
+ "title": "Mass - Lake | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mass-5779.jpg?v=1762300233",
+ "tags": [
+ "23% Nylon",
+ "36% Wool",
+ "37% Cotton",
+ "4% Polyester",
+ "Abstract",
+ "Architectural",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Cotton",
+ "Lake",
+ "Mass",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Woven Upholstery"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_mass-5779-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5020m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5020m-jpg",
+ "title": "Ballari Mylar - Bronze | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5020M.jpg?v=1762288157",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Black",
+ "Bronze",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gray",
+ "Industrial",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5020m-jpg"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-6",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-6",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-6.jpg?v=1736199375",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Gray",
+ "Immersion-6",
+ "Innovations USA",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-6"
+ },
+ {
+ "sku": "dwtt-71978-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-71978-designer-wallcoverings-los-angeles",
+ "title": "Wallcoverings Natural | Thibaut",
+ "vendor": "Thibaut",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T10060_cf532b0a-d446-4aae-90c4-29401cc089ea.jpg?v=1733893030",
+ "tags": [
+ "Bedroom",
+ "Beige",
+ "Calm",
+ "Damask",
+ "Dining Room",
+ "Gold",
+ "Grasscloth",
+ "Ivory",
+ "Living Room",
+ "Medium Scale",
+ "Metallic",
+ "Natural",
+ "Pattern",
+ "REVIEW",
+ "Sophisticated",
+ "T10060",
+ "Thibaut",
+ "Thibaut Wallcoverings",
+ "Traditional",
+ "Wallcovering",
+ "Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-71978-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "dwtt-71232-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-71232-designer-wallcoverings-los-angeles",
+ "title": "Pravata Damask Smoke on Foil - Foil Wallcovering | Thibaut",
+ "vendor": "Thibaut",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T89177.jpg?v=1762227888",
+ "tags": [
+ "Architectural",
+ "Bedroom",
+ "beige",
+ "Champagne",
+ "Charcoal",
+ "Damask",
+ "Damask Resource 4",
+ "Dining Room",
+ "Floral",
+ "Foil",
+ "Grandmillennial",
+ "gray",
+ "Grey",
+ "Living Room",
+ "Pattern",
+ "Pravata Damask Smoke on",
+ "Rustic",
+ "Scroll",
+ "Sophisticated",
+ "T89177",
+ "Thibaut",
+ "Traditional",
+ "Victorian",
+ "Vinyl",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-71232-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dprh-501-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dprh-501-jpg",
+ "title": "Perch - Dusk | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dprh-501.jpg?v=1762291526",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Dusk",
+ "Geometric",
+ "Gray",
+ "Light Gray",
+ "Mylar",
+ "Paper",
+ "Perch",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dprh-501-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58157",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58157",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58157-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725488",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Natural",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58157"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dvts-521-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dvts-521-jpg",
+ "title": "Vista - Midnight | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dvts-521.jpg?v=1762293104",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Geometric",
+ "Gray",
+ "Midnight",
+ "Minimalist",
+ "Mylar",
+ "Paper",
+ "Vista",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dvts-521-jpg"
+ },
+ {
+ "sku": "lost-adventure-quartz-wp-clarke-and-clarke",
+ "handle": "lost-adventure-quartz-wp-clarke-and-clarke",
+ "title": "Lost Adventure Quartz Wp | Clarke and Clarke",
+ "vendor": "Clarke and Clarke",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W0201_02_CAC.jpg?v=1776818912",
+ "tags": [
+ "abstract",
+ "Clarke and Clarke",
+ "Kravet",
+ "metallic",
+ "mineral",
+ "New Arrival",
+ "Origin: United Kingdom",
+ "Print",
+ "quartz",
+ "textured",
+ "Wallcovering"
+ ],
+ "max_price": 1313.55,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/lost-adventure-quartz-wp-clarke-and-clarke"
+ },
+ {
+ "sku": "ncw4308-02",
+ "handle": "ncw4308-02",
+ "title": "Les Rêves Portavo Grey/Ivory - Grey Wallcovering | Nina Campbell",
+ "vendor": "Nina Campbell",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_4497263132723.jpg?v=1775520419",
+ "tags": [
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Geometric",
+ "Gray",
+ "Metallic",
+ "NCW4308-02",
+ "Nina Campbell Wallcovering",
+ "Nina Campbell Wallcoverings",
+ "Paper",
+ "Silver",
+ "Traditional",
+ "Wallcovering",
+ "Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ncw4308-02"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kam-5101-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kam-5101-jpg",
+ "title": "Kami - Gold Leaf | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kam-5101.jpg?v=1762298354",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Embossed",
+ "Geometric",
+ "Gold",
+ "Gold Leaf",
+ "Kami",
+ "Metallic",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kam-5101-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dstm-540-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dstm-540-jpg",
+ "title": "Stromatolite - Mercury | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dstm-540.jpg?v=1762292359",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Black",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Digital Curated",
+ "Gold",
+ "Mercury",
+ "Mylar",
+ "Paper",
+ "Red",
+ "Stromatolite",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dstm-540-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5125-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5125-jpg",
+ "title": "Kabuto - Tungsten | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5125.jpg?v=1762298899",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gray",
+ "Industrial",
+ "Kabuto",
+ "Mylar",
+ "Silver",
+ "Textured",
+ "Tungsten",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5125-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58161",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58161",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58161-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725591",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Brown",
+ "Color: Brown",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Brown",
+ "Linen Texture",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Serene",
+ "Stripe",
+ "Tan",
+ "Taupe",
+ "Textured",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58161"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58171",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58171",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58171-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724297",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "Gray",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58171"
+ },
+ {
+ "sku": "montgomery-metallic-cubed-durable-walls-xwp-52674",
+ "handle": "montgomery-metallic-cubed-durable-walls-xwp-52674",
+ "title": "Montgomery Metallic Cubed Durable | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwp-52674-sample-montgomery-metallic-cubed-durable-hollywood-wallcoverings.jpg?v=1775726364",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Geometric",
+ "Hollywood Wallcoverings",
+ "Lattice",
+ "Leed Walls",
+ "Metallic",
+ "Tan",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/montgomery-metallic-cubed-durable-walls-xwp-52674"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58164",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58164",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58164-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725666",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Blue",
+ "Color: Blue",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Gray",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Gray",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Serene",
+ "Silver",
+ "Stripe",
+ "Teal",
+ "Textured",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58164"
+ },
+ {
+ "sku": "dwkk-g5c51fc4a",
+ "handle": "dwkk-g5c51fc4a",
+ "title": "W3723-4 Gold | Kravet Design | Ronald Redding |Geometric Wallcovering Print",
+ "vendor": "Kravet",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W3723_4_b0a8d57b-5e2b-4e81-826b-7e386c8a0fd6.jpg?v=1753292060",
+ "tags": [
+ "27In",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "display_variant",
+ "Geometric",
+ "Gold",
+ "Kravet",
+ "Kravet Design",
+ "Metallic",
+ "Paper - 100%",
+ "Print",
+ "Ronald Redding",
+ "Textured",
+ "United States",
+ "Vinyl",
+ "W3723-4",
+ "W3723.4.0",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-g5c51fc4a"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58156",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58156",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58156-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725462",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "Gray",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Light Gray",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58156"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58172",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58172",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58172-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724324",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Natural",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58172"
+ },
+ {
+ "sku": "camila-light-blue-modern-damask-wallpaper-wallpaper-cca-82847",
+ "handle": "camila-light-blue-modern-damask-wallpaper-wallpaper-cca-82847",
+ "title": "Camila Light Blue Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6c08383b1e77c931a2bcfe945ac409bb.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Contemporary",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "LA Walls",
+ "Light Blue",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-light-blue-modern-damask-wallpaper-wallpaper-cca-82847"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_gsg9-5384-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_gsg9-5384-jpg",
+ "title": "Glasgow - Gold | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gsg9-5384.jpg?v=1762296743",
+ "tags": [
+ "100% Vinyl",
+ "abstract",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Contract",
+ "geometric",
+ "Glasgow",
+ "Gold",
+ "Metallic",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_gsg9-5384-jpg"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58167",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58167",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58167-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724195",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Horizontal",
+ "Hospitality",
+ "Light Beige",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58167"
+ },
+ {
+ "sku": "ncw4308-04",
+ "handle": "ncw4308-04",
+ "title": "Les Rêves Portavo Coral/Ivory - Orange Wallcovering | Nina Campbell",
+ "vendor": "Nina Campbell",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_4497263198259.jpg?v=1775520432",
+ "tags": [
+ "Architectural",
+ "Chinoiserie",
+ "Class A Fire Rated",
+ "Commercial",
+ "Coral",
+ "Geometric",
+ "Metallic",
+ "NCW4308-04",
+ "Nina Campbell Wallcovering",
+ "Nina Campbell Wallcoverings",
+ "Paper",
+ "Pink",
+ "Silver",
+ "Wallcovering",
+ "Wallcoverings",
+ "White"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ncw4308-04"
+ },
+ {
+ "sku": "crushed-costoluto-vinyl-dwx-58006",
+ "handle": "crushed-costoluto-vinyl-dwx-58006",
+ "title": "Crushed Costoluto Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58006-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709686",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Crushed",
+ "Dark Gold",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Organic",
+ "Texture",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/crushed-costoluto-vinyl-dwx-58006"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58159",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58159",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58159-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725544",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Black",
+ "Charcoal",
+ "Color: Black",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Conference Room",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Dark Brown",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Gray",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Hotel Lobby",
+ "Light Grey",
+ "Metallic",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Office",
+ "Solid",
+ "Sophisticated",
+ "Stripe",
+ "Textured",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58159"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58162",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58162",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58162-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725617",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Color: Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Cream",
+ "Ecru",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Beige",
+ "Light Gray",
+ "Linen",
+ "Linen Texture",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Off-white",
+ "Organic Modern",
+ "Pale Blue",
+ "Pale Grey",
+ "Serene",
+ "Stripe",
+ "Textured",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58162"
+ },
+ {
+ "sku": "camila-moss-modern-damask-wallpaper-wallpaper-cca-82844",
+ "handle": "camila-moss-modern-damask-wallpaper-wallpaper-cca-82844",
+ "title": "Camila Moss Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f732d6dcd610b98c6c3fc5ab2da0a651.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "Gold",
+ "Gray",
+ "LA Walls",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Textured",
+ "Traditional",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04",
+ "Yellow"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-moss-modern-damask-wallpaper-wallpaper-cca-82844"
+ },
+ {
+ "sku": "ernesto-s-retro-geometric-scr-8065",
+ "handle": "ernesto-s-retro-geometric-scr-8065",
+ "title": "Ernesto's Retro Geometric",
+ "vendor": "Designer Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1b2f9d59b3240946335ea39c1bc32d5d.jpg?v=1572309106",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Floral",
+ "Gold",
+ "Luxury Screen Printed Wallpapers",
+ "Metallic",
+ "Moss",
+ "Paper",
+ "Screen Print",
+ "Traditional",
+ "Vine",
+ "Wallcovering",
+ "Whimsical Screen Prints Vol. 1",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 216.71,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ernesto-s-retro-geometric-scr-8065"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5126-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5126-jpg",
+ "title": "Kabuto - Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5126.jpg?v=1762298936",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gold",
+ "Gray",
+ "Industrial",
+ "Kabuto",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5126-jpg"
+ },
+ {
+ "sku": "dwkk-139813",
+ "handle": "dwkk-139813",
+ "title": "Visby Paper - Juniper Teal By Lee Jofa | Merkato |Global Wallcovering Print",
+ "vendor": "Lee Jofa",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2017109_354_2a16e49b-2d4c-4ae0-be35-55469864c219.jpg?v=1753291225",
+ "tags": [
+ "27In",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "Art Deco",
+ "Blue",
+ "Chevron",
+ "Commercial",
+ "Dark Green",
+ "display_variant",
+ "Geometric",
+ "Global",
+ "Gold",
+ "Green",
+ "Juniper",
+ "Lee Jofa",
+ "Luxury",
+ "Merkato",
+ "Metallic",
+ "Multi",
+ "P2017109.354.0",
+ "Paper",
+ "Paper - 100%",
+ "Pattern",
+ "Print",
+ "Teal",
+ "Turquoise",
+ "United States",
+ "Visby Paper",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-139813"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5124-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5124-jpg",
+ "title": "Kabuto - Steel | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5124.jpg?v=1762298865",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gray",
+ "Industrial",
+ "Kabuto",
+ "Metallic",
+ "Mylar",
+ "Silver",
+ "Steel",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5124-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dprh-500-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dprh-500-jpg",
+ "title": "Perch - Blush | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dprh-500.jpg?v=1762291488",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Digital Curated",
+ "Mylar",
+ "Perch",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dprh-500-jpg"
+ },
+ {
+ "sku": "nautilus-by-innovations-usa-dwc-nautilus-2",
+ "handle": "nautilus-by-innovations-usa-dwc-nautilus-2",
+ "title": "Nautilus | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Nautilus-2.jpg?v=1736198902",
+ "tags": [
+ "AI-Analyzed-v2",
+ "Architectural",
+ "ASTM E84",
+ "Avocado",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Foil",
+ "Gold",
+ "Innovations USA",
+ "Light Gray",
+ "Metal Leaf",
+ "Metallic",
+ "Moss",
+ "Nautilus",
+ "Nautilus-2",
+ "Textured",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/nautilus-by-innovations-usa-dwc-nautilus-2"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_am10331-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_am10331-jpg",
+ "title": "Ambient Metallic | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/am10331.jpg?v=1762285264",
+ "tags": [
+ "Abstract",
+ "Ambient Metallic",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gray",
+ "Metallic",
+ "Scuffmaster",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_am10331-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dech-491-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dech-491-jpg",
+ "title": "Digital Echo - Gray Blush | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dech-491.jpg?v=1762291005",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Digital Echo",
+ "Geometric",
+ "Gray Blush",
+ "Herringbone",
+ "Mylar",
+ "Paper",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dech-491-jpg"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-1",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-1",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-1.jpg?v=1736199381",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Gold",
+ "Immersion-1",
+ "Innovations USA",
+ "Metallic",
+ "Paper",
+ "Wallcovering",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-1"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12907",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12907",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Designer Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/3547fe79068d43fd86725b501b7c7f01.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gray",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Silver",
+ "Stripe",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering"
+ ],
+ "max_price": 142.16,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12907"
+ },
+ {
+ "sku": "velluto-wheat-metallic-grasscloth-wallcovering-fentucci",
+ "handle": "velluto-wheat-metallic-grasscloth-wallcovering-fentucci",
+ "title": "Velluto Wheat Metallic Grasscloth Wallcovering | Fentucci",
+ "vendor": "Fentucci",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GRS-26570.jpg?v=1776879780",
+ "tags": [
+ "Fentucci",
+ "Grasscloth",
+ "Metallic",
+ "new-onboard",
+ "sample-only",
+ "Texture",
+ "Velluto",
+ "Wallcovering",
+ "Wheat"
+ ],
+ "max_price": 5,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/velluto-wheat-metallic-grasscloth-wallcovering-fentucci"
+ },
+ {
+ "sku": "wells-sand-candy-stripe-wallpaper-cca-83229",
+ "handle": "wells-sand-candy-stripe-wallpaper-cca-83229",
+ "title": "Wells Sand Candy Stripe Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1396ca09641c9d6118bac50a4d9805b3.jpg?v=1572309981",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Cream",
+ "Discontinued",
+ "Easy Walls",
+ "Gold",
+ "LA Walls",
+ "Metallic",
+ "Prepasted",
+ "Series: Brewster",
+ "Stripe",
+ "Stripes",
+ "Strippable",
+ "Textured",
+ "Traditional",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "White",
+ "YB-Discontinued-2026-04",
+ "Yellow"
+ ],
+ "max_price": 79.99,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wells-sand-candy-stripe-wallpaper-cca-83229"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58163",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58163",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58163-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725643",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Brown",
+ "Champagne",
+ "Coastal",
+ "Color: Gold",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Gold",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Grasscloth Weave",
+ "Gray",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Light Beige",
+ "Living Room",
+ "Metallic",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Sand",
+ "Silver",
+ "Stripe",
+ "Tan",
+ "Taupe",
+ "Textured",
+ "Traditional",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Warm",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58163"
+ },
+ {
+ "sku": "constantino-crackle-vinyl-dwx-58078",
+ "handle": "constantino-crackle-vinyl-dwx-58078",
+ "title": "Constantino Crackle Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58078-sample-constantino-crackle-vinyl-hollywood-wallcoverings.jpg?v=1775708783",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contract",
+ "Contract Wallcovering",
+ "Crackle",
+ "Distressed",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Texture",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/constantino-crackle-vinyl-dwx-58078"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5122-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5122-jpg",
+ "title": "Kabuto - Abalone | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5122.jpg?v=1762298791",
+ "tags": [
+ "100% Mylar",
+ "Abalone",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Kabuto",
+ "Mylar",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5122-jpg"
+ },
+ {
+ "sku": "faux-wild-rice-fwr-9373",
+ "handle": "faux-wild-rice-fwr-9373",
+ "title": "Faux Wild Rice | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fwr-9373-sample-faux-wild-rice-hollywood-wallcoverings.jpg?v=1775712096",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Black",
+ "Commercial",
+ "Commercial - Cleanable",
+ "Contemporary",
+ "Elegant Vinyls Vol. 1",
+ "Faux Finish",
+ "Gold",
+ "Grasscloth",
+ "Hollywood Wallcoverings",
+ "Metallic",
+ "Textured",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 36.73,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/faux-wild-rice-fwr-9373"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58169",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58169",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58169-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724247",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58169"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dvts-520-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dvts-520-jpg",
+ "title": "Vista - Steel | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dvts-520_180b4f1b-726f-4084-be61-2f8fadaa5bef.jpg?v=1762293070",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Art Deco",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Dark Blue-gray",
+ "Digital Curated",
+ "Geometric",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Steel",
+ "Vista",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dvts-520-jpg"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12908",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12908",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Designer Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/09620171f63a6edf9af7fcb2057d1f67.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gold",
+ "Gray",
+ "Lattice",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 99.06,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12908"
+ },
+ {
+ "sku": "le-embossed-faux-grasscloth-xgr-6205",
+ "handle": "le-embossed-faux-grasscloth-xgr-6205",
+ "title": "Le Embossed Faux Grasscloth | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xgr-6205-sample-le-embossed-faux-grasscloth-hollywood-wallcoverings.jpg?v=1775721644",
+ "tags": [
+ "Amber",
+ "Apricot",
+ "Beige",
+ "Blonde",
+ "Brass",
+ "Bronze",
+ "Butterscotch",
+ "Chestnut",
+ "Commercially Cleanable",
+ "Embossed",
+ "Embossed Texture",
+ "Faux Finish",
+ "Faux Grasscloth",
+ "Gold",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Honey",
+ "Le Embossed Faux Grasscloth",
+ "Metallic",
+ "Natural",
+ "Natural Texture",
+ "Ochre",
+ "Saffron",
+ "Tan",
+ "Textured",
+ "Umber",
+ "Wallcovering",
+ "Wheat"
+ ],
+ "max_price": 51.15,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/le-embossed-faux-grasscloth-xgr-6205"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dbrq-300-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dbrq-300-jpg",
+ "title": "Baroque - Tungsten | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DBRQ-300-Swatch.jpg?v=1762290794",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Baroque",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Damask",
+ "Digital Curated",
+ "Geometric",
+ "Gray",
+ "Light Gray",
+ "Mylar",
+ "Paper",
+ "Tungsten",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dbrq-300-jpg"
+ },
+ {
+ "sku": "camila-purple-modern-damask-wallpaper-wallpaper-cca-82841",
+ "handle": "camila-purple-modern-damask-wallpaper-wallpaper-cca-82841",
+ "title": "Camila Purple Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/2bd0521a9c326717b2be9a7208ac5bf5_6b4ab5cc-72ea-4cbd-817d-decf3e308a55.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Contemporary",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "Gray",
+ "LA Walls",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Purple",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-purple-modern-damask-wallpaper-wallpaper-cca-82841"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_bbo-4954-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_bbo-4954-jpg",
+ "title": "Bilbao - Yellow Gold | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bbo-4954.jpg?v=1762287433",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Bilbao",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Metallic",
+ "Mylar",
+ "Stripe",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow",
+ "Yellow Gold"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_bbo-4954-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5123-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5123-jpg",
+ "title": "Kabuto - Buff | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5123.jpg?v=1762298828",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Cream",
+ "Gold",
+ "Industrial",
+ "Kabuto",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5123-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58160",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58160",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58160-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725567",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Brown",
+ "Champagne",
+ "Chocolate Brown",
+ "Color: Brown",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Estimated Type: Paper",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Hotel Lobby",
+ "Living Room",
+ "Luxe",
+ "Metallic",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Neoclassical",
+ "Solid",
+ "Sophisticated",
+ "Stripe",
+ "Taupe",
+ "Textured",
+ "Traditional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58160"
+ },
+ {
+ "sku": "ncw4356-01",
+ "handle": "ncw4356-01",
+ "title": "Les Indiennes Fortoiseau Ivory/Gold - Gold Wallcovering | Nina Campbell",
+ "vendor": "Nina Campbell",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_4497265066035.jpg?v=1775520640",
+ "tags": [
+ "Animal/Insects",
+ "Architectural",
+ "Bird",
+ "Botanical",
+ "Class A Fire Rated",
+ "Commercial",
+ "Fauna",
+ "Gold",
+ "Metallic",
+ "NCW4356-01",
+ "Nina Campbell Wallcovering",
+ "Nina Campbell Wallcoverings",
+ "Paper",
+ "Traditional",
+ "Wallcovering",
+ "Wallcoverings",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ncw4356-01"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_metm-576-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_metm-576-jpg",
+ "title": "Metamorphosis - Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/metm-576.jpg?v=1762301094",
+ "tags": [
+ "39% Polyester",
+ "61% Olefin",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Geometric",
+ "Metallic",
+ "Metamorphosis",
+ "Olefin",
+ "Silver",
+ "Textile",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_metm-576-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_gsg9-5383-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_gsg9-5383-jpg",
+ "title": "Glasgow - Copper | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gsg9-5383.jpg?v=1762296706",
+ "tags": [
+ "100% Vinyl",
+ "abstract",
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Contract",
+ "Copper",
+ "geometric",
+ "Glasgow",
+ "Gray",
+ "Metallic",
+ "Orange",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_gsg9-5383-jpg"
+ },
+ {
+ "sku": "benedict-canyon-sisal-hlw-73026",
+ "handle": "benedict-canyon-sisal-hlw-73026",
+ "title": "Benedict Canyon Sisal | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73026-sample-clean.jpg?v=1774483093",
+ "tags": [
+ "Architectural",
+ "Bathroom",
+ "Beige",
+ "Champagne",
+ "Color: Metallic",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Geometric",
+ "Glass Bead",
+ "Gray",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Light Grey",
+ "Metallic",
+ "Modern",
+ "Mosaic",
+ "Natural",
+ "Natural Texture",
+ "Naturally Glamorous",
+ "Powder Room",
+ "Silver",
+ "Sisal",
+ "Sophisticated",
+ "Textured",
+ "Tile",
+ "Wallcovering",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 63.43,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/benedict-canyon-sisal-hlw-73026"
+ },
+ {
+ "sku": "always-room-for-ice-cream-small-mural-by-retro-walls-rtr-37217",
+ "handle": "always-room-for-ice-cream-small-mural-by-retro-walls-rtr-37217",
+ "title": "Always Room For Ice Cream Small Mural by Retro Walls",
+ "vendor": "Traditional Whimsy",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/02e8544327c89298ec5a27a291006a75.jpg?v=1572309701",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Blue",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Green",
+ "Heavy-duty Wallcovering with paper top-layer and non-woven backing // Colourfast and washable with a soft cloth // Butted seam (but",
+ "Ice Cream Cone",
+ "Metallic",
+ "Multi",
+ "Mural",
+ "Paper",
+ "Pink",
+ "Retro",
+ "Textured",
+ "Traditional Whimsy",
+ "Wallcovering",
+ "Whimsical"
+ ],
+ "max_price": 84,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/always-room-for-ice-cream-small-mural-by-retro-walls-rtr-37217"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58173",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58173",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58173-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724352",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Blue",
+ "Brown",
+ "Chocolate Brown",
+ "Color: Brown",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Conference Room",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Gold",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Green",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Hotel Lobby",
+ "Living Room",
+ "Luxe",
+ "Luxurious",
+ "Metallic",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Navy Blue",
+ "Neoclassical",
+ "Olive Green",
+ "Solid",
+ "Stripe",
+ "Textured",
+ "Traditional",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58173"
+ }
+]
\ No newline at end of file
diff --git a/data/products.json.bak.tagscrub.1778220122388 b/data/products.json.bak.tagscrub.1778220122388
new file mode 100644
index 0000000..82288ae
--- /dev/null
+++ b/data/products.json.bak.tagscrub.1778220122388
@@ -0,0 +1,3803 @@
+[
+ {
+ "sku": "glyph-by-innovations-usa-dwc-glyph-6",
+ "handle": "glyph-by-innovations-usa-dwc-glyph-6",
+ "title": "Glyph | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Glyph-6.jpg?v=1736199454",
+ "tags": [
+ "Architectural",
+ "ASTM E84",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Geometric",
+ "Glyph-6",
+ "Gray",
+ "Innovations USA",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 3.5,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/glyph-by-innovations-usa-dwc-glyph-6"
+ },
+ {
+ "sku": "camila-silver-modern-damask-wallpaper-wallpaper-cca-82848",
+ "handle": "camila-silver-modern-damask-wallpaper-wallpaper-cca-82848",
+ "title": "Camila Silver Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/5bc6114cf3f8763c3a886d89ebab27e3.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Contemporary",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "LA Walls",
+ "Light Blue",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Takumi",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-silver-modern-damask-wallpaper-wallpaper-cca-82848"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_ros-4146-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_ros-4146-jpg",
+ "title": "Rossana - True Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ros-4146.jpg?v=1762304939",
+ "tags": [
+ "100% Mylar",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Metallic",
+ "Mylar",
+ "Rossana",
+ "Silver",
+ "Textured",
+ "True Silver",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_ros-4146-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_merg-5813-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_merg-5813-jpg",
+ "title": "Merge - Gold Bracelet | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/merg-5813.jpg?v=1762300760",
+ "tags": [
+ "22% Nylon",
+ "3% Polyester",
+ "30% Cotton",
+ "45% Wool",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gold",
+ "Gold Bracelet",
+ "Grasscloth",
+ "Merge",
+ "Metallic",
+ "Stripe",
+ "Textured",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Wool",
+ "Woven",
+ "Woven Upholstery",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_merg-5813-jpg"
+ },
+ {
+ "sku": "dwkk-139760",
+ "handle": "dwkk-139760",
+ "title": "Fiorentina - Silver/Ivory Silver By Lee Jofa | | Diamond Wallcovering Print",
+ "vendor": "Lee Jofa",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2009006_111_0e8257cc-5673-4a40-9b6f-bf4e8b3edf4a.jpg?v=1753291364",
+ "tags": [
+ "30In",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "China",
+ "Commercial",
+ "Contemporary",
+ "Diamond",
+ "display_variant",
+ "Fabric",
+ "Fiorentina",
+ "Geometric",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Ivory",
+ "Lee Jofa",
+ "Luxury",
+ "Metallic",
+ "Non-Wallcovering",
+ "P2009006.111.0",
+ "Print",
+ "Silver",
+ "Silver/Ivory",
+ "Sisal - 85%;Cotton - 15%",
+ "Textured",
+ "Wallcovering",
+ "White"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-139760"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5026m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5026m-jpg",
+ "title": "Ballari Mylar - Stardust | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5026M.jpg?v=1762288377",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Black",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gold",
+ "Industrial",
+ "Metallic",
+ "Mylar",
+ "Stardust",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5026m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5019m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5019m-jpg",
+ "title": "Ballari Mylar - Gold Luster | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5019M.jpg?v=1762288122",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Beige",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Gold Luster",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5019m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_ad9512-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_ad9512-jpg",
+ "title": "Ambient Metallic - AD9512 | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_ad9511.jpg?v=1733874142",
+ "tags": [
+ "Animal/Insects",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Metallic",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_ad9512-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5021m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5021m-jpg",
+ "title": "Ballari Mylar - Copper | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5021M.jpg?v=1762288193",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Copper",
+ "Gray",
+ "Industrial",
+ "Metallic",
+ "Mylar",
+ "Orange",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5021m-jpg"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12906",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12906",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Maison Argent",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/765a7692adba432658470a08ef9cbcdf.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gray",
+ "Lattice",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Silver",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering",
+ "White"
+ ],
+ "max_price": 99.06,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12906"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-2",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-2",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-2.jpg?v=1736199380",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Gold",
+ "Immersion-2",
+ "Innovations USA",
+ "Metallic",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-2"
+ },
+ {
+ "sku": "crushed-costoluto-vinyl-dwx-58010",
+ "handle": "crushed-costoluto-vinyl-dwx-58010",
+ "title": "Crushed Costoluto Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58010-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709699",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contract",
+ "Contract Wallcovering",
+ "Crushed",
+ "Dark Gold",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Organic",
+ "Sophisticated",
+ "Texture",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Warm",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/crushed-costoluto-vinyl-dwx-58010"
+ },
+ {
+ "sku": "dwtt-71298-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-71298-designer-wallcoverings-los-angeles",
+ "title": "Wallcoverings Gold | Thibaut",
+ "vendor": "Thibaut",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T83020_0405cee7-a5ad-46c1-a4cc-00253b2691f6.jpg?v=1733894266",
+ "tags": [
+ "Abstract",
+ "Contemporary",
+ "Dining Room",
+ "Energetic",
+ "Entryway",
+ "Gold",
+ "Living Room",
+ "Metallic",
+ "Metallic Gold",
+ "Non-Woven",
+ "Pattern",
+ "REVIEW",
+ "Small Scale",
+ "Sophisticated",
+ "T83020",
+ "Thibaut",
+ "Thibaut Wallcoverings",
+ "Wallcovering",
+ "Wallcoverings",
+ "Warm Gold"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-71298-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5025m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5025m-jpg",
+ "title": "Ballari Mylar - Turquoise | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5025M.jpg?v=1762288343",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Gray",
+ "Metallic",
+ "Multi",
+ "Mylar",
+ "Textured",
+ "Turquoise",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5025m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5027m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5027m-jpg",
+ "title": "Ballari Mylar - Silver Glint | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5027M.jpg?v=1762288413",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Metallic",
+ "Mylar",
+ "Silver",
+ "Silver Glint",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5027m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dstm-542-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dstm-542-jpg",
+ "title": "Stromatolite - Moonstone | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dstm-542.jpg?v=1762292431",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Gray",
+ "Moonstone",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Stromatolite",
+ "Textured",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dstm-542-jpg"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-3",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-3",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-3.jpg?v=1736199378",
+ "tags": [
+ "abstract",
+ "Architectural",
+ "ASTM E84",
+ "Black",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "contemporary",
+ "Gray",
+ "Immersion-3",
+ "Innovations USA",
+ "Metallic",
+ "textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-3"
+ },
+ {
+ "sku": "mica-madness-real-cork-chip-wallpapers-mic-98621",
+ "handle": "mica-madness-real-cork-chip-wallpapers-mic-98621",
+ "title": "Mica Madness Real Cork Chip s | Phillipe Romano",
+ "vendor": "Phillipe Romano",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1d13ceb2cc53fca0c0eed77d922f1bda.jpg?v=1775082717",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Bedroom",
+ "Commercial",
+ "Contemporary",
+ "Cork",
+ "Gray",
+ "Light Silver Grey",
+ "Living Room",
+ "Metallic",
+ "Mica",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Naturals",
+ "Nickel",
+ "Office",
+ "Paper",
+ "Phillipe Romano",
+ "Phillipe Romano Naturals",
+ "Retail",
+ "Silver",
+ "Solid/Textural",
+ "Textured",
+ "Wallcovering",
+ "White",
+ "Wuhan Woven Wallcovering"
+ ],
+ "max_price": 34.12,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/mica-madness-real-cork-chip-wallpapers-mic-98621"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_merg-5808-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_merg-5808-jpg",
+ "title": "Merge - Copper Wire | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/merg-5808.jpg?v=1762300589",
+ "tags": [
+ "22% Nylon",
+ "3% Polyester",
+ "30% Cotton",
+ "45% Wool",
+ "Architectural",
+ "Beige",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Copper",
+ "Copper Wire",
+ "Merge",
+ "Metallic",
+ "Orange",
+ "stripe",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Wool",
+ "woven",
+ "Woven Upholstery"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_merg-5808-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dech-490-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dech-490-jpg",
+ "title": "Digital Echo - Soft Gray | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dech-490.jpg?v=1762290971",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Chevron",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Digital Echo",
+ "Geometric",
+ "Light Gray",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Soft Gray",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dech-490-jpg"
+ },
+ {
+ "sku": "spalt-by-innovations-usa-dwc-spalt-2",
+ "handle": "spalt-by-innovations-usa-dwc-spalt-2",
+ "title": "Spalt | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Spalt-2.jpg?v=1736199103",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Gray",
+ "Innovations USA",
+ "Metallic",
+ "Silver",
+ "Spalt-2",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/spalt-by-innovations-usa-dwc-spalt-2"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dstm-541-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dstm-541-jpg",
+ "title": "Stromatolite - Turquoise | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dstm-541.jpg?v=1762292394",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Dark Teal",
+ "Digital Curated",
+ "Light Teal",
+ "Mylar",
+ "Paper",
+ "Stromatolite",
+ "Teal",
+ "Textured",
+ "Turquoise",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dstm-541-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_mru-3296_8-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_mru-3296_8-jpg",
+ "title": "Marlu - Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mru-3296_8.jpg?v=1762301619",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Geometric",
+ "Gray",
+ "Marlu",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_mru-3296_8-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5015m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5015m-jpg",
+ "title": "Ballari Mylar - Buff | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5015M.jpg?v=1762287971",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5015m-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kam-5098-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kam-5098-jpg",
+ "title": "Kami - Copper | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kam-5098.jpg?v=1762298243",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Contract",
+ "Copper",
+ "geometric",
+ "Kami",
+ "Metallic",
+ "Orange",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kam-5098-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58158",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58158",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58158-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725515",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Gold",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Metallic Gold",
+ "Natural Look",
+ "Neutral",
+ "Striped",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58158"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58155",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58155",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58155-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725434",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58155"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12905",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12905",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Maison Argent",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9ccc6e8f1d2d741b91faf46f439bd12f.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Beige",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gold",
+ "Lattice",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 99.06,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12905"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_br009-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_br009-jpg",
+ "title": "Burnished Metallic | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/br009.jpg?v=1762288727",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Brown",
+ "Burnished Metallic",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gray",
+ "Metallic",
+ "Scuffmaster",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_br009-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dvts-522-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dvts-522-jpg",
+ "title": "Vista - Snow | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dvts-522.jpg?v=1762293138",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Geometric",
+ "Light Gray",
+ "Minimalist",
+ "Mylar",
+ "Paper",
+ "Snow",
+ "Vista",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dvts-522-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_grv-2902_8-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_grv-2902_8-jpg",
+ "title": "Grove - Nickel | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grv-2902_8.jpg?v=1762296600",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Grove",
+ "Metallic",
+ "Nickel",
+ "Silver",
+ "Stripe",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_grv-2902_8-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_br013-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_br013-jpg",
+ "title": "Burnished Metallic | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/br013.jpg?v=1762288841",
+ "tags": [
+ "Architectural",
+ "Bronze",
+ "Brown",
+ "Burnished Metallic",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Industrial",
+ "Metallic",
+ "Scuffmaster",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_br013-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_bbo-4955-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_bbo-4955-jpg",
+ "title": "Bilbao - Platinum | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bbo-4955.jpg?v=1762287470",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Bilbao",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Mylar",
+ "Platinum",
+ "Stripe",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_bbo-4955-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58166",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58166",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58166-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725720",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Champagne",
+ "Coastal",
+ "Color: Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Cream",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Beige",
+ "Linen Texture",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Sand",
+ "Serene",
+ "Stripe",
+ "Tan",
+ "Textured",
+ "Traditional",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58166"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_mass-5780-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_mass-5780-jpg",
+ "title": "Mass - Mahogany | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mass-5780.jpg?v=1762300268",
+ "tags": [
+ "23% Nylon",
+ "36% Wool",
+ "37% Cotton",
+ "4% Polyester",
+ "Abstract",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Cotton",
+ "Gold",
+ "Mahogany",
+ "Mass",
+ "Metallic",
+ "Red",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Woven Upholstery",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_mass-5780-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dnuv-511-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dnuv-511-jpg",
+ "title": "Digital Nouveau - Silver Sand | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dnuv-511.jpg?v=1762291189",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Art Deco",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Digital Curated",
+ "Digital Nouveau",
+ "Geometric",
+ "Lattice",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Silver Sand",
+ "Tan",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dnuv-511-jpg"
+ },
+ {
+ "sku": "dwkk-139597",
+ "handle": "dwkk-139597",
+ "title": "Chalet - Ivory/Gold Ivory By Lee Jofa Modern | Kelly Wearstler Wallpapers Ii | Modern Wallcovering",
+ "vendor": "Lee Jofa",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3502_164_3550e42f-ed14-4cb0-9d22-1c628bf1d6ca.jpg?v=1753291540",
+ "tags": [
+ "27In",
+ "AI-Analyzed-v2",
+ "Almond",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "Beige",
+ "Chalet",
+ "Commercial",
+ "Contemporary",
+ "display_variant",
+ "Geometric",
+ "Gold",
+ "Gwp-3502.164.0",
+ "Ivory",
+ "Ivory/Gold",
+ "Lee Jofa",
+ "Lee Jofa Modern",
+ "Lemon",
+ "Luxury",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Paper - 100%",
+ "Pattern",
+ "United States",
+ "Wallcovering",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-139597"
+ },
+ {
+ "sku": "mica-madness-real-cork-chip-wallpapers-mic-98624",
+ "handle": "mica-madness-real-cork-chip-wallpapers-mic-98624",
+ "title": "Mica Madness Real Cork Chip s | Phillipe Romano",
+ "vendor": "Phillipe Romano",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/747552c419b9120a603da7474b097fae.jpg?v=1775083068",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Bathroom",
+ "Bedroom",
+ "Commercial",
+ "Contemporary",
+ "Cork",
+ "Gray",
+ "Light Blue",
+ "Living Room",
+ "Metallic",
+ "Mica",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Naturals",
+ "Office",
+ "Phillipe Romano",
+ "Phillipe Romano Naturals",
+ "Silver",
+ "Textural",
+ "Textured",
+ "Wallcovering",
+ "White",
+ "Wuhan Woven Wallcovering"
+ ],
+ "max_price": 34.12,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/mica-madness-real-cork-chip-wallpapers-mic-98624"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dprh-502-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dprh-502-jpg",
+ "title": "Perch - Smokey | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dprh-502.jpg?v=1762291563",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Geometric",
+ "Mylar",
+ "Perch",
+ "Smokey",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dprh-502-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_am11390-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_am11390-jpg",
+ "title": "AMBIENT METALLIC | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/am11390.jpg?v=1762358658",
+ "tags": [
+ "AMBIENT METALLIC",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Khaki",
+ "Metallic",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_am11390-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_sm8005-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_sm8005-jpg",
+ "title": "SOLID METAL | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/sm8005.jpg?v=1762358770",
+ "tags": [
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gold",
+ "Metallic",
+ "Solid",
+ "SOLID METAL",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_sm8005-jpg"
+ },
+ {
+ "sku": "crushed-costoluto-vinyl-dwx-58009",
+ "handle": "crushed-costoluto-vinyl-dwx-58009",
+ "title": "Crushed Costoluto Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58009-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709696",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contract",
+ "Contract Wallcovering",
+ "Crushed",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Organic",
+ "Texture",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/crushed-costoluto-vinyl-dwx-58009"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_atp-4701-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_atp-4701-jpg",
+ "title": "Allotrope - Limestone | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/atp-4701.jpg?v=1762287348",
+ "tags": [
+ "100% Mylar",
+ "Allotrope",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Geometric",
+ "Khaki",
+ "Lattice",
+ "Limestone",
+ "Mylar",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_atp-4701-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5121-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5121-jpg",
+ "title": "Kabuto - Corten | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5121.jpg?v=1762298755",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Corten",
+ "Industrial",
+ "Kabuto",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5121-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dnuv-512-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dnuv-512-jpg",
+ "title": "Digital Nouveau - Gunmetal | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dnuv-512.jpg?v=1762291227",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Art Deco",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Copper",
+ "Digital Curated",
+ "Digital Nouveau",
+ "Geometric",
+ "Gray",
+ "Lattice",
+ "Mylar",
+ "Orange",
+ "Paper",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dnuv-512-jpg"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58168",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58168",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58168-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724221",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Taupe",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58168"
+ },
+ {
+ "sku": "word-walls-scr-8126",
+ "handle": "word-walls-scr-8126",
+ "title": "Word Walls",
+ "vendor": "Maison Argent",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/035314c024143a7310f65960cd6d4d93.jpg?v=1572309108",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Contemporary",
+ "Designer Wallcoverings",
+ "Gold",
+ "Luxury Screen Printed Wallpapers",
+ "Metallic",
+ "Paper",
+ "Screen Print",
+ "Textured",
+ "Wallcovering",
+ "Whimsical Screen Prints Vol. 1",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 263.82,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/word-walls-scr-8126"
+ },
+ {
+ "sku": "dwtt-80999-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-80999-designer-wallcoverings-los-angeles",
+ "title": "Charlotte Raffia Black and Metallic Silver Wallcovering",
+ "vendor": "Anna French",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Nara-CharlotteRaffiaWP-01-GCR.jpg?v=1770341584",
+ "tags": [
+ "AT9842",
+ "Bedroom",
+ "Black",
+ "Calm",
+ "Charcoal",
+ "Charlotte Geomteric Fret Natural Raffia",
+ "Charlotte Geomteric Fret Natural Raffia Black",
+ "Contemporary",
+ "Cool Gray",
+ "Dining Room",
+ "Dove Gray",
+ "Elegant",
+ "Entryway",
+ "Geometric",
+ "Ivory",
+ "Light Gray",
+ "Living Room",
+ "Medium Gray",
+ "Medium Scale",
+ "Metallic",
+ "Metallic Silver",
+ "Modern",
+ "Nara",
+ "Neutral",
+ "Off-White",
+ "Office",
+ "Pattern",
+ "Pewter",
+ "Powder Room",
+ "Refined",
+ "Silver",
+ "Sophisticated",
+ "Thibaut Wallcovering",
+ "Transitional",
+ "Wallcovering",
+ "Warm Gray"
+ ],
+ "max_price": 215.02,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-80999-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5127-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5127-jpg",
+ "title": "Kabuto - Amazonite | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5127.jpg?v=1762298972",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Amazonite",
+ "Architectural",
+ "Black",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Kabuto",
+ "Metallic",
+ "Mylar",
+ "Teal",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5127-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_mass-5779-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_mass-5779-jpg",
+ "title": "Mass - Lake | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mass-5779.jpg?v=1762300233",
+ "tags": [
+ "23% Nylon",
+ "36% Wool",
+ "37% Cotton",
+ "4% Polyester",
+ "Abstract",
+ "Architectural",
+ "Blue",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Cotton",
+ "Lake",
+ "Mass",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Woven Upholstery"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_mass-5779-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_blr-5020m-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_blr-5020m-jpg",
+ "title": "Ballari Mylar - Bronze | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/blr-5020M.jpg?v=1762288157",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Ballari Mylar",
+ "Black",
+ "Bronze",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gray",
+ "Industrial",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_blr-5020m-jpg"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-6",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-6",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-6.jpg?v=1736199375",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Gray",
+ "Immersion-6",
+ "Innovations USA",
+ "Metallic",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-6"
+ },
+ {
+ "sku": "dwtt-71978-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-71978-designer-wallcoverings-los-angeles",
+ "title": "Wallcoverings Natural | Thibaut",
+ "vendor": "Thibaut",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T10060_cf532b0a-d446-4aae-90c4-29401cc089ea.jpg?v=1733893030",
+ "tags": [
+ "Bedroom",
+ "Beige",
+ "Calm",
+ "Damask",
+ "Dining Room",
+ "Gold",
+ "Grasscloth",
+ "Ivory",
+ "Living Room",
+ "Medium Scale",
+ "Metallic",
+ "Natural",
+ "Pattern",
+ "REVIEW",
+ "Sophisticated",
+ "T10060",
+ "Thibaut",
+ "Thibaut Wallcoverings",
+ "Traditional",
+ "Wallcovering",
+ "Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-71978-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "dwtt-71232-designer-wallcoverings-los-angeles",
+ "handle": "dwtt-71232-designer-wallcoverings-los-angeles",
+ "title": "Pravata Damask Smoke on Foil - Foil Wallcovering | Thibaut",
+ "vendor": "Thibaut",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T89177.jpg?v=1762227888",
+ "tags": [
+ "Architectural",
+ "Bedroom",
+ "beige",
+ "Champagne",
+ "Charcoal",
+ "Damask",
+ "Damask Resource 4",
+ "Dining Room",
+ "Floral",
+ "Foil",
+ "Grandmillennial",
+ "gray",
+ "Grey",
+ "Living Room",
+ "Pattern",
+ "Pravata Damask Smoke on",
+ "Rustic",
+ "Scroll",
+ "Sophisticated",
+ "T89177",
+ "Thibaut",
+ "Traditional",
+ "Victorian",
+ "Vinyl",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwtt-71232-designer-wallcoverings-los-angeles"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dprh-501-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dprh-501-jpg",
+ "title": "Perch - Dusk | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dprh-501.jpg?v=1762291526",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Dusk",
+ "Geometric",
+ "Gray",
+ "Light Gray",
+ "Mylar",
+ "Paper",
+ "Perch",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dprh-501-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58157",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58157",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58157-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725488",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Natural",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58157"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dvts-521-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dvts-521-jpg",
+ "title": "Vista - Midnight | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dvts-521.jpg?v=1762293104",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Black",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Geometric",
+ "Gray",
+ "Midnight",
+ "Minimalist",
+ "Mylar",
+ "Paper",
+ "Vista",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dvts-521-jpg"
+ },
+ {
+ "sku": "lost-adventure-quartz-wp-clarke-and-clarke",
+ "handle": "lost-adventure-quartz-wp-clarke-and-clarke",
+ "title": "Lost Adventure Quartz Wp | Clarke and Clarke",
+ "vendor": "Clarke and Clarke",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W0201_02_CAC.jpg?v=1776818912",
+ "tags": [
+ "abstract",
+ "Clarke and Clarke",
+ "Kravet",
+ "metallic",
+ "mineral",
+ "New Arrival",
+ "Origin: United Kingdom",
+ "Print",
+ "quartz",
+ "textured",
+ "Wallcovering"
+ ],
+ "max_price": 1313.55,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/lost-adventure-quartz-wp-clarke-and-clarke"
+ },
+ {
+ "sku": "ncw4308-02",
+ "handle": "ncw4308-02",
+ "title": "Les Rêves Portavo Grey/Ivory - Grey Wallcovering | Nina Campbell",
+ "vendor": "Nina Campbell",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_4497263132723.jpg?v=1775520419",
+ "tags": [
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Geometric",
+ "Gray",
+ "Metallic",
+ "NCW4308-02",
+ "Nina Campbell Wallcovering",
+ "Nina Campbell Wallcoverings",
+ "Paper",
+ "Silver",
+ "Traditional",
+ "Wallcovering",
+ "Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ncw4308-02"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kam-5101-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kam-5101-jpg",
+ "title": "Kami - Gold Leaf | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kam-5101.jpg?v=1762298354",
+ "tags": [
+ "100% Vinyl",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Embossed",
+ "Geometric",
+ "Gold",
+ "Gold Leaf",
+ "Kami",
+ "Metallic",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kam-5101-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dstm-540-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dstm-540-jpg",
+ "title": "Stromatolite - Mercury | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dstm-540.jpg?v=1762292359",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Black",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Digital Curated",
+ "Gold",
+ "Mercury",
+ "Mylar",
+ "Paper",
+ "Red",
+ "Stromatolite",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dstm-540-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5125-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5125-jpg",
+ "title": "Kabuto - Tungsten | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5125.jpg?v=1762298899",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gray",
+ "Industrial",
+ "Kabuto",
+ "Mylar",
+ "Silver",
+ "Textured",
+ "Tungsten",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5125-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58161",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58161",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58161-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725591",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Brown",
+ "Color: Brown",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Brown",
+ "Linen Texture",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Serene",
+ "Stripe",
+ "Tan",
+ "Taupe",
+ "Textured",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58161"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58171",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58171",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58171-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724297",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "Gray",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58171"
+ },
+ {
+ "sku": "montgomery-metallic-cubed-durable-walls-xwp-52674",
+ "handle": "montgomery-metallic-cubed-durable-walls-xwp-52674",
+ "title": "Montgomery Metallic Cubed Durable | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwp-52674-sample-montgomery-metallic-cubed-durable-hollywood-wallcoverings.jpg?v=1775726364",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Geometric",
+ "Hollywood Wallcoverings",
+ "Lattice",
+ "Leed Walls",
+ "Metallic",
+ "Tan",
+ "Textured",
+ "Vinyl",
+ "Wallcovering"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/montgomery-metallic-cubed-durable-walls-xwp-52674"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58164",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58164",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58164-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725666",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Blue",
+ "Color: Blue",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Gray",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Gray",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Serene",
+ "Silver",
+ "Stripe",
+ "Teal",
+ "Textured",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58164"
+ },
+ {
+ "sku": "dwkk-g5c51fc4a",
+ "handle": "dwkk-g5c51fc4a",
+ "title": "W3723-4 Gold | Kravet Design | Ronald Redding |Geometric Wallcovering Print",
+ "vendor": "Kravet",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W3723_4_b0a8d57b-5e2b-4e81-826b-7e386c8a0fd6.jpg?v=1753292060",
+ "tags": [
+ "27In",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "display_variant",
+ "Geometric",
+ "Gold",
+ "Kravet",
+ "Kravet Design",
+ "Metallic",
+ "Paper - 100%",
+ "Print",
+ "Ronald Redding",
+ "Textured",
+ "United States",
+ "Vinyl",
+ "W3723-4",
+ "W3723.4.0",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-g5c51fc4a"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58156",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58156",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58156-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725462",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "Gray",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Light Gray",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Striped",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58156"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58172",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58172",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58172-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724324",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Natural",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58172"
+ },
+ {
+ "sku": "camila-light-blue-modern-damask-wallpaper-wallpaper-cca-82847",
+ "handle": "camila-light-blue-modern-damask-wallpaper-wallpaper-cca-82847",
+ "title": "Camila Light Blue Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6c08383b1e77c931a2bcfe945ac409bb.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Contemporary",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "LA Walls",
+ "Light Blue",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-light-blue-modern-damask-wallpaper-wallpaper-cca-82847"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_gsg9-5384-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_gsg9-5384-jpg",
+ "title": "Glasgow - Gold | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gsg9-5384.jpg?v=1762296743",
+ "tags": [
+ "100% Vinyl",
+ "abstract",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Contract",
+ "geometric",
+ "Glasgow",
+ "Gold",
+ "Metallic",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_gsg9-5384-jpg"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58167",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58167",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58167-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724195",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Horizontal",
+ "Hospitality",
+ "Light Beige",
+ "Metallic",
+ "Minimalist",
+ "Natural Look",
+ "Neutral",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58167"
+ },
+ {
+ "sku": "ncw4308-04",
+ "handle": "ncw4308-04",
+ "title": "Les Rêves Portavo Coral/Ivory - Orange Wallcovering | Nina Campbell",
+ "vendor": "Nina Campbell",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_4497263198259.jpg?v=1775520432",
+ "tags": [
+ "Architectural",
+ "Chinoiserie",
+ "Class A Fire Rated",
+ "Commercial",
+ "Coral",
+ "Geometric",
+ "Metallic",
+ "NCW4308-04",
+ "Nina Campbell Wallcovering",
+ "Nina Campbell Wallcoverings",
+ "Paper",
+ "Pink",
+ "Silver",
+ "Wallcovering",
+ "Wallcoverings",
+ "White"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ncw4308-04"
+ },
+ {
+ "sku": "crushed-costoluto-vinyl-dwx-58006",
+ "handle": "crushed-costoluto-vinyl-dwx-58006",
+ "title": "Crushed Costoluto Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58006-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709686",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Crushed",
+ "Dark Gold",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Organic",
+ "Texture",
+ "Textured",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/crushed-costoluto-vinyl-dwx-58006"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58159",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58159",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58159-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725544",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Black",
+ "Charcoal",
+ "Color: Black",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Conference Room",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Dark Brown",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Gray",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Hotel Lobby",
+ "Light Grey",
+ "Metallic",
+ "Minimalist",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Office",
+ "Solid",
+ "Sophisticated",
+ "Stripe",
+ "Textured",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58159"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58162",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58162",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58162-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725617",
+ "tags": [
+ "54\" Width",
+ "Animal",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Color: Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Cream",
+ "Ecru",
+ "Embossed Texture",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Insects",
+ "Light Beige",
+ "Light Gray",
+ "Linen",
+ "Linen Texture",
+ "Living Room",
+ "Metallic",
+ "Minimalist",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Off-white",
+ "Organic Modern",
+ "Pale Blue",
+ "Pale Grey",
+ "Serene",
+ "Stripe",
+ "Textured",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58162"
+ },
+ {
+ "sku": "camila-moss-modern-damask-wallpaper-wallpaper-cca-82844",
+ "handle": "camila-moss-modern-damask-wallpaper-wallpaper-cca-82844",
+ "title": "Camila Moss Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f732d6dcd610b98c6c3fc5ab2da0a651.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "Gold",
+ "Gray",
+ "LA Walls",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Textured",
+ "Traditional",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04",
+ "Yellow"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-moss-modern-damask-wallpaper-wallpaper-cca-82844"
+ },
+ {
+ "sku": "ernesto-s-retro-geometric-scr-8065",
+ "handle": "ernesto-s-retro-geometric-scr-8065",
+ "title": "Ernesto's Retro Geometric",
+ "vendor": "Maison Argent",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1b2f9d59b3240946335ea39c1bc32d5d.jpg?v=1572309106",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Floral",
+ "Gold",
+ "Luxury Screen Printed Wallpapers",
+ "Metallic",
+ "Moss",
+ "Paper",
+ "Screen Print",
+ "Traditional",
+ "Vine",
+ "Wallcovering",
+ "Whimsical Screen Prints Vol. 1",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 216.71,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ernesto-s-retro-geometric-scr-8065"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5126-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5126-jpg",
+ "title": "Kabuto - Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5126.jpg?v=1762298936",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gold",
+ "Gray",
+ "Industrial",
+ "Kabuto",
+ "Metallic",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5126-jpg"
+ },
+ {
+ "sku": "dwkk-139813",
+ "handle": "dwkk-139813",
+ "title": "Visby Paper - Juniper Teal By Lee Jofa | Merkato |Global Wallcovering Print",
+ "vendor": "Lee Jofa",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2017109_354_2a16e49b-2d4c-4ae0-be35-55469864c219.jpg?v=1753291225",
+ "tags": [
+ "27In",
+ "Architectural",
+ "Archived-Triple-Verified",
+ "Archived-Vendor-Gone",
+ "Art Deco",
+ "Blue",
+ "Chevron",
+ "Commercial",
+ "Dark Green",
+ "display_variant",
+ "Geometric",
+ "Global",
+ "Gold",
+ "Green",
+ "Juniper",
+ "Lee Jofa",
+ "Luxury",
+ "Merkato",
+ "Metallic",
+ "Multi",
+ "P2017109.354.0",
+ "Paper",
+ "Paper - 100%",
+ "Pattern",
+ "Print",
+ "Teal",
+ "Turquoise",
+ "United States",
+ "Visby Paper",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/dwkk-139813"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5124-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5124-jpg",
+ "title": "Kabuto - Steel | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5124.jpg?v=1762298865",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contract",
+ "Gray",
+ "Industrial",
+ "Kabuto",
+ "Metallic",
+ "Mylar",
+ "Silver",
+ "Steel",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5124-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dprh-500-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dprh-500-jpg",
+ "title": "Perch - Blush | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dprh-500.jpg?v=1762291488",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Digital Curated",
+ "Mylar",
+ "Perch",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dprh-500-jpg"
+ },
+ {
+ "sku": "nautilus-by-innovations-usa-dwc-nautilus-2",
+ "handle": "nautilus-by-innovations-usa-dwc-nautilus-2",
+ "title": "Nautilus | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Nautilus-2.jpg?v=1736198902",
+ "tags": [
+ "AI-Analyzed-v2",
+ "Architectural",
+ "ASTM E84",
+ "Avocado",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Foil",
+ "Gold",
+ "Innovations USA",
+ "Light Gray",
+ "Metal Leaf",
+ "Metallic",
+ "Moss",
+ "Nautilus",
+ "Nautilus-2",
+ "Textured",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/nautilus-by-innovations-usa-dwc-nautilus-2"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_am10331-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_am10331-jpg",
+ "title": "Ambient Metallic | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/am10331.jpg?v=1762285264",
+ "tags": [
+ "Abstract",
+ "Ambient Metallic",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Gray",
+ "Metallic",
+ "Scuffmaster",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_am10331-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dech-491-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dech-491-jpg",
+ "title": "Digital Echo - Gray Blush | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dech-491.jpg?v=1762291005",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Digital Curated",
+ "Digital Echo",
+ "Geometric",
+ "Gray Blush",
+ "Herringbone",
+ "Mylar",
+ "Paper",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dech-491-jpg"
+ },
+ {
+ "sku": "immersion-by-innovations-usa-dwc-immersion-1",
+ "handle": "immersion-by-innovations-usa-dwc-immersion-1",
+ "title": "Immersion | Innovations USA",
+ "vendor": "Innovations USA",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Immersion-1.jpg?v=1736199381",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "ASTM E84",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Gold",
+ "Immersion-1",
+ "Innovations USA",
+ "Metallic",
+ "Paper",
+ "Wallcovering",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/immersion-by-innovations-usa-dwc-immersion-1"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12907",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12907",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Maison Argent",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/3547fe79068d43fd86725b501b7c7f01.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gray",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Silver",
+ "Stripe",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering"
+ ],
+ "max_price": 142.16,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12907"
+ },
+ {
+ "sku": "velluto-wheat-metallic-grasscloth-wallcovering-fentucci",
+ "handle": "velluto-wheat-metallic-grasscloth-wallcovering-fentucci",
+ "title": "Velluto Wheat Metallic Grasscloth Wallcovering | Fentucci",
+ "vendor": "Fentucci",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GRS-26570.jpg?v=1776879780",
+ "tags": [
+ "Fentucci",
+ "Grasscloth",
+ "Metallic",
+ "new-onboard",
+ "sample-only",
+ "Texture",
+ "Velluto",
+ "Wallcovering",
+ "Wheat"
+ ],
+ "max_price": 5,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/velluto-wheat-metallic-grasscloth-wallcovering-fentucci"
+ },
+ {
+ "sku": "wells-sand-candy-stripe-wallpaper-cca-83229",
+ "handle": "wells-sand-candy-stripe-wallpaper-cca-83229",
+ "title": "Wells Sand Candy Stripe Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1396ca09641c9d6118bac50a4d9805b3.jpg?v=1572309981",
+ "tags": [
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Cream",
+ "Discontinued",
+ "Easy Walls",
+ "Gold",
+ "LA Walls",
+ "Metallic",
+ "Prepasted",
+ "Series: Brewster",
+ "Stripe",
+ "Stripes",
+ "Strippable",
+ "Textured",
+ "Traditional",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "White",
+ "YB-Discontinued-2026-04",
+ "Yellow"
+ ],
+ "max_price": 79.99,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wells-sand-candy-stripe-wallpaper-cca-83229"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58163",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58163",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58163-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725643",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Bedroom",
+ "Beige",
+ "Brown",
+ "Champagne",
+ "Coastal",
+ "Color: Gold",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Gold",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Grasscloth Weave",
+ "Gray",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Light Beige",
+ "Living Room",
+ "Metallic",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Sand",
+ "Silver",
+ "Stripe",
+ "Tan",
+ "Taupe",
+ "Textured",
+ "Traditional",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Warm",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58163"
+ },
+ {
+ "sku": "constantino-crackle-vinyl-dwx-58078",
+ "handle": "constantino-crackle-vinyl-dwx-58078",
+ "title": "Constantino Crackle Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58078-sample-constantino-crackle-vinyl-hollywood-wallcoverings.jpg?v=1775708783",
+ "tags": [
+ "54\" Width",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contract",
+ "Contract Wallcovering",
+ "Crackle",
+ "Distressed",
+ "Gold",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Neutral",
+ "Texture",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/constantino-crackle-vinyl-dwx-58078"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5122-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5122-jpg",
+ "title": "Kabuto - Abalone | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5122.jpg?v=1762298791",
+ "tags": [
+ "100% Mylar",
+ "Abalone",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gray",
+ "Kabuto",
+ "Mylar",
+ "Silver",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5122-jpg"
+ },
+ {
+ "sku": "faux-wild-rice-fwr-9373",
+ "handle": "faux-wild-rice-fwr-9373",
+ "title": "Faux Wild Rice | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fwr-9373-sample-faux-wild-rice-hollywood-wallcoverings.jpg?v=1775712096",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Black",
+ "Commercial",
+ "Commercial - Cleanable",
+ "Contemporary",
+ "Elegant Vinyls Vol. 1",
+ "Faux Finish",
+ "Gold",
+ "Grasscloth",
+ "Hollywood Wallcoverings",
+ "Metallic",
+ "Textured",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 36.73,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/faux-wild-rice-fwr-9373"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58169",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58169",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58169-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724247",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Grasscloth",
+ "hollywood",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Metallic",
+ "Natural Look",
+ "Neutral",
+ "Silver",
+ "Striped",
+ "Textured",
+ "Traditional",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58169"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dvts-520-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dvts-520-jpg",
+ "title": "Vista - Steel | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dvts-520_180b4f1b-726f-4084-be61-2f8fadaa5bef.jpg?v=1762293070",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Art Deco",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Dark Blue-gray",
+ "Digital Curated",
+ "Geometric",
+ "Mylar",
+ "Paper",
+ "Silver",
+ "Steel",
+ "Vista",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dvts-520-jpg"
+ },
+ {
+ "sku": "regal-lattice-screen-printed-wallpaper-tre-12908",
+ "handle": "regal-lattice-screen-printed-wallpaper-tre-12908",
+ "title": "Regal Lattice - Screen Printed Wallcovering",
+ "vendor": "Maison Argent",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/09620171f63a6edf9af7fcb2057d1f67.jpg?v=1572309178",
+ "tags": [
+ "Architectural",
+ "Art Deco",
+ "Commercial",
+ "Designer Wallcoverings",
+ "Geometric",
+ "Gold",
+ "Gray",
+ "Lattice",
+ "Metallic",
+ "Modern",
+ "Paper",
+ "Screen Print",
+ "Suede",
+ "Textured",
+ "Trellis",
+ "Wallcovering",
+ "Yellow"
+ ],
+ "max_price": 99.06,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/regal-lattice-screen-printed-wallpaper-tre-12908"
+ },
+ {
+ "sku": "le-embossed-faux-grasscloth-xgr-6205",
+ "handle": "le-embossed-faux-grasscloth-xgr-6205",
+ "title": "Le Embossed Faux Grasscloth | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xgr-6205-sample-le-embossed-faux-grasscloth-hollywood-wallcoverings.jpg?v=1775721644",
+ "tags": [
+ "Amber",
+ "Apricot",
+ "Beige",
+ "Blonde",
+ "Brass",
+ "Bronze",
+ "Butterscotch",
+ "Chestnut",
+ "Commercially Cleanable",
+ "Embossed",
+ "Embossed Texture",
+ "Faux Finish",
+ "Faux Grasscloth",
+ "Gold",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Honey",
+ "Le Embossed Faux Grasscloth",
+ "Metallic",
+ "Natural",
+ "Natural Texture",
+ "Ochre",
+ "Saffron",
+ "Tan",
+ "Textured",
+ "Umber",
+ "Wallcovering",
+ "Wheat"
+ ],
+ "max_price": 51.15,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/le-embossed-faux-grasscloth-xgr-6205"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_dbrq-300-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_dbrq-300-jpg",
+ "title": "Baroque - Tungsten | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DBRQ-300-Swatch.jpg?v=1762290794",
+ "tags": [
+ "100% Mylar",
+ "AI-Analyzed-v2",
+ "Architectural",
+ "Baroque",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Damask",
+ "Digital Curated",
+ "Geometric",
+ "Gray",
+ "Light Gray",
+ "Mylar",
+ "Paper",
+ "Tungsten",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_dbrq-300-jpg"
+ },
+ {
+ "sku": "camila-purple-modern-damask-wallpaper-wallpaper-cca-82841",
+ "handle": "camila-purple-modern-damask-wallpaper-wallpaper-cca-82841",
+ "title": "Camila Purple Modern Damask Wallcovering Wallcovering",
+ "vendor": "LA Walls",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/2bd0521a9c326717b2be9a7208ac5bf5_6b4ab5cc-72ea-4cbd-817d-decf3e308a55.jpg?v=1572309957",
+ "tags": [
+ "Architectural",
+ "Class A Fire Rated",
+ "Commercial",
+ "Contemporary",
+ "Damask",
+ "Damasks",
+ "Discontinued",
+ "Easy Walls",
+ "Floral",
+ "Gray",
+ "LA Walls",
+ "Metallic",
+ "Modern",
+ "Prepasted",
+ "Purple",
+ "Series: Brewster",
+ "Silver",
+ "Strippable",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Washable",
+ "YB-Discontinued-2026-04"
+ ],
+ "max_price": 75.49,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/camila-purple-modern-damask-wallpaper-wallpaper-cca-82841"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_bbo-4954-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_bbo-4954-jpg",
+ "title": "Bilbao - Yellow Gold | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bbo-4954.jpg?v=1762287433",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Bilbao",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Gold",
+ "Metallic",
+ "Mylar",
+ "Stripe",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow",
+ "Yellow Gold"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_bbo-4954-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_kbt-5123-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_kbt-5123-jpg",
+ "title": "Kabuto - Buff | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/kbt-5123.jpg?v=1762298828",
+ "tags": [
+ "100% Mylar",
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Contract",
+ "Cream",
+ "Gold",
+ "Industrial",
+ "Kabuto",
+ "Mylar",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "White",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_kbt-5123-jpg"
+ },
+ {
+ "sku": "milbanks-metallic-grasscloth-vinyl-dwx-58160",
+ "handle": "milbanks-metallic-grasscloth-vinyl-dwx-58160",
+ "title": "Milbanks Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58160-sample-milbanks-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775725567",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Brown",
+ "Champagne",
+ "Chocolate Brown",
+ "Color: Brown",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Estimated Type: Paper",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Hotel Lobby",
+ "Living Room",
+ "Luxe",
+ "Metallic",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Neoclassical",
+ "Solid",
+ "Sophisticated",
+ "Stripe",
+ "Taupe",
+ "Textured",
+ "Traditional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/milbanks-metallic-grasscloth-vinyl-dwx-58160"
+ },
+ {
+ "sku": "ncw4356-01",
+ "handle": "ncw4356-01",
+ "title": "Les Indiennes Fortoiseau Ivory/Gold - Gold Wallcovering | Nina Campbell",
+ "vendor": "Nina Campbell",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_4497265066035.jpg?v=1775520640",
+ "tags": [
+ "Animal/Insects",
+ "Architectural",
+ "Bird",
+ "Botanical",
+ "Class A Fire Rated",
+ "Commercial",
+ "Fauna",
+ "Gold",
+ "Metallic",
+ "NCW4356-01",
+ "Nina Campbell Wallcovering",
+ "Nina Campbell Wallcoverings",
+ "Paper",
+ "Traditional",
+ "Wallcovering",
+ "Wallcoverings",
+ "White",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/ncw4356-01"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_metm-576-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_metm-576-jpg",
+ "title": "Metamorphosis - Silver | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/metm-576.jpg?v=1762301094",
+ "tags": [
+ "39% Polyester",
+ "61% Olefin",
+ "Architectural",
+ "Beige",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "Contemporary",
+ "Geometric",
+ "Metallic",
+ "Metamorphosis",
+ "Olefin",
+ "Silver",
+ "Textile",
+ "Textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_metm-576-jpg"
+ },
+ {
+ "sku": "wolfgordonwallcovering_dwwg_gsg9-5383-jpg",
+ "handle": "wolfgordonwallcovering_dwwg_gsg9-5383-jpg",
+ "title": "Glasgow - Copper | Wolf Gordon Wallcoverings",
+ "vendor": "Wolf Gordon",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gsg9-5383.jpg?v=1762296706",
+ "tags": [
+ "100% Vinyl",
+ "abstract",
+ "Architectural",
+ "Brown",
+ "Class A Fire Rated",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Commercial Wallcoverings",
+ "contemporary",
+ "Contract",
+ "Copper",
+ "geometric",
+ "Glasgow",
+ "Gray",
+ "Metallic",
+ "Orange",
+ "textured",
+ "Vinyl",
+ "Wallcovering",
+ "Wolf Gordon",
+ "Wolf Gordon Wallcoverings"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/wolfgordonwallcovering_dwwg_gsg9-5383-jpg"
+ },
+ {
+ "sku": "benedict-canyon-sisal-hlw-73026",
+ "handle": "benedict-canyon-sisal-hlw-73026",
+ "title": "Benedict Canyon Sisal | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73026-sample-clean.jpg?v=1774483093",
+ "tags": [
+ "Architectural",
+ "Bathroom",
+ "Beige",
+ "Champagne",
+ "Color: Metallic",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Contemporary",
+ "Geometric",
+ "Glass Bead",
+ "Gray",
+ "Hallway",
+ "Hollywood Wallcoverings",
+ "Light Grey",
+ "Metallic",
+ "Modern",
+ "Mosaic",
+ "Natural",
+ "Natural Texture",
+ "Naturally Glamorous",
+ "Powder Room",
+ "Silver",
+ "Sisal",
+ "Sophisticated",
+ "Textured",
+ "Tile",
+ "Wallcovering",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 63.43,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/benedict-canyon-sisal-hlw-73026"
+ },
+ {
+ "sku": "always-room-for-ice-cream-small-mural-by-retro-walls-rtr-37217",
+ "handle": "always-room-for-ice-cream-small-mural-by-retro-walls-rtr-37217",
+ "title": "Always Room For Ice Cream Small Mural by Retro Walls",
+ "vendor": "Traditional Whimsy",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/products/02e8544327c89298ec5a27a291006a75.jpg?v=1572309701",
+ "tags": [
+ "Abstract",
+ "Architectural",
+ "Beige",
+ "Blue",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Green",
+ "Heavy-duty Wallcovering with paper top-layer and non-woven backing // Colourfast and washable with a soft cloth // Butted seam (but",
+ "Ice Cream Cone",
+ "Metallic",
+ "Multi",
+ "Mural",
+ "Paper",
+ "Pink",
+ "Retro",
+ "Textured",
+ "Traditional Whimsy",
+ "Wallcovering",
+ "Whimsical"
+ ],
+ "max_price": 84,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/always-room-for-ice-cream-small-mural-by-retro-walls-rtr-37217"
+ },
+ {
+ "sku": "martin-s-metallic-grasscloth-vinyl-dwx-58173",
+ "handle": "martin-s-metallic-grasscloth-vinyl-dwx-58173",
+ "title": "Martin's Metallic Grasscloth Vinyl | Hollywood Wallcoverings",
+ "vendor": "Hollywood Wallcoverings",
+ "product_type": "Wallcovering",
+ "image_url": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58173-sample-martin-s-metallic-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775724352",
+ "tags": [
+ "54\" Width",
+ "Architectural",
+ "Beige",
+ "Blue",
+ "Brown",
+ "Chocolate Brown",
+ "Color: Brown",
+ "Commercial",
+ "Commercial Wallcovering",
+ "Conference Room",
+ "Contemporary",
+ "Contract",
+ "Contract Wallcovering",
+ "Embossed Texture",
+ "Gold",
+ "Grasscloth",
+ "Grasscloth Texture",
+ "Grasscloth Wallcovering",
+ "Green",
+ "Hollywood Wallcoverings",
+ "Hospitality",
+ "Hotel Lobby",
+ "Living Room",
+ "Luxe",
+ "Luxurious",
+ "Metallic",
+ "Modern",
+ "Natural",
+ "Natural Look",
+ "Natural Texture",
+ "Navy Blue",
+ "Neoclassical",
+ "Olive Green",
+ "Solid",
+ "Stripe",
+ "Textured",
+ "Traditional",
+ "Transitional",
+ "Tropicana Durable Vinyls",
+ "Type 2 Durable Vinyl",
+ "Type 2 Vinyl",
+ "Vinyl",
+ "Wallcovering",
+ "Wide Width",
+ "Woven",
+ "Yellow"
+ ],
+ "max_price": 4.25,
+ "aesthetic": "all",
+ "product_url": "https://designerwallcoverings.com/products/martin-s-metallic-grasscloth-vinyl-dwx-58173"
+ }
+]
\ No newline at end of file
diff --git a/public/care.html b/public/care.html
new file mode 100644
index 0000000..988fb29
--- /dev/null
+++ b/public/care.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html lang="en"><head>
+<!-- editorial-gen v1 -->
+<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Care & installation — mylarwallpaper.com</title>
+<meta name="description" content="Care & installation — An atelier devoted to mylar.">
+<link rel="canonical" href="https://mylarwallpaper.com/care">
+<style>
+*{margin:0;padding:0;box-sizing:border-box}
+body{font-family:ui-serif;background:#FAF9F6;color:#1A1A1A;line-height:1.65;padding:60px 24px;min-height:100vh}
+.wrap{max-width:720px;margin:0 auto}
+.eyebrow{font-size:10px;letter-spacing:0.22em;text-transform:uppercase;color:#A98B5B;margin-bottom:18px}
+h1{font-family:'Tiempos Headline', serif;font-style:italic;font-size:48px;line-height:1.1;letter-spacing:-0.02em;color:#1A1A1A;margin-bottom:32px}
+h2{font-family:'Tiempos Headline', serif;font-size:22px;color:#A98B5B;margin:36px 0 12px;font-weight:500}
+p{margin-bottom:16px;color:#3a322c}
+ul{margin:12px 0 20px 18px}
+li{margin-bottom:8px;color:#3a322c}
+strong{color:#1A1A1A}
+a{color:#A98B5B;text-decoration:underline;text-underline-offset:3px}
+nav.foot{margin-top:56px;padding-top:24px;border-top:1px solid rgba(0,0,0,0.10);font-size:11px;letter-spacing:0.18em;text-transform:uppercase}
+nav.foot a{margin-right:22px;text-decoration:none}
+</style>
+</head><body>
+<div class="wrap">
+<div class="eyebrow">Editorial · care · Maison Argent</div>
+<h1>Care & installation</h1>
+<p>Maison Argent’s mylar wallcoverings demand precision in application and reverence in maintenance. These surfaces, crafted with meticulous attention to material integrity, reflect the atelier’s commitment to singular focus—mylar, in all its luminous, metallic elegance. Proper installation and care ensure their longevity, preserving the sheen and structural harmony of each roll. Below, a concise, unvarnished guide to their treatment.</p>
+
+<h2>Substrate Preparation</h2>
+<p>Surface readiness is nonnegotiable. Begin with a substrate that is flat, clean, and dry. Any residual dust, grease, or moisture will compromise adhesion. Use a mild detergent and water to scrub the surface, then rinse thoroughly and allow complete drying. For uneven surfaces, apply a leveling compound to ensure a uniform base. Avoid porous or absorbent substrates; mylar requires a stable, non-reactive foundation to maintain its reflective quality.</p>
+
+<h2>Paste Type</h2>
+<p>Only a water-based, high-adhesion paste suitable for nonporous surfaces should be used. Avoid oil-based or solvent-based adhesives, which may discolor or degrade the mylar over time. Apply the paste in thin, even layers to the back of the wallcovering, ensuring full coverage without pooling. Excess paste may leave unsightly residue or compromise the material’s integrity. Work swiftly but methodically, as mylar is sensitive to prolonged exposure to moisture.</p>
+
+<h2>Seam Handling</h2>
+<p>Seams must be treated with precision. Align edges meticulously, using a seam roller to press them flat and ensure adhesion. Avoid stretching the material, as this may warp its structure or create visible distortions. For seams that require overlap, trim the excess with a sharp utility knife, then apply a thin line of paste along the seam’s edge. Allow the paste to dry slightly before pressing the seam flat with a weighted roller. This ensures a seamless, uninterrupted surface.</p>
+
+<h2>Cleaning</h2>
+<p>Clean the surface with a soft, lint-free microfiber cloth and a mild, pH-neutral cleaner. Dampen the cloth slightly, then wipe in gentle, circular motions. Never use abrasive scrubbers, solvents, or excessive water, which may penetrate the mylar and weaken its backing. For stubborn stains, apply a diluted solution of water and a non-abrasive, non-ionic detergent, then blot immediately. Dry thoroughly with a clean cloth. Regular dusting with a dry duster is recommended to prevent particulate buildup.</p>
+
+<h2>Light Exposure</h2>
+<p>Direct sunlight may dull the mylar’s luster over time. Position the wallcovering away from unfiltered daylight, or install UV-protective window films to mitigate fading. In high-traffic or brightly lit areas, use sheer curtains or blinds to diffuse light. Avoid placing heat-emitting fixtures in close proximity; prolonged exposure to heat can cause warping or discoloration. Rotate or reposition the wallcovering periodically if it is exposed to inconsistent lighting.</p>
+
+<h2>Expected Lifespan</h2>
+<p>With proper installation and care, Maison Argent’s mylar wallcoverings may endure for 15–20 years. Their durability hinges on adherence to the above protocols. Avoid physical contact that may leave fingerprints or smudges, and maintain consistent environmental conditions—temperature and humidity fluctuations can affect the material’s stability. Regular inspections for wear, peeling, or discoloration are prudent. When damage occurs, replace the affected section immediately to preserve the overall composition.</p>
+<nav class="foot">
+<a href="/">Browse</a>
+<a href="/history">History</a>
+<a href="/vocabulary">Vocabulary</a>
+<a href="/sourcing">Sourcing</a>
+<a href="/care">Care</a>
+<a href="/trade">Trade</a>
+<a href="/about">About</a>
+</nav>
+</div></body></html>
\ No newline at end of file
diff --git a/public/history.html b/public/history.html
new file mode 100644
index 0000000..7646eb8
--- /dev/null
+++ b/public/history.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en"><head>
+<!-- editorial-gen v1 -->
+<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>A short history — mylarwallpaper.com</title>
+<meta name="description" content="A short history — An atelier devoted to mylar.">
+<link rel="canonical" href="https://mylarwallpaper.com/history">
+<style>
+*{margin:0;padding:0;box-sizing:border-box}
+body{font-family:ui-serif;background:#FAF9F6;color:#1A1A1A;line-height:1.65;padding:60px 24px;min-height:100vh}
+.wrap{max-width:720px;margin:0 auto}
+.eyebrow{font-size:10px;letter-spacing:0.22em;text-transform:uppercase;color:#A98B5B;margin-bottom:18px}
+h1{font-family:'Tiempos Headline', serif;font-style:italic;font-size:48px;line-height:1.1;letter-spacing:-0.02em;color:#1A1A1A;margin-bottom:32px}
+h2{font-family:'Tiempos Headline', serif;font-size:22px;color:#A98B5B;margin:36px 0 12px;font-weight:500}
+p{margin-bottom:16px;color:#3a322c}
+ul{margin:12px 0 20px 18px}
+li{margin-bottom:8px;color:#3a322c}
+strong{color:#1A1A1A}
+a{color:#A98B5B;text-decoration:underline;text-underline-offset:3px}
+nav.foot{margin-top:56px;padding-top:24px;border-top:1px solid rgba(0,0,0,0.10);font-size:11px;letter-spacing:0.18em;text-transform:uppercase}
+nav.foot a{margin-right:22px;text-decoration:none}
+</style>
+</head><body>
+<div class="wrap">
+<div class="eyebrow">Editorial · history · Maison Argent</div>
+<h1>A short history</h1>
+<p>Mylar, a material born of mid-century innovation, has carved a niche in the annals of design history not through ubiquity, but through its capacity to transform the very essence of space. Unlike traditional wallcoverings, mylar’s journey is one of precision, a narrative of surfaces that shimmer, reflect, and refract light in ways that defy the static expectations of the past. Its arc spans decades, from the experimental halls of early modernism to the sleek interiors of postwar America, and now to the curated salons of contemporary ateliers like Maison Argent. This is a story of a material that has never sought to blend in, but to command attention.</p>
+
+<h2>The Arts & Crafts Prelude</h2>
+
+<p>Though mylar itself did not emerge until the
+<nav class="foot">
+<a href="/">Browse</a>
+<a href="/history">History</a>
+<a href="/vocabulary">Vocabulary</a>
+<a href="/sourcing">Sourcing</a>
+<a href="/care">Care</a>
+<a href="/trade">Trade</a>
+<a href="/about">About</a>
+</nav>
+</div></body></html>
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index 9f14ac3..06e23ed 100644
--- a/public/index.html
+++ b/public/index.html
@@ -14,8 +14,8 @@
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<title>Maison Argent — An atelier devoted to mylar.</title>
-<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<title>mylarwallpaper — An atelier devoted to mylar.</title>
+<meta name="description" content="mylarwallpaper is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
<meta name="theme-color" content="#FAF9F6">
<link rel="canonical" href="https://mylarwallpaper.com/">
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
@@ -24,7 +24,7 @@
{
"@context": "https://schema.org",
"@type": "Organization",
- "name": "Maison Argent",
+ "name": "mylarwallpaper",
"url": "https://mylarwallpaper.com/",
"email": "info@mylarwallpaper.com"
}
@@ -227,7 +227,7 @@ textarea:focus-visible,
<header class="ns-header">
<a href="/" class="ns-brand" aria-label="Home">
<span class="ns-dot"></span>
- <span class="ns-name">Maison Argent</span>
+ <span class="ns-name">mylarwallpaper</span>
</a>
<nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
<a href="/">Home</a>
@@ -346,8 +346,8 @@ textarea:focus-visible,
<footer>
<div class="footer-grid">
<div>
- <div class="footer-brand">Maison Argent</div>
- <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <div class="footer-brand">mylarwallpaper</div>
+ <p class="footer-text">mylarwallpaper — real samples ship free.</p>
<p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
</div>
<div class="footer-col">
@@ -367,7 +367,7 @@ textarea:focus-visible,
</div>
</div>
<div class="footer-bottom">
- <span>mylarwallpaper.com · Maison Argent</span>
+ <span>mylarwallpaper.com · mylarwallpaper</span>
<span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
<span id="footerStat"></span>
</div>
diff --git a/public/index.html.bak.dwfoot.1778203445687 b/public/index.html.bak.dwfoot.1778203445687
new file mode 100644
index 0000000..5eb2293
--- /dev/null
+++ b/public/index.html.bak.dwfoot.1778203445687
@@ -0,0 +1,962 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@novasuede.com?subject=Novasuede%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@novasuede.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Mylar Wallpaper</div>
+ <p class="footer-text">Mylar Wallpaper is a specialty mylar archive within the Designer Wallcoverings family. Real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.bak.gtagev.1778426585356 b/public/index.html.bak.gtagev.1778426585356
new file mode 100644
index 0000000..d422087
--- /dev/null
+++ b/public/index.html.bak.gtagev.1778426585356
@@ -0,0 +1,970 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
+
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@mylarwallpaper.com?subject=Maison%20Argent%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@mylarwallpaper.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Maison Argent</div>
+ <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.bak.ns-canonical b/public/index.html.bak.ns-canonical
new file mode 100644
index 0000000..2299396
--- /dev/null
+++ b/public/index.html.bak.ns-canonical
@@ -0,0 +1,977 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
+
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@mylarwallpaper.com?subject=Maison%20Argent%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@mylarwallpaper.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Maison Argent</div>
+ <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ try { if (typeof gtag === 'function') gtag('event', 'modal_open', { modal_name: name, sku: (opts && opts.sku) || '' }); } catch(_){}
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ try {
+ if (typeof gtag === 'function') {
+ if (kind === 'sample') gtag('event', 'memo_request', { sku: data.sku || '', title: data.title || '' });
+ else gtag('event', 'lead', { form_type: kind });
+ }
+ } catch(_){}
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.bak.nspropagate.1778203385131 b/public/index.html.bak.nspropagate.1778203385131
new file mode 100644
index 0000000..721b720
--- /dev/null
+++ b/public/index.html.bak.nspropagate.1778203385131
@@ -0,0 +1,947 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<header class="ns-header">
+ <a href="#home" class="ns-brand" aria-label="Maison Argent home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="#home">Home</a>
+ <a href="#colors">Colors</a>
+ <a href="#specifications">Specifications</a>
+ <a href="fire-ratings.html">Fire Ratings</a>
+ <a href="faq.html">FAQ</a>
+ <a href="about.html">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@novasuede.com?subject=Novasuede%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@novasuede.com · Designer Wallcoverings</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Mylar Wallpaper</div>
+ <p class="footer-text">Mylar Wallpaper is a specialty mylar archive within the Designer Wallcoverings family. Real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.bak.nspropagate.1778209715067 b/public/index.html.bak.nspropagate.1778209715067
new file mode 100644
index 0000000..d8f6b9c
--- /dev/null
+++ b/public/index.html.bak.nspropagate.1778209715067
@@ -0,0 +1,962 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@novasuede.com?subject=Novasuede%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@novasuede.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Maison Argent</div>
+ <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.bak.nspropagate.1778226815166 b/public/index.html.bak.nspropagate.1778226815166
new file mode 100644
index 0000000..88584cc
--- /dev/null
+++ b/public/index.html.bak.nspropagate.1778226815166
@@ -0,0 +1,964 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@mylarwallpaper.com?subject=Maison%20Argent%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@mylarwallpaper.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Maison Argent</div>
+ <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.bak.nspropagate.1778226888816 b/public/index.html.bak.nspropagate.1778226888816
new file mode 100644
index 0000000..6c7469d
--- /dev/null
+++ b/public/index.html.bak.nspropagate.1778226888816
@@ -0,0 +1,966 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #A98B5B 0%, #5d4c32 60%, #332a1b 100%); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav { display: flex; gap: 32px; align-items: center; list-style: none; padding: 0; margin: 0; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; padding: 0 !important; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ @media (max-width: 820px) { .ns-header { padding: 14px 18px; } .ns-nav { gap: 16px; } .ns-nav a, .ns-nav button { font-size: 13px !important; } }
+ @media (max-width: 760px) {
+ .ns-header { flex-wrap: wrap; }
+ .ns-nav { display: none !important; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: 6px; padding: 14px 0 4px; }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button { padding: 10px 0 !important; border-bottom: 1px solid rgba(245,241,232,0.08); width: 100%; text-align: left; }
+ .ns-nav a:nth-child(n+5), .ns-nav button:nth-child(n+5) { display: block !important; }
+ .ns-header .mobile-toggle { display: flex !important; }
+ }
+ @media (min-width: 761px) {
+ .ns-header .mobile-toggle { display: none !important; }
+ }
+ .ns-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.78); z-index: 200; align-items: center; justify-content: center; padding: 24px; backdrop-filter: blur(6px); }
+ .ns-modal.show { display: flex; }
+ .ns-modal-card { max-width: 460px; width: 100%; background: #141414 !important; border: 1px solid rgba(245,241,232,0.14); border-radius: 6px; padding: 28px 30px 30px; position: relative; }
+ .ns-modal-card .close-x { position: absolute; top: 12px; right: 14px; width: 30px; height: 30px; background: none; border: 1px solid rgba(245,241,232,0.18); color: rgba(245,241,232,0.6) !important; border-radius: 50%; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; }
+ .ns-modal-card .close-x:hover { color: #ffffff !important; border-color: #ffffff; }
+ .ns-modal-card h3 { font-family: -apple-system, "SF Pro Display", system-ui; font-weight: 300 !important; font-size: 22px !important; margin: 0 0 6px !important; color: #f5f1e8 !important; }
+ .ns-modal-card .sub { color: rgba(245,241,232,0.65) !important; font-size: 13px; margin: 0 0 22px; }
+ .ns-actions { display: flex; flex-direction: column; gap: 10px; }
+ .ns-action { display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: rgba(245,241,232,0.04) !important; border: 1px solid rgba(245,241,232,0.12) !important; color: #f5f1e8 !important; text-decoration: none !important; cursor: pointer; transition: all 200ms; font: inherit; text-align: left; }
+ .ns-action:hover { background: rgba(245,241,232,0.08) !important; border-color: #d4b683 !important; }
+ .ns-action .ico { width: 32px; height: 32px; border-radius: 50%; background: rgba(212,182,131,0.12); display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
+ .ns-action .txt { flex: 1; }
+ .ns-action .txt b { display: block; font-weight: 500; font-size: 14px; color: #f5f1e8 !important; }
+ .ns-action .txt span { font-size: 12px; color: rgba(245,241,232,0.55) !important; }
+
+ /* ─── FINAL CONTRAST PASS — kill remaining gold-solid + white-island defects ─── */
+ /* Replace all gold-fill accents with off-white (Gucci-aesthetic, no DW gold solids) */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active,
+ .drapery-btn, .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover,
+ .drapery-btn:hover, .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ /* Gold accents stay only as edge color (links, glyphs) — not fills */
+ a { color: #d4b683; }
+ a:hover { color: #f5d97a; }
+ /* Authorized-dealer footer line — small caps tracked, muted ink, no gold pill */
+ .authorized, .authorized-dealer p {
+ background: transparent !important;
+ color: rgba(245,241,232,0.5) !important;
+ font-size: 10px !important;
+ letter-spacing: 0.22em !important;
+ text-transform: uppercase !important;
+ padding: 0 !important;
+ border: none !important;
+ margin-top: 14px !important;
+ }
+ /* Kill any straggler white bg in info-card / sample-related cards */
+ .info-card, .info-card-link, .care-highlight, .feature-card, .spec-item {
+ background-color: rgba(245,241,232,0.04) !important;
+ border-color: rgba(245,241,232,0.12) !important;
+ }
+ /* Ensure modal content stays readable — Steve's earlier sweep made it #141414 with white text */
+ .modal-content { background: #141414 !important; color: #f5f1e8 !important; }
+ .modal-content * { color: #f5f1e8 !important; }
+ .modal-content input, .modal-content textarea, .modal-content select {
+ background: rgba(245,241,232,0.05) !important;
+ color: #f5f1e8 !important;
+ border-color: rgba(245,241,232,0.2) !important;
+ }
+ .modal-content label { color: rgba(245,241,232,0.6) !important; }
+ /* Force the wide-tracked NOVASUEDE wordmark to stay white */
+ .ns-wordmark, .ns-wordmark sup { color: #f5f1e8 !important; }
+
+ /* ─── Modal-internal contrast (post-QA defects) ─── */
+ /* Backdrop covers full viewport */
+ .modal { width: 100vw !important; height: 100vh !important; left: 0 !important; top: 0 !important; background: rgba(0, 0, 0, 0.78) !important; backdrop-filter: blur(6px); }
+ /* Chip — flip from white-on-white island to dark card */
+ .request-chip {
+ background: rgba(245, 241, 232, 0.06) !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.18) !important;
+ border-radius: 4px !important;
+ }
+ .request-chip * { color: #f5f1e8 !important; }
+ .request-chip .chip-swatch {
+ /* swatch dot ALWAYS displays the inline-style hex from JS — fight any sweep */
+ border: 1px solid rgba(0, 0, 0, 0.4) !important;
+ }
+ /* + Add to request — hairline white-border on transparent (no gold) */
+ .add-to-request-btn {
+ background: transparent !important;
+ color: #f5f1e8 !important;
+ border: 1px solid rgba(245, 241, 232, 0.6) !important;
+ border-radius: 0 !important;
+ padding: 12px 22px !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 400 !important;
+ }
+ .add-to-request-btn:hover {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ /* Hex caption visible */
+ .preview-hex, #colorPreviewHex {
+ display: block !important;
+ color: rgba(245, 241, 232, 0.55) !important;
+ font-family: ui-monospace, "SF Mono", Menlo, monospace !important;
+ font-size: 11px !important;
+ margin-top: 4px !important;
+ letter-spacing: 0.04em !important;
+ text-transform: lowercase !important;
+ }
+ /* Color preview name — stays single, prominent */
+ #colorPreviewName {
+ color: #f5f1e8 !important;
+ font-size: 11px !important;
+ letter-spacing: 0.32em !important;
+ text-transform: uppercase !important;
+ font-weight: 500 !important;
+ display: block !important;
+ margin-top: 12px !important;
+ }
+
+ /* ─── Mobile hamburger nav (replaces the overflow at <760px) ─── */
+ @media (max-width: 760px) {
+ header .nav-container { flex-wrap: wrap; }
+ header nav { display: none; flex-basis: 100%; flex-direction: column; gap: 6px; padding: 16px 0 6px; }
+ header nav.open { display: flex; }
+ header nav a { padding: 10px 0; border-bottom: 1px solid rgba(245,241,232,0.1); }
+ header .mobile-toggle {
+ display: flex !important;
+ flex-direction: column;
+ gap: 5px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ padding: 8px;
+ }
+ header .mobile-toggle span {
+ width: 22px; height: 1.5px;
+ background: #f5f1e8;
+ display: block;
+ }
+ }
+ @media (min-width: 761px) {
+ header .mobile-toggle { display: none !important; }
+ }
+
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@mylarwallpaper.com?subject=Maison%20Argent%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@mylarwallpaper.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Maison Argent</div>
+ <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/index.html.pre-sort-frontend b/public/index.html.pre-sort-frontend
new file mode 100644
index 0000000..fb632af
--- /dev/null
+++ b/public/index.html.pre-sort-frontend
@@ -0,0 +1,850 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
+
+<meta charset="utf-8">
+<!-- Google tag (gtag.js) -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=G-DX4F30FJQ6"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-DX4F30FJQ6');
+</script>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>Maison Argent — An atelier devoted to mylar.</title>
+<meta name="description" content="Maison Argent is a curated atelier dedicated entirely to mylar. We do one thing — and we do it carefully.">
+<meta name="theme-color" content="#FAF9F6">
+<link rel="canonical" href="https://mylarwallpaper.com/">
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
+<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "Organization",
+ "name": "Maison Argent",
+ "url": "https://mylarwallpaper.com/",
+ "email": "info@mylarwallpaper.com"
+}
+</script>
+<script src="/zd-loader.js" defer></script>
+<style>
+:root {
+ --bg: #FAF9F6;
+ --paper: #1A1A1A;
+ --muted: #8B7866;
+ --line: #D8D2C5;
+ --accent: #1A1A1A;
+ --bg-soft: #D8D2C5;
+ --cols: 6;
+}
+html[data-theme="dark"] {
+ --bg: #1a1410;
+ --paper: #FAF9F6;
+ --muted: #C9B89E;
+ --line: rgba(255,254,250,0.12);
+ --accent: #A98B5B;
+ --bg-soft: #2a1f15;
+}
+* { margin:0; padding:0; box-sizing:border-box }
+html { scroll-behavior:smooth }
+body { font-family:'Inter', sans-serif; color:var(--paper); -webkit-font-smoothing:antialiased; background:var(--bg); min-height:100vh; overflow-x:hidden }
+/* DW-FASHION-TEMPLATE-OVERRIDE */
+.section-title .accent, .footer-brand, .center-mark, h1, h2, h3 { font-family: 'Cinzel', Georgia, serif !important; font-weight:500 !important; }
+
+/* ===== Auto-hide header ===== */
+header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:space-between; align-items:center; padding:22px 32px; z-index:100; background:rgba(0,0,0,0.55); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); transition:transform .3s }
+.h-link { display:flex; align-items:center; gap:10px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); text-decoration:none; cursor:pointer; background:transparent; border:0 }
+.h-link:hover { opacity:0.7 }
+.h-icon { width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.5 }
+
+/* ===== Cinema hero ===== */
+.cinema { position:relative; height:100vh; width:100%; overflow:hidden }
+.cinema-bg { position:absolute; inset:0; background-size:cover; background-position:center; background-image:url('/hero-bg.jpg') }
+.cinema-bg::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 60%, rgba(0,0,0,0.75) 100%) }
+.corner-mark { position:absolute; top:24px; left:32px; font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,0.55), 0 0 1px rgba(0,0,0,0.4); z-index:5 }
+.corner-mark::before { content:"◆ "; margin-right:6px }
+.center-mark { position:absolute; top:clamp(80px,12vh,140px); left:50%; transform:translateX(-50%); font-size:clamp(28px,4vw,56px); font-weight:500; letter-spacing:0.18em; text-transform:uppercase; text-align:center; color:#fff; text-shadow:0 2px 8px rgba(0,0,0,0.65), 0 0 1px rgba(0,0,0,0.5); z-index:5 }
+.center-mark .tm { font-size:14px; vertical-align:super; opacity:0.7; margin-left:0.2em }
+.center-mark .sub { display:block; font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400; font-size:0.4em; letter-spacing:0.04em; text-transform:none; margin-top:14px; opacity:0.85 }
+.meta-line { position:absolute; bottom:32px; left:32px; font-size:10px; letter-spacing:0.28em; text-transform:uppercase; font-weight:700; color:#fff; z-index:5; opacity:0.85 }
+.meta-line .num { font-size:12px; display:block; margin-top:4px; letter-spacing:0.05em }
+.enter { position:absolute; bottom:32px; right:32px; display:flex; align-items:center; gap:14px; font-size:11px; letter-spacing:0.36em; text-transform:uppercase; font-weight:700; color:#fff; text-decoration:none; padding-bottom:6px; border-bottom:1px solid #fff; transition:gap 0.25s; z-index:5 }
+.enter:hover { gap:22px }
+.enter svg { width:24px; height:12px }
+
+/* ===== Section ===== */
+.section { padding:96px 32px }
+.section-header { display:flex; justify-content:space-between; align-items:flex-end; flex-wrap:wrap; gap:24px; margin-bottom:32px; padding-bottom:24px; border-bottom:1px solid var(--line) }
+.section-title { font-size:clamp(36px,5vw,64px); font-weight:300; letter-spacing:-0.02em; line-height:1 }
+.section-title .accent { color: var(--accent); font-family:'Playfair Display', Georgia, serif; font-style:italic; font-weight:400 }
+.section-eyebrow { font-size:10px; letter-spacing:0.4em; text-transform:uppercase; font-weight:700; color:var(--muted); margin-bottom:16px }
+.section-meta { font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:600; color:var(--muted); text-align:right; line-height:1.6 }
+
+/* ===== Filter bar ===== */
+.filters { display:flex; gap:8px; align-items:center; margin-bottom:18px; flex-wrap:wrap }
+.chip { padding:8px 16px; font-size:11px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; color:var(--paper); background:transparent; border:1px solid var(--line); cursor:pointer; transition:all 0.2s; font-family:inherit }
+.chip:hover { border-color:var(--paper) }
+.chip.active { background:var(--paper); color:var(--bg); border-color:var(--paper) }
+.search { flex:0 1 280px; margin-left:auto; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--line); padding:6px 0 }
+.search input { flex:1; background:transparent; border:0; color:var(--paper); font-family:inherit; font-size:13px; outline:none; letter-spacing:0.04em }
+.search input::placeholder { color:var(--muted) }
+.search svg { width:16px; height:16px; stroke:var(--muted); fill:none; stroke-width:1.5 }
+
+/* ===== Grid-density slider ===== */
+.density { display:flex; align-items:center; gap:14px; padding:6px 0; margin-bottom:24px }
+.density label { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--muted) }
+.density input[type=range] { flex:1; max-width:240px; -webkit-appearance:none; appearance:none; height:1px; background:var(--line); outline:none }
+.density input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50% }
+.density input[type=range]::-moz-range-thumb { width:14px; height:14px; background:var(--accent); cursor:pointer; border-radius:50%; border:0 }
+.density .ct { font-size:11px; color:var(--muted); letter-spacing:0.18em; text-transform:uppercase; font-weight:600; min-width:80px }
+
+/* ===== Stats line ===== */
+.stat-line { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:600; color:var(--muted); margin-bottom:24px }
+
+/* ===== Product grid (novasuede pattern: flush grid + slide-up overlay) ===== */
+.grid { display:grid; grid-template-columns:repeat(var(--cols), 1fr); gap:0 }
+.card { position:relative; aspect-ratio:1/1.15; cursor:pointer; overflow:hidden; border:1px solid var(--bg); transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1); background:var(--bg-soft) }
+.card:hover { transform:scale(1.04); z-index:5 }
+.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
+.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
+.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
+.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
+.card .actions { margin-top:10px; display:flex; gap:6px }
+.card .sample-btn { flex:1; padding:7px 10px; background:#fff; color:#000; font-family:inherit; font-size:10px; letter-spacing:0.22em; text-transform:uppercase; font-weight:700; border:0; cursor:pointer; text-align:center; transition:all 0.2s }
+.card .sample-btn:hover { background:var(--accent); color:#fff }
+
+@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
+@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+
+.sentinel { height:1px }
+.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
+
+/* ===== Footer ===== */
+footer { padding:64px 32px 32px; border-top:1px solid var(--line); margin-top:32px }
+.footer-grid { max-width:1400px; margin:0 auto; display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:48px; margin-bottom:48px }
+.footer-brand { font-size:24px; font-weight:300; letter-spacing:0.32em; text-transform:uppercase; margin-bottom:12px }
+.footer-text { font-size:13px; line-height:1.6; color:var(--muted); max-width:380px }
+.footer-col h4 { font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700; color:var(--paper); margin-bottom:18px }
+.footer-col a { display:block; font-size:13px; color:var(--muted); text-decoration:none; margin-bottom:8px; transition:color 0.2s; cursor:pointer; background:transparent; border:0; font-family:inherit; padding:0; text-align:left }
+.footer-col a:hover { color:var(--accent) }
+.footer-bottom { max-width:1400px; margin:0 auto; padding-top:24px; border-top:1px solid var(--line); display:flex; justify-content:space-between; flex-wrap:wrap; gap:16px; font-size:11px; letter-spacing:0.18em; text-transform:uppercase; color:var(--muted) }
+
+@media (max-width:720px) {
+ .corner-mark, .meta-line, .enter { font-size:10px }
+ .center-mark { font-size:24px; letter-spacing:0.12em; top:clamp(60px,9vh,90px) }
+ .section, footer { padding-left:20px; padding-right:20px }
+ .footer-grid { grid-template-columns:1fr; gap:32px }
+ .search { margin-left:0; flex:1 1 100% }
+}
+
+.theme-toggle { background:transparent; border:1px solid var(--line); width:32px; height:32px; cursor:pointer; color:var(--paper); display:inline-flex; align-items:center; justify-content:center; font-size:14px; line-height:1; transition:all .15s; padding:0 }
+.theme-toggle:hover { border-color:var(--accent); color:var(--accent) }
+
+/* ===== WCAG 2.4.7 — keyboard focus indicators ===== */
+/* Strictly :focus-visible so mouse clicks do NOT show the ring */
+a:focus-visible,
+button:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+[tabindex]:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+</style>
+<script>
+(function(){ try { var t = localStorage.getItem('mylar_theme') || 'light'; document.documentElement.dataset.theme = t; } catch(e){} })();
+</script>
+
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://mylarwallpaper.com/">
+<meta property="og:title" content="Mylar Wallpaper">
+<meta property="og:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta property="og:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<meta property="og:site_name" content="Mylar Wallpaper">
+<meta property="article:publisher" content="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings">
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="Mylar Wallpaper">
+<meta name="twitter:description" content="Mylar Wallpaper — Mylar, foil & reflective wallcoverings.">
+<meta name="twitter:image" content="https://mylarwallpaper.com/hero-bg.jpg">
+<!-- graphics-loop pass 13: footer + fb -->
+</head>
+<body>
+<style id="ns-header-modal-styles">
+ .ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
+ .ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
+ .ns-dot { width: 28px; height: 28px; border-radius: 50%; background: var(--ns-dot-bg, radial-gradient(circle at 35% 35%, #b66a4d 0%, #8a4a30 60%, #5a2d1c 100%)); box-shadow: 0 0 0 1px rgba(245,241,232,0.10), 0 2px 12px rgba(180,90,60,0.30); flex-shrink: 0; }
+ .ns-name { font-family: -apple-system, "SF Pro Display", "Helvetica Neue", system-ui, sans-serif; font-size: 18px !important; font-weight: 300 !important; letter-spacing: 0.02em !important; color: #f5f1e8 !important; text-transform: none !important; margin: 0 !important; }
+ .ns-name sup { font-size: 0.55em; font-weight: 300; margin-left: 1px; }
+ .ns-nav a, .ns-nav button { font-family: -apple-system, "SF Pro Text", system-ui, sans-serif; font-size: 15px !important; font-weight: 400 !important; color: #f5f1e8 !important; text-decoration: none !important; background: none !important; border: 0 !important; cursor: pointer; transition: color 200ms; letter-spacing: 0 !important; text-transform: none !important; }
+ .ns-nav a:hover, .ns-nav button:hover { color: #ffffff !important; }
+ /* All widths: hide nav by default, hamburger always visible on right, nav opens as right-anchored dropdown panel */
+ .ns-nav {
+ display: none !important;
+ position: absolute; top: 100%; right: 18px;
+ flex-direction: column; align-items: stretch; gap: 0;
+ background: rgba(10,10,10,0.96); backdrop-filter: blur(10px);
+ border: 1px solid rgba(245,241,232,0.10); border-top: 0;
+ min-width: 220px; padding: 10px 0; margin: 0;
+ box-shadow: 0 16px 40px rgba(0,0,0,0.55);
+ z-index: 150;
+ }
+ .ns-nav.open { display: flex !important; }
+ .ns-nav a, .ns-nav button {
+ padding: 12px 22px !important;
+ border-bottom: 1px solid rgba(245,241,232,0.06);
+ width: 100%; text-align: left;
+ }
+ .ns-nav a:last-child, .ns-nav button:last-child { border-bottom: 0; }
+ .ns-nav a:hover, .ns-nav button:hover { background: rgba(245,241,232,0.06) !important; color: #ffffff !important; }
+ @media (max-width: 480px) { .ns-nav { right: 12px; min-width: 200px; } }
+ .ns-header .mobile-toggle { display: flex !important; align-items: center; justify-content: center; width: 36px; height: 36px; background: transparent; border: 0; cursor: pointer; padding: 0; gap: 4px; flex-direction: column; }
+ .ns-header .mobile-toggle span { display: block; width: 22px; height: 1.5px; background: #f5f1e8; transition: transform 200ms, opacity 200ms; }
+ .ns-header .mobile-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(5px) rotate(45deg); }
+ .ns-header .mobile-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
+ .ns-header .mobile-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
+ </style>
+<style id="ns-gold-kill">
+ /* novasuede: kill gold-solid fills, off-white instead. Edge color stays gold. */
+ .new-badge, .new-arrivals-pill,
+ .color-filter-btn.active, .drapery-btn,
+ .sample-btn-chip, .cb-cta {
+ background: #f5f1e8 !important;
+ color: #0a0a0a !important;
+ border-color: #f5f1e8 !important;
+ }
+ .new-badge:hover, .new-arrivals-pill:hover,
+ .color-filter-btn.active:hover, .drapery-btn:hover,
+ .sample-btn-chip:hover, .cb-cta:hover {
+ background: #fff !important;
+ color: #0a0a0a !important;
+ }
+ </style>
+<header class="ns-header">
+ <a href="/" class="ns-brand" aria-label="Home">
+ <span class="ns-dot"></span>
+ <span class="ns-name">Maison Argent</span>
+ </a>
+ <nav class="ns-nav" id="nsPrimaryNav" aria-label="Primary">
+ <a href="/">Home</a>
+ <a href="/about">About</a>
+ <button type="button" onclick="nsContactOpen()">Contact</button>
+ </nav>
+ <button type="button" class="mobile-toggle" aria-label="Toggle menu" aria-controls="nsPrimaryNav" aria-expanded="false" onclick="nsToggleNav(this)">
+ <span></span><span></span><span></span>
+ </button>
+ </header>
+
+<div class="ns-modal" id="nsContactModal" role="dialog" aria-modal="true" aria-labelledby="nsContactTitle" onclick="if(event.target===this)nsContactClose()">
+ <div class="ns-modal-card">
+ <button type="button" class="close-x" onclick="nsContactClose()" aria-label="Close">×</button>
+ <h3 id="nsContactTitle">How can we help?</h3>
+ <p class="sub">Trade-account replies within one business day.</p>
+ <div class="ns-actions">
+ <a class="ns-action" href="#contact" onclick="nsContactClose()"><span class="ico">📋</span><div class="txt"><b>Get a Quote</b><span>Project specs → priced estimate</span></div></a>
+ <a class="ns-action" href="#contact" onclick="nsContactClose();openModal();"><span class="ico">📦</span><div class="txt"><b>Order a Sample</b><span>Free swatch to your shop</span></div></a>
+ <a class="ns-action" href="mailto:info@mylarwallpaper.com?subject=Maison%20Argent%20inquiry"><span class="ico">✉️</span><div class="txt"><b>Email Us</b><span>info@mylarwallpaper.com</span></div></a>
+ <a class="ns-action" href="tel:888-373-4564"><span class="ico">📞</span><div class="txt"><b>Call Us</b><span>(888) 373-4564 · M–F, 9–5 PT</span></div></a>
+ </div>
+ </div>
+ </div>
+<script>
+ function nsContactOpen() { var m = document.getElementById('nsContactModal'); if (m) m.classList.add('show'); }
+ function nsContactClose() { var m = document.getElementById('nsContactModal'); if (m) m.classList.remove('show'); }
+ function nsToggleNav(btn) {
+ var nav = document.getElementById('nsPrimaryNav');
+ if (!nav) return;
+ var open = nav.classList.toggle('open');
+ btn.setAttribute('aria-expanded', open ? 'true' : 'false');
+ }
+ document.addEventListener('keydown', function(e){ if (e.key === 'Escape') nsContactClose(); });
+</script>
+
+
+
+
+
+
+
+
+
+
+
+<header>
+ <button class="h-link" onclick="dwmOpen('Contact')" aria-label="Contact"><svg class="h-icon" viewBox="0 0 24 24"><path d="M3 7h18M3 12h18M3 17h18"/></svg><span>Contact</span></button>
+ <button class="theme-toggle" id="theme-toggle" aria-label="Theme toggle">☾</button>
+</header>
+
+<section class="cinema">
+ <div class="cinema-bg" id="heroBg"></div>
+ <div class="corner-mark">Reflective Foil</div>
+ <div class="center-mark">Mylar Wallpaper</div>
+ <div class="meta-line">Mylar · Foil · Reflective · Holographic<span class="num" id="heroNum"></span></div>
+ <a class="enter" href="#shop">Enter <svg viewBox="0 0 24 12" fill="none" stroke="currentColor" stroke-width="1.4"><path d="M0 6h22M16 1l6 5-6 5"/></svg></a>
+</section>
+
+
+<section class="section" id="ideas">
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">New this week</h2>
+ <div class="rail" id="railNewest"></div>
+ </div>
+ <div class="rail-block">
+ <div class="rail-eyebrow">Ideas</div>
+ <h2 class="rail-title">Curated picks</h2>
+ <div class="rail" id="railCurated"></div>
+ </div>
+</section>
+
+<section class="section" id="shop">
+ <div class="section-header">
+ <div>
+ <div class="section-eyebrow">The Collection</div>
+ <h2 class="section-title"><span class="accent" id="totalCount">—</span> Patterns.</h2>
+ </div>
+ <div class="section-meta">Mylar · Foil · Reflective · Holographic</div>
+ </div>
+
+ <div class="filters" id="facets">
+ <button class="chip active" data-facet="all">All</button>
+ </div>
+
+ <div class="density">
+ <label>Sort</label>
+ <select id="sortSelect" aria-label="Sort products" style="background:transparent;color:inherit;border:1px solid var(--line,rgba(255,255,255,.2));font:inherit;font-size:11px;letter-spacing:.10em;text-transform:uppercase;padding:4px 8px;cursor:pointer;outline:none;margin-right:14px">
+ <option value="newest">Newest</option>
+ <option value="color">Color</option>
+ <option value="style">Style</option>
+ <option value="sku">SKU A→Z</option>
+ <option value="title">Title A→Z</option>
+ <option value="price-asc">Price ↑</option>
+ <option value="price-desc">Price ↓</option>
+ </select>
+ <label>Grid</label>
+ <input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
+ <span class="ct" id="densityLabel">6 cols</span>
+ <div class="search">
+ <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-5.5-5.5"/></svg>
+ <input type="text" id="searchInput" placeholder="Search by pattern, color…" autocomplete="off">
+ </div>
+ </div>
+
+ <div class="stat-line" id="statLine">Loading…</div>
+ <div class="grid" id="grid"></div>
+ <div class="loading" id="loading">Loading more…</div>
+ <div class="sentinel" id="sentinel"></div>
+</section>
+
+<footer>
+ <div class="footer-grid">
+ <div>
+ <div class="footer-brand">Maison Argent</div>
+ <p class="footer-text">Maison Argent — real samples ship free.</p>
+ <p class="footer-text" style="margin-top:14px;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;color:var(--paper);opacity:0.7"><a href="/about" style="color:inherit;text-decoration:none;border-bottom:1px solid var(--accent)">About →</a></p>
+ </div>
+ <div class="footer-col">
+ <h4>Aesthetic</h4>
+ <div id="footerFacets"></div>
+ </div>
+ <div class="footer-col">
+ <h4>Trade</h4>
+ <button onclick="dwmOpen('Inquiry')">Project Inquiry</button>
+ <button onclick="dwmOpen('Sample')">Request Sample</button>
+ <button onclick="dwmOpen('Contact')">Contact</button>
+ </div>
+
+ <div class="footer-col">
+ <h4>Social</h4>
+ <a class="fb-link" href="https://www.facebook.com/SteveAbramsDesigns.DesignerWallcoverings" target="_blank" rel="noopener">Facebook</a>
+ </div>
+ </div>
+ <div class="footer-bottom">
+ <span>mylarwallpaper.com · Maison Argent</span>
+ <span><a href="mailto:info@mylarwallpaper.com" style="color:var(--paper);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px">info@mylarwallpaper.com</a></span>
+ <span id="footerStat"></span>
+ </div>
+</footer>
+
+<script>
+// mini-constellation — 43 niche-stars, current site highlighted in gold
+(function(){
+ const SLUG = "mylarwallpaper";
+ const NICHES = [
+ ['silkwallpaper','Silk','mat'],['silkwallcoverings','Silk W/C','mat'],['linenwallpaper','Linen','mat'],
+ ['jutewallpaper','Jute','mat'],['raffiawallcoverings','Raffia W/C','mat'],['raffiawalls','Raffia Walls','mat'],
+ ['corkwallcovering','Cork','mat'],['fabricwallpaper','Fabric','mat'],['textilewallpaper','Textile','mat'],
+ ['metallicwallpaper','Metallic','mat'],['silverleafwallpaper','Silver Leaf','mat'],['vinylwallpaper','Vinyl','mat'],
+ ['micawallpaper','Mica','mat'],['madagascarwallpaper','Madagascar','mat'],['mylarwallpaper','Mylar','mat'],
+ ['suedewallpaper','Suede','mat'],
+ ['1800swallpaper','1800s','dec'],['1890swallpaper','1890s','dec'],['1900swallpaper','1900s','dec'],
+ ['1920swallpaper','1920s','dec'],['1930swallpaper','1930s','dec'],['1940swallpaper','1940s','dec'],
+ ['1950swallpaper','1950s','dec'],['1960swallpaper','1960s','dec'],['1970swallpaper','1970s','dec'],
+ ['1980swallpaper','1980s','dec'],['retrowalls','Retro','dec'],['wallpapersback','W. Back','dec'],
+ ['agedwallpaper','Aged','cra'],['handcraftedwallpaper','Handcrafted','cra'],['museumwallpaper','Museum','cra'],
+ ['restorationwallpaper','Restoration','cra'],['pastelwallpaper','Pastel','cra'],['glitterwalls','Glitter','cra'],
+ ['greenwallcoverings','Green','cra'],['naturalwallcoverings','Natural','cra'],['saloonwallpaper','Saloon','cra'],
+ ['contractwallpaper','Contract','use'],['hotelwallcoverings','Hotel','use'],['hospitalitywallpaper','Hospitality','use'],
+ ['healthcarewallpaper','Healthcare','use'],['restaurantwallpaper','Restaurant','use'],['architecturalwallcoverings','Architectural','use']
+ ];
+ const COLOR = { mat:'#c9b687', dec:'#b86a4a', cra:'#6b8e6f', use:'#4a6b8e' };
+ const W = 1080, H = 200, BANDS = ['mat','dec','cra','use'];
+ const groups = { mat:[], dec:[], cra:[], use:[] };
+ for (const n of NICHES) groups[n[2]].push(n);
+ const svg = document.getElementById('miniConst');
+ if (!svg) return;
+ const bandW = W / BANDS.length;
+ let nodes = '';
+ BANDS.forEach((band, bi) => {
+ const list = groups[band];
+ const cx = bi * bandW + bandW / 2;
+ list.forEach((n, i) => {
+ const t = list.length === 1 ? 0.5 : i / (list.length - 1);
+ // deterministic jitter per slug
+ let h = 0; for (let k = 0; k < n[0].length; k++) h = (h * 31 + n[0].charCodeAt(k)) | 0;
+ const jx = ((h & 0xff) / 255 - 0.5) * (bandW * 0.5);
+ const jy = (((h >> 8) & 0xff) / 255 - 0.5) * 6; // tightened from 14 → 6 to prevent same-band collisions (16 mat nodes / 144px = 9px spacing)
+ const x = cx + jx, y = 28 + t * (H - 56) + jy;
+ const isCurrent = n[0] === SLUG;
+ const r = isCurrent ? 8 : 4;
+ const op = isCurrent ? 1 : 0.55;
+ nodes += `<g class="mc-node" data-slug="${n[0]}" data-label="${n[1]}" style="cursor:pointer">
+ <circle cx="${x}" cy="${y}" r="${r}" fill="url(#dna-${band})" fill-opacity="${op}" stroke="${COLOR[band]}" stroke-opacity="${isCurrent?1:0.7}" stroke-width="${isCurrent?2:1}">
+ <title>${n[1]} — ${n[0]}.com</title>
+ </circle>
+ ${isCurrent ? `<circle cx="${x}" cy="${y}" r="${r+5}" fill="none" stroke="${COLOR[band]}" stroke-opacity="0.4" stroke-width="1"><animate attributeName="r" values="${r+5};${r+12};${r+5}" dur="2.4s" repeatCount="indefinite"/><animate attributeName="stroke-opacity" values="0.4;0;0.4" dur="2.4s" repeatCount="indefinite"/></circle>` : ''}
+ </g>`;
+ });
+ });
+ // append nodes after defs
+ svg.insertAdjacentHTML('beforeend', nodes);
+ svg.querySelectorAll('.mc-node').forEach(n => {
+ n.addEventListener('mouseenter', () => n.querySelector('circle').setAttribute('fill-opacity', '1'));
+ n.addEventListener('mouseleave', e => {
+ const isCurrent = n.dataset.slug === SLUG;
+ n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
+ });
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ });
+})();
+</script>
+
+<script>
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const LABELS = {"all":"All"};
+
+function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
+// Image-URL allowlist: only DW Shopify CDN + designerwallcoverings.com (defends against XSS via crafted products.json)
+function safeImg(u) { return /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(u || '') ? u : '/hero-bg.jpg'; }
+function cardHTML(p) {
+ const eager = state.page === 1;
+ return '<img loading="' + (eager ? 'eager' : 'lazy') + '"' + (eager ? ' fetchpriority="high"' : '') + ' src="' + escAttr(safeImg(p.image_url)) + '" alt="' + escAttr(p.title) + '">'
+ + '<div class="overlay">'
+ + '<div class="pat">' + escAttr(p.pattern_name || p.title) + '</div>'
+ + '<div class="ven">' + escAttr((p.vendor || '').replace(/-/g, ' ')) + '</div>'
+ + '<div class="actions">'
+ + '<button class="sample-btn" onclick="event.stopPropagation();dwmOpen(\'Sample\',' + JSON.stringify({sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}).replace(/"/g,'"') + ')">Sample</button>'
+ + '</div></div>';
+}
+
+async function loadFacets() {
+ let f;
+ try {
+ const r = await fetch('/api/facets');
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ f = await r.json();
+ } catch (e) { console.error('loadFacets failed:', e); return; }
+ const el = document.getElementById('facets');
+ for (const [k, v] of Object.entries(f.aesthetics).sort((a,b) => b[1] - a[1])) {
+ const b = document.createElement('button');
+ b.className = 'chip'; b.dataset.facet = k;
+ b.innerHTML = (LABELS[k] || k) + ' <span style="opacity:.55;font-weight:500;margin-left:4px">' + v + '</span>';
+ el.appendChild(b);
+ }
+ el.addEventListener('click', e => {
+ if (e.target.tagName !== 'BUTTON') return;
+ document.querySelectorAll('#facets button').forEach(b => b.classList.remove('active'));
+ e.target.classList.add('active');
+ state.facet = e.target.dataset.facet;
+ resetGrid();
+ });
+ document.getElementById('totalCount').textContent = f.total;
+ document.getElementById('footerStat').textContent = f.total + ' patterns · live archive';
+ // Footer aesthetic links
+ const footerEl = document.getElementById('footerFacets');
+ for (const [k] of Object.entries(f.aesthetics)) {
+ const b = document.createElement('button');
+ b.textContent = LABELS[k] || k;
+ b.onclick = () => { state.facet = k; resetGrid(); document.querySelectorAll('#facets button').forEach(x => x.classList.toggle('active', x.dataset.facet === k)); document.getElementById('shop').scrollIntoView({behavior:'smooth'}); };
+ footerEl.appendChild(b);
+ }
+}
+
+function resetGrid() {
+ state.page = 1; state.exhausted = false;
+ document.getElementById('grid').innerHTML = '';
+ document.getElementById('loading').textContent = 'Loading…';
+ loadGridPage();
+}
+
+async function loadGridPage() {
+ if (state.loading || state.exhausted) return;
+ state.loading = true;
+ const params = new URLSearchParams({ page:state.page, limit:24 });
+ if (state.q) params.set('q', state.q);
+ if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ let data;
+ try {
+ const r = await fetch('/api/products?' + params);
+ if (!r.ok) throw new Error('HTTP ' + r.status);
+ data = await r.json();
+ } catch (e) {
+ console.error('loadGridPage failed:', e);
+ document.getElementById('loading').textContent = '— offline — refresh to retry —';
+ state.loading = false;
+ return;
+ }
+ state.total = data.total; state.pages = data.pages;
+
+ if (state.page === 1) {
+ document.getElementById('statLine').textContent = data.total + ' patterns · ' + (state.facet === 'all' ? 'all aesthetics' : (LABELS[state.facet] || state.facet)) + (state.q ? ' · matching "' + state.q + '"' : '');
+ }
+ const grid = document.getElementById('grid');
+ for (const p of data.items) {
+ const a = document.createElement('a');
+ a.className = 'card'; a.href = '#'; a.onclick = (e) => { e.preventDefault(); dwmOpen('Sample',{sku:p.sku||p.handle, title:p.title, image_url:safeImg(p.image_url)}); };
+ a.innerHTML = cardHTML(p);
+ grid.appendChild(a);
+ }
+ if (state.page >= state.pages || data.items.length === 0) {
+ state.exhausted = true;
+ document.getElementById('loading').textContent = state.total > 0 ? '— end of archive · ' + state.total + ' patterns —' : '';
+ } else state.page++;
+ state.loading = false;
+}
+
+const io = new IntersectionObserver(es => { for (const e of es) if (e.isIntersecting) loadGridPage(); }, { rootMargin:'600px 0px' });
+io.observe(document.getElementById('sentinel'));
+
+document.getElementById('searchInput').addEventListener('input', e => {
+ state.q = e.target.value.trim();
+ clearTimeout(window._t);
+ window._t = setTimeout(resetGrid, 220);
+});
+
+// Density slider
+const slider = document.getElementById('densitySlider');
+const dlabel = document.getElementById('densityLabel');
+function setDensity(n) {
+ document.documentElement.style.setProperty('--cols', n);
+ dlabel.textContent = n + ' cols';
+ try { localStorage.setItem('mylar_theme_density', n); } catch(e){}
+}
+slider.addEventListener('input', e => setDensity(parseInt(e.target.value)));
+const savedDensity = parseInt(localStorage.getItem('mylar_theme_density') || '6');
+if (savedDensity >= 4 && savedDensity <= 12) { slider.value = savedDensity; setDensity(savedDensity); }
+
+// Theme toggle
+const tb = document.getElementById('theme-toggle');
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('mylar_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+setTheme(document.documentElement.dataset.theme || 'light');
+tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+
+loadFacets();
+loadGridPage();
+</script>
+<!-- ============================================================
+ DW UNIVERSAL CONTACT MODULE — fashion-house UX
+ Inject before </body> in every DW-family sister site.
+ Self-contained: CSS + 4 modals + JS submission handlers.
+ Uses host site's CSS vars (--bg, --fg, --gold, --rule).
+ ============================================================ -->
+<style>
+ /* === MODAL BASE === */
+ .dwm{position:fixed;inset:0;background:rgba(0,0,0,0.78);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;overflow-y:auto}
+ .dwm.open{display:flex}
+ .dwm-box{background:var(--bg);border:1px solid var(--rule);max-width:520px;width:100%;padding:36px 32px;position:relative;max-height:90vh;overflow-y:auto;animation:dwm-in 0.25s ease}
+ @keyframes dwm-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+ .dwm-box h3{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-weight:400;font-size:32px;line-height:1.05;margin-bottom:6px;color:var(--fg);letter-spacing:-0.01em}
+ .dwm-box .sub{color:var(--muted);font-size:12px;letter-spacing:0.16em;text-transform:uppercase;margin-bottom:24px;font-weight:500}
+ .dwm-close{position:absolute;top:18px;right:18px;background:transparent;border:0;color:var(--muted);font-size:24px;cursor:pointer;width:32px;height:32px;line-height:1;padding:0}
+ .dwm-close:hover{color:var(--gold)}
+ .dwm-preview{display:flex;gap:14px;align-items:center;padding:12px;background:var(--bg-soft);margin-bottom:18px}
+ .dwm-preview img{width:64px;height:64px;object-fit:cover}
+ .dwm-preview .pn{font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:15px;line-height:1.2;color:var(--fg)}
+ .dwm-preview .pc{font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--muted);margin-top:4px}
+ .dwm-field{margin-bottom:14px}
+ .dwm-field label{display:block;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:500}
+ .dwm-field input,.dwm-field textarea,.dwm-field select{width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 4px;font-size:14px;font-family:inherit;color:var(--fg);outline:none;transition:border-color 0.2s}
+ .dwm-field input:focus,.dwm-field textarea:focus{border-bottom-color:var(--gold)}
+ .dwm-field textarea{min-height:60px;resize:vertical}
+ .dwm-submit{background:transparent;color:var(--muted, #c9b89e);border:1px solid var(--muted, #c9b89e);padding:14px 28px;font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:700;cursor:pointer;width:100%;margin-top:8px;transition:background 0.15s, color 0.15s}
+ .dwm-submit:hover{background:var(--muted, #c9b89e);color:var(--bg, #000)}
+
+ .dwm-submit:disabled{opacity:0.5;cursor:default}
+ .dwm-status{margin-top:14px;font-size:11px;letter-spacing:0.16em;text-transform:uppercase;text-align:center;display:none}
+ .dwm-status.ok{color:var(--sage);display:block}
+ .dwm-status.err{color:#e08070;display:block}
+ /* contact-options */
+ .dwm-options{display:flex;flex-direction:column;gap:10px}
+ .dwm-option{display:flex;align-items:center;gap:14px;padding:18px 20px;background:transparent;border:1px solid var(--rule);color:var(--fg);font-family:inherit;font-size:11px;letter-spacing:0.20em;text-transform:uppercase;font-weight:600;cursor:pointer;text-decoration:none;transition:all 0.2s;text-align:left;width:100%}
+ .dwm-option:hover{border-color:var(--gold);color:var(--gold)}
+ .dwm-option svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;flex-shrink:0}
+ .dwm-option .lbl{flex:1;display:block}
+ .dwm-option .val{display:block;font-size:10px;letter-spacing:0.14em;text-transform:none;font-weight:500;opacity:0.65;margin-top:4px}
+
+/* graphics-loop pass 11: Ideas rails */
+#ideas { padding: 56px 24px 24px; max-width:1600px; margin:0 auto }
+#ideas .rail-block { margin-bottom:48px }
+#ideas .rail-eyebrow { font-size:11px; font-weight:700; letter-spacing:0.32em; text-transform:uppercase; color:var(--muted, #888); margin-bottom:8px }
+#ideas .rail-title { font-size:clamp(22px,2.6vw,32px); font-weight:500; letter-spacing:-0.01em; margin:0 0 18px; color:var(--ink,#fff) }
+#ideas .rail { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; padding-bottom:8px; scrollbar-width:none }
+#ideas .rail::-webkit-scrollbar { display:none }
+#ideas .rail-card { flex:0 0 240px; scroll-snap-align:start; cursor:pointer; transition:transform 0.2s }
+#ideas .rail-card:hover { transform:translateY(-3px) }
+#ideas .rail-card img { width:100%; aspect-ratio:1; object-fit:cover; display:block; background:var(--card,#222) }
+#ideas .rail-card .rc-title { font-size:13px; font-weight:500; color:var(--paper,#fff); padding:8px 0 2px; line-height:1.3 }
+#ideas .rail-card .rc-meta { font-size:11px; color:var(--muted,#888); letter-spacing:0.06em }
+@media (max-width:720px) { #ideas .rail-card { flex:0 0 160px } }
+</style>
+
+<!-- Contact options modal -->
+<div class="dwm" id="dwmContact" onclick="if(event.target===this)dwmClose('Contact')">
+ <div class="dwm-box" style="max-width:440px">
+ <button class="dwm-close" onclick="dwmClose('Contact')" aria-label="Close">×</button>
+ <h3>Contact</h3>
+ <p class="sub" id="dwmContactSub">Three ways to reach us</p>
+ <div class="dwm-options">
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Inquiry')">
+ <svg viewBox="0 0 24 24"><path d="M4 4h16v12H7l-3 3z"/></svg>
+ <span class="lbl">Send an Inquiry<span class="val">Project name · scope · all the details</span></span>
+ </button>
+ <button class="dwm-option" type="button" onclick="dwmClose('Contact');dwmOpen('Sample')">
+ <svg viewBox="0 0 24 24"><rect x="4" y="6" width="16" height="14"/><path d="M4 10h16M9 6V3h6v3"/></svg>
+ <span class="lbl">Request a Sample<span class="val">Memo sample · ships free · 3–5 business days</span></span>
+ </button>
+ <a class="dwm-option" id="dwmContactEmailLink" href="mailto:info@mylarwallpaper.com">
+ <svg viewBox="0 0 24 24"><path d="M3 6h18v12H3z"/><path d="M3 6l9 7 9-7"/></svg>
+ <span class="lbl">Email Us<span class="val" id="dwmContactEmailLabel">info@mylarwallpaper.com</span></span>
+ </a>
+ </div>
+ </div>
+</div>
+
+<!-- Inquiry modal -->
+<div class="dwm" id="dwmInquiry" onclick="if(event.target===this)dwmClose('Inquiry')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Inquiry')" aria-label="Close">×</button>
+ <h3>Project Inquiry</h3>
+ <p class="sub">We'll respond within one business day</p>
+ <form id="dwmInquiryForm" onsubmit="return dwmSubmit(event,'inquiry')">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Phone</label><input type="tel" name="phone"></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Project Name</label><input type="text" name="projectName" required></div>
+ <div class="dwm-field"><label>Project Scope</label><textarea name="projectScope" placeholder="Square footage · room count · timeline" required></textarea></div>
+ <div class="dwm-field"><label>Additional Information</label><textarea name="message" placeholder="Patterns of interest, finish preferences, budget"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Inquiry</button>
+ <div class="dwm-status" id="dwmInquiryStatus"></div>
+ </form>
+ </div>
+</div>
+
+<!-- Sample-request modal -->
+<div class="dwm" id="dwmSample" onclick="if(event.target===this)dwmClose('Sample')">
+ <div class="dwm-box">
+ <button class="dwm-close" onclick="dwmClose('Sample')" aria-label="Close">×</button>
+ <h3>Request a Sample</h3>
+ <p class="sub">Memo sample · ships free · 3–5 business days</p>
+ <div class="dwm-preview" id="dwmSamplePreview" style="display:none">
+ <img id="dwmSampleImg" src="" alt="">
+ <div><div class="pn" id="dwmSampleName"></div><div class="pc" id="dwmSampleSku"></div></div>
+ </div>
+ <form id="dwmSampleForm" onsubmit="return dwmSubmit(event,'sample')">
+ <input type="hidden" name="sku" id="dwmSampleSkuInput">
+ <input type="hidden" name="title" id="dwmSampleTitleInput">
+ <input type="hidden" name="image_url" id="dwmSampleImageInput">
+ <div class="dwm-field"><label>Name</label><input type="text" name="name" required></div>
+ <div class="dwm-field"><label>Email</label><input type="email" name="email" required></div>
+ <div class="dwm-field"><label>Company / Trade</label><input type="text" name="company"></div>
+ <div class="dwm-field"><label>Shipping Address</label><input type="text" name="address" placeholder="Street" required></div>
+ <div class="dwm-field" style="display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px">
+ <input type="text" name="city" placeholder="City" required>
+ <input type="text" name="state" placeholder="State" required>
+ <input type="text" name="zip" placeholder="ZIP" required>
+ </div>
+ <div class="dwm-field"><label>Notes (optional)</label><textarea name="message" placeholder="Project, sq.ft., timing"></textarea></div>
+ <button type="submit" class="dwm-submit">Send Sample Request</button>
+ <div class="dwm-status" id="dwmSampleStatus"></div>
+ </form>
+ </div>
+</div>
+
+<script>
+ // Universal modal control
+ function dwmOpen(name, opts){
+ document.getElementById('dwm' + name).classList.add('open');
+ document.body.style.overflow = 'hidden';
+ try { if (typeof gtag === 'function') gtag('event', 'modal_open', { modal_name: name, sku: (opts && opts.sku) || '' }); } catch(_){}
+ if (name === 'Sample' && opts) {
+ document.getElementById('dwmSamplePreview').style.display = 'flex';
+ document.getElementById('dwmSampleImg').src = opts.image_url || '';
+ document.getElementById('dwmSampleName').textContent = opts.title || '';
+ document.getElementById('dwmSampleSku').textContent = opts.sku || '';
+ document.getElementById('dwmSampleSkuInput').value = opts.sku || '';
+ document.getElementById('dwmSampleTitleInput').value = opts.title || '';
+ document.getElementById('dwmSampleImageInput').value = opts.image_url || '';
+ } else if (name === 'Sample') {
+ document.getElementById('dwmSamplePreview').style.display = 'none';
+ document.getElementById('dwmSampleSkuInput').value = '';
+ document.getElementById('dwmSampleTitleInput').value = '';
+ document.getElementById('dwmSampleImageInput').value = '';
+ }
+ }
+ function dwmClose(name){ document.getElementById('dwm'+name).classList.remove('open'); document.body.style.overflow=''; }
+
+ // Universal form submit — POSTs to /api/send-{kind}
+ async function dwmSubmit(e, kind) {
+ e.preventDefault();
+ const form = e.target;
+ const data = Object.fromEntries(new FormData(form).entries());
+ const btn = form.querySelector('.dwm-submit');
+ const status = form.querySelector('.dwm-status');
+ btn.disabled = true; const orig = btn.textContent; btn.textContent = 'Sending…';
+ status.className = 'dwm-status';
+ try {
+ const r = await fetch('/api/send-' + kind, { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(data) });
+ if (!r.ok) throw new Error('HTTP '+r.status);
+ const j = await r.json();
+ try {
+ if (typeof gtag === 'function') {
+ if (kind === 'sample') gtag('event', 'memo_request', { sku: data.sku || '', title: data.title || '' });
+ else gtag('event', 'lead', { form_type: kind });
+ }
+ } catch(_){}
+ status.textContent = kind === 'sample' ? 'Sample request sent — ships within 3–5 business days' : 'Inquiry sent — we respond within 1 business day';
+ status.className = 'dwm-status ok';
+ btn.textContent = 'Sent ✓';
+ setTimeout(() => { dwmClose(kind === 'sample' ? 'Sample' : 'Inquiry'); btn.disabled = false; btn.textContent = orig; status.className = 'dwm-status'; form.reset(); }, 2800);
+ } catch (err) {
+ status.textContent = 'Send failed — please email info@designerwallcoverings.com';
+ status.className = 'dwm-status err';
+ btn.disabled = false; btn.textContent = orig;
+ }
+ return false;
+ }
+
+ // Wire up "Memo samples ship free" badge in hero to open sample modal directly
+ document.querySelectorAll('.hero .badge, [data-open-sample]').forEach(el => {
+ el.style.cursor = 'pointer';
+ el.addEventListener('click', () => dwmOpen('Sample'));
+ });
+
+ // Wire nav "Trade" link to inquiry modal
+ document.querySelectorAll('nav a[href*="designerwallcoverings.com"]').forEach(a => {
+ a.removeAttribute('target');
+ a.removeAttribute('href');
+ a.style.cursor = 'pointer';
+ a.addEventListener('click', e => { e.preventDefault(); dwmOpen('Contact'); });
+ });
+
+ // Override product card clicks — open Sample modal pre-filled instead of redirecting to DW
+ document.addEventListener('click', e => {
+ const card = e.target.closest('.card, .rail-card');
+ if (!card) return;
+ if (card.tagName === 'A' && (card.getAttribute('href') || '').startsWith('/sample/')) {
+ e.preventDefault();
+ const img = card.querySelector('img');
+ const pat = card.querySelector('.pat');
+ const sku = card.getAttribute('href').replace('/sample/', '');
+ dwmOpen('Sample', {
+ sku,
+ title: pat ? pat.textContent.trim() : '',
+ image_url: img ? img.src : ''
+ });
+ }
+ }, true);
+// DW STANDARD: hero pulls from products.json[0].image_url so dw-collections-viewer
+// drag-drop / hero-pin updates the live front page on next deploy.
+// Always upgrades to the largest Shopify variant (strips _NxN size suffix) so
+// the full-page hero stays sharp.
+// DW STANDARD: hero rotates through top-20 NEWEST products on each visit
+// (novasuede.com pattern). Fetches /api/products?limit=100, sorts by created_at desc,
+// takes the freshest 20, picks one per visit via localStorage counter.
+// Falls back to static /hero-bg.jpg on any error.
+(async function rotateHero() {
+ try {
+ const r = await fetch('/api/products?limit=100');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || [])
+ .filter(p => p && p.image_url && /^https:\/\/(?:cdn\.shopify\.com|designerwallcoverings\.com)\//.test(p.image_url))
+ .sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')))
+ .slice(0, 20);
+ if (!items.length) return;
+ let visits = 0;
+ try {
+ visits = parseInt(localStorage.getItem('hero_visits') || '0', 10) || 0;
+ localStorage.setItem('hero_visits', String(visits + 1));
+ } catch(e) {}
+ const pick = items[visits % items.length];
+ // Strip _NxN size suffix to get the largest CDN variant
+ const url = pick.image_url.replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ const bg = document.getElementById('heroBg') || document.getElementById('cinemaBg');
+ if (bg) bg.style.backgroundImage = "url('" + url + "')";
+ } catch (e) {}
+})();
+
+
+// DW STANDARD sort-select wire-up (added by fleet patcher)
+(function(){
+ const sortSel = document.getElementById('sortSelect');
+ if (!sortSel) return;
+ const KEY = location.hostname.replace(/\./g, '_') + '_sort';
+ const saved = localStorage.getItem(KEY);
+ if (saved) { try { sortSel.value = saved; } catch(e){} }
+ if (typeof state !== 'undefined') state.sort = sortSel.value;
+ sortSel.addEventListener('change', e => {
+ const v = e.target.value;
+ try { localStorage.setItem(KEY, v); } catch(e){}
+ if (typeof state !== 'undefined') state.sort = v;
+ if (typeof resetGrid === 'function') resetGrid();
+ else location.reload();
+ });
+})();
+
+// graphics-loop pass 11: hydrate Ideas rails from /api/products
+(async function hydrateIdeas() {
+ try {
+ const r = await fetch('/api/products?limit=80');
+ if (!r.ok) return;
+ const d = await r.json();
+ const items = (d.items || []).filter(p => p && p.image_url);
+ if (!items.length) return;
+ const sorted = [...items].sort((a,b) => String(b.created_at || '').localeCompare(String(a.created_at || '')));
+ const newest = sorted.slice(0, 12);
+ // Curated = deterministic offset slice (every 5th item starting at idx 3) for variety
+ const curated = items.filter((_, i) => i % 5 === 3).slice(0, 12);
+ function card(p) {
+ const url = (p.image_url || '').replace(/(_\d+x\d*)(\.(jpg|jpeg|png|webp|gif))(\?|$)/i, '$2$4');
+ return '<a class="rail-card" href="/sample/' + encodeURIComponent(p.handle || p.sku) + '">' +
+ '<img src="' + url + '" alt="' + (p.title || '').replace(/"/g, '"') + '" loading="lazy">' +
+ '<div class="rc-title">' + ((p.title || '').split('|')[0] || '').trim() + '</div>' +
+ '<div class="rc-meta">' + (p.vendor || '') + '</div>' +
+ '</a>';
+ }
+ const r1 = document.getElementById('railNewest');
+ const r2 = document.getElementById('railCurated');
+ if (r1) r1.innerHTML = newest.map(card).join('');
+ if (r2) r2.innerHTML = curated.map(card).join('');
+ } catch(e) {}
+})();
+</script>
+
+</body>
+</html>
diff --git a/public/sourcing.html b/public/sourcing.html
new file mode 100644
index 0000000..4c9d45c
--- /dev/null
+++ b/public/sourcing.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html lang="en"><head>
+<!-- editorial-gen v1 -->
+<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>How we source — mylarwallpaper.com</title>
+<meta name="description" content="How we source — An atelier devoted to mylar.">
+<link rel="canonical" href="https://mylarwallpaper.com/sourcing">
+<style>
+*{margin:0;padding:0;box-sizing:border-box}
+body{font-family:ui-serif;background:#FAF9F6;color:#1A1A1A;line-height:1.65;padding:60px 24px;min-height:100vh}
+.wrap{max-width:720px;margin:0 auto}
+.eyebrow{font-size:10px;letter-spacing:0.22em;text-transform:uppercase;color:#A98B5B;margin-bottom:18px}
+h1{font-family:'Tiempos Headline', serif;font-style:italic;font-size:48px;line-height:1.1;letter-spacing:-0.02em;color:#1A1A1A;margin-bottom:32px}
+h2{font-family:'Tiempos Headline', serif;font-size:22px;color:#A98B5B;margin:36px 0 12px;font-weight:500}
+p{margin-bottom:16px;color:#3a322c}
+ul{margin:12px 0 20px 18px}
+li{margin-bottom:8px;color:#3a322c}
+strong{color:#1A1A1A}
+a{color:#A98B5B;text-decoration:underline;text-underline-offset:3px}
+nav.foot{margin-top:56px;padding-top:24px;border-top:1px solid rgba(0,0,0,0.10);font-size:11px;letter-spacing:0.18em;text-transform:uppercase}
+nav.foot a{margin-right:22px;text-decoration:none}
+</style>
+</head><body>
+<div class="wrap">
+<div class="eyebrow">Editorial · sourcing · Maison Argent</div>
+<h1>How we source</h1>
+<p>We do not source by impulse. Our selection of mylar is a dialogue with time, a negotiation between legacy and the present. Every roll that enters our atelier is a testament to precision, a reflection of the standards that define us. The process is not one of abundance, but of discernment—each choice made with the weight of generations behind it.</p>
+
+<h2>The Mills We Trust</h2>
+
+<p>We work exclusively with mills that have honed their craft over decades, often in regions where the art of metallized textiles has been preserved as both heritage and innovation. These are not factories, but ateliers of precision, where the interplay of light and material is understood as an act of reverence. Our partnerships are built on a shared language of excellence: the ability to weave mylar into surfaces that are not merely decorative, but transformative. These mills operate with a level of secrecy and mastery that makes them rare, their processes often unshared, their results unreplicated.</p>
+
+<ul>
+ <li>Our mills are chosen for their ability to produce mylar with a luminosity that shifts subtly under varying light, a quality that cannot be replicated by mass production.</li>
+ <li>We prioritize mills that use proprietary techniques to embed metallic threads or films without compromising the integrity of the substrate, ensuring a finish that is both durable and ethereal.</li>
+ <li>Each mill is vetted for its ability to meet our exacting standards for consistency, with samples tested under conditions that simulate decades of use in both residential and commercial settings.</li>
+</ul>
+
+<h2>The Trade-Only Catalogs We Rely On</h2>
+
+<p>The catalogs we consult are not public-facing; they are the private ledgers of those who understand that mylar is not a material for the casual decorator. These are the catalogs of mills that serve only the most discerning clients, where patterns are not sold in bulk but in curated collections. We access these through direct relationships, bypassing intermediaries who might dilute the purity of the material or the intent behind its design. These catalogs are not mere listings—they are curated portfolios, each entry a story of craftsmanship and intent.</p>
+
+<h2>The Criteria for Inclusion</h2>
+
+<p>Not all mylar is equal, and not all patterns are worthy of our atelier. Our criteria are rigorous, rooted in a philosophy that values longevity over novelty, subtlety over spectacle. The substrate must be of archival quality, capable of resisting the passage of time without fading or peeling. The repeat must be symmetrical, modular, or seamless—patterns that do not demand a specific orientation but adapt to the space they inhabit. Washfastness is non-negotiable; our mylar must endure the rigors of humidity, cleaning, and exposure to light without compromising its luster.</p>
+
+<ul>
+ <li>Substrate: We only accept mylar that has been treated with archival-grade coatings, ensuring it remains unblemished for decades.</li>
+ <li>Repeat: Patterns must be designed with a rhythm that allows for seamless application, avoiding the jarring disruptions of misalignment.</li>
+ <li>Washfastness: Our mylar undergoes rigorous testing for resistance to fading, staining, and degradation, ensuring it remains as luminous on day one as on day ten.</li>
+</ul>
+
+<h2>What Gets Cut</h2>
+
+<p>Our curation is an act of exclusion as much as inclusion. Patterns that lack the subtlety of their materials, that prioritize novelty over durability, or that fail to meet our exacting standards for light interaction are discarded without hesitation. We cut anything that lacks the quiet authority of a material that has stood the test of time. The result is a collection that is not merely beautiful, but enduring—a reflection of a legacy that refuses to compromise.
+<nav class="foot">
+<a href="/">Browse</a>
+<a href="/history">History</a>
+<a href="/vocabulary">Vocabulary</a>
+<a href="/sourcing">Sourcing</a>
+<a href="/care">Care</a>
+<a href="/trade">Trade</a>
+<a href="/about">About</a>
+</nav>
+</div></body></html>
\ No newline at end of file
diff --git a/public/trade.html b/public/trade.html
new file mode 100644
index 0000000..1ff0b3e
--- /dev/null
+++ b/public/trade.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html lang="en"><head>
+<!-- editorial-gen v1 -->
+<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Trade program — mylarwallpaper.com</title>
+<meta name="description" content="Trade program — An atelier devoted to mylar.">
+<link rel="canonical" href="https://mylarwallpaper.com/trade">
+<style>
+*{margin:0;padding:0;box-sizing:border-box}
+body{font-family:ui-serif;background:#FAF9F6;color:#1A1A1A;line-height:1.65;padding:60px 24px;min-height:100vh}
+.wrap{max-width:720px;margin:0 auto}
+.eyebrow{font-size:10px;letter-spacing:0.22em;text-transform:uppercase;color:#A98B5B;margin-bottom:18px}
+h1{font-family:'Tiempos Headline', serif;font-style:italic;font-size:48px;line-height:1.1;letter-spacing:-0.02em;color:#1A1A1A;margin-bottom:32px}
+h2{font-family:'Tiempos Headline', serif;font-size:22px;color:#A98B5B;margin:36px 0 12px;font-weight:500}
+p{margin-bottom:16px;color:#3a322c}
+ul{margin:12px 0 20px 18px}
+li{margin-bottom:8px;color:#3a322c}
+strong{color:#1A1A1A}
+a{color:#A98B5B;text-decoration:underline;text-underline-offset:3px}
+nav.foot{margin-top:56px;padding-top:24px;border-top:1px solid rgba(0,0,0,0.10);font-size:11px;letter-spacing:0.18em;text-transform:uppercase}
+nav.foot a{margin-right:22px;text-decoration:none}
+</style>
+</head><body>
+<div class="wrap">
+<div class="eyebrow">Editorial · trade · Maison Argent</div>
+<h1>Trade program</h1>
+<p>Maison Argent exists to serve those who understand the quiet power of materiality. As a curated atelier devoted exclusively to mylar, we invite a select circle of professionals—designers, architects, and contractors—to engage with our work in a manner befitting its rarity and precision. This is not a catalog; it is an invitation to collaborate with a material that has long been reserved for the most discerning of applications. Our program is designed for those who recognize that mylar is not merely a surface, but a statement.</p>
+
+<h2>Who Qualifies</h2>
+<p>Maison Argent’s program is reserved for professionals whose work demands the highest standards of materiality and execution. This includes:</p>
+<ul>
+ <li><strong>Designers</strong> specializing in interiors, with a focus on projects requiring bespoke, high-impact finishes.</li>
+ <li><strong>Architects</strong> seeking materials that transcend conventional wallcoverings, offering both visual and structural integrity.</li>
+ <li><strong>Contractors</strong> engaged in high-end residential or commercial projects where precision and exclusivity are paramount.</li>
+</ul>
+<p>Eligibility is determined through an invitation-only process, ensuring that our offerings align with the ambitions of those who represent them.</p>
+
+<h2>Memo Samples</h2>
+<p>Our memo samples are not mere swatches, but miniature manifestations of our ethos. Each sample is meticulously cut and sealed in a custom envelope, accompanied by a note detailing its provenance, finish, and intended use. These are dispatched upon request, with no obligation to purchase. Returns are accepted within 30 days, though we encourage our collaborators to consider them as enduring references rather than temporary trials.</p>
+
+<h2>Lead Times</h2>
+<p>Our lead times reflect the care with which we handle each commission. Standard orders are fulfilled within 8–12 weeks, though this may extend for bespoke or custom-print requests. Factors such as complexity of finish, scale of production, and availability of materials are communicated upfront, ensuring transparency at every stage.</p>
+
+<h2>Terms & Conditions</h2>
+<p>All transactions are conducted under NET-30 terms, reflecting our confidence in the professionalism of our collaborators. Invoices are issued upon shipment, with payment due within 30 days. This structure is designed to support the fluidity of creative projects, ensuring that our partners are not burdened by excessive upfront costs.</p>
+
+<h2>Custom-Print Availability</h2>
+<p>For those with visions beyond our existing repertoire, Maison Argent offers bespoke-print options. Custom designs are accepted in digital format, with a minimum resolution of 300 dpi. Collaborators are invited to submit proposals, which are reviewed for feasibility and alignment with our standards. Once approved, production timelines and costs are outlined in detail, ensuring clarity before commitment.</p>
+
+<h2>The Designer Wallcoverings Legacy</
+<nav class="foot">
+<a href="/">Browse</a>
+<a href="/history">History</a>
+<a href="/vocabulary">Vocabulary</a>
+<a href="/sourcing">Sourcing</a>
+<a href="/care">Care</a>
+<a href="/trade">Trade</a>
+<a href="/about">About</a>
+</nav>
+</div></body></html>
\ No newline at end of file
diff --git a/server.js.pre-sort-skill b/server.js.pre-sort-skill
new file mode 100644
index 0000000..0586900
--- /dev/null
+++ b/server.js.pre-sort-skill
@@ -0,0 +1,156 @@
+/**
+ * MYLAR WALLPAPER — DW family vertical
+ * Curated slice from live designerwallcoverings.com Shopify catalog.
+ */
+try { require('dotenv').config(); } catch (e) {}
+const express = require('express');
+const path = require('path');
+const fs = require('fs');
+
+const PORT = process.env.PORT || 9878;
+const DW_SHOPIFY = 'https://designerwallcoverings.com';
+const __SITE = path.basename(__dirname);
+let DATA_RAW;
+try {
+ const raw = fs.readFileSync(path.join(__dirname, 'data', 'products.json'), 'utf8');
+ DATA_RAW = JSON.parse(raw);
+ if (!Array.isArray(DATA_RAW)) throw new Error('products.json must be an array');
+} catch (e) {
+ console.error(`[${__SITE}] FATAL: could not load products.json — ${e.message}`);
+ console.error(`[${__SITE}] Starting with empty catalog. Run pull script to populate data/products.json.`);
+ DATA_RAW = [];
+}
+
+function isJunk(p) {
+ if (!p.image_url || !p.image_url.trim()) return true;
+ if (!p.handle && !p.sku) return true;
+ const t = p.title || '';
+ if (/lamp|rug|pillow|throw|tripod|frame|mirror|vase|candle|sculpture|figurine/i.test(t)) return true;
+ if (/visual.{0,3}merchandiser/i.test(t)) return true;
+ if (/(?:^|\W)image[ _-]?4(?:\W|$)/i.test(t)) return true;
+ if (/bh.?90210|beverly.?hills.?90210|iconic.{0,4}bh/i.test(t)) return true;
+ return false;
+}
+
+const PRODUCTS = DATA_RAW.filter(p => !isJunk(p));
+const DROPPED = DATA_RAW.length - PRODUCTS.length;
+console.log(`Loaded ${DATA_RAW.length}, kept ${PRODUCTS.length}, dropped ${DROPPED}`);
+
+// graphics-loop pass 12: niche keyword filter — only show products that fit this site's niche
+const NICHE_POS = ["mylar","foil","reflective","holographic","metallic"];
+const NICHE_NEG = ["solid","blank","plain"];
+function nicheFit(p) {
+ const blob = ((p.title || '') + ' ' + (p.tags || []).join(' ')).toLowerCase();
+ if (NICHE_NEG.some(n => blob.includes(n.toLowerCase()))) return false;
+ return NICHE_POS.length === 0 || NICHE_POS.some(k => blob.includes(k.toLowerCase()));
+}
+const PRODUCTS_NICHE = PRODUCTS.filter(nicheFit);
+const NICHE_DROPPED = PRODUCTS.length - PRODUCTS_NICHE.length;
+console.log(`Niche filter: kept ${PRODUCTS_NICHE.length} of ${PRODUCTS.length}, dropped ${NICHE_DROPPED}`);
+// Replace PRODUCTS reference with the niche-filtered list for all downstream handlers.
+const PRODUCTS_ORIG = PRODUCTS;
+Object.defineProperty(global, '__products_niche_applied', { value: true });
+
+
+const app = express();
+// DW STANDARD: sort by color/style/sku/title for any product-rendering site.
+const COLOR_RANK = {
+ black:0,gray:1,grey:1,silver:2,white:3,ivory:4,cream:5,beige:6,brown:7,tan:8,khaki:9,copper:10,
+ red:20,pink:21,coral:22,orange:23,peach:24,salmon:25,
+ yellow:30,gold:31,mustard:32,olive:33,
+ green:40,lime:41,mint:42,teal:50,aqua:51,turquoise:52,cyan:53,
+ blue:60,navy:61,indigo:62,periwinkle:63,
+ purple:70,violet:71,lavender:72,plum:73,magenta:74,fuchsia:75,
+};
+function colorRank(p) {
+ const tags = (p.tags || []).map(t => String(t).toLowerCase());
+ for (const t of tags) for (const k of Object.keys(COLOR_RANK)) if (t.includes(k)) return COLOR_RANK[k];
+ return 999;
+}
+const STYLE_TAGS = ['traditional','transitional','modern','contemporary','minimalist','art deco','victorian','mid-century','mid century','rustic','industrial','farmhouse','bohemian','boho','geometric','floral','botanical','damask','toile','grasscloth','silk','linen','vinyl','natural'];
+function styleKey(p) {
+ const tags = (p.tags || []).map(t => String(t).toLowerCase());
+ for (const s of STYLE_TAGS) if (tags.some(t => t.includes(s))) return s;
+ return 'zzz';
+}
+function sortProducts(list, mode) {
+ if (mode === 'sku') return [...list].sort((a,b) => String(a.sku || a.handle || '').localeCompare(String(b.sku || b.handle || '')));
+ if (mode === 'title') return [...list].sort((a,b) => String(a.title || '').localeCompare(String(b.title || '')));
+ if (mode === 'color') return [...list].sort((a,b) => colorRank(a) - colorRank(b) || String(a.title || '').localeCompare(String(b.title || '')));
+ if (mode === 'style') return [...list].sort((a,b) => styleKey(a).localeCompare(styleKey(b)) || String(a.title || '').localeCompare(String(b.title || '')));
+ if (mode === 'price-asc') return [...list].sort((a,b) => (Number(a.max_price) || 0) - (Number(b.max_price) || 0));
+ if (mode === 'price-desc') return [...list].sort((a,b) => (Number(b.max_price) || 0) - (Number(a.max_price) || 0));
+ return list;
+}
+
+
+app.use(express.json({ limit: "256kb" }));
+const cfg = require('../_shared/site-config').load(__dirname);
+require("./_universal-contact")(app, cfg.contact);
+require("./_universal-auth")(app, cfg.auth);
+app.use(express.static(path.join(__dirname, 'public')));
+
+app.get('/api/products', (req, res) => {
+ const { q, aesthetic, vendor, page = 1, limit = 24, sort = 'newest'} = req.query;
+ let list = PRODUCTS_NICHE;
+ if (q) {
+ const needle = q.toLowerCase();
+ list = list.filter(p => (p.title || '').toLowerCase().includes(needle) || (p.tags || []).some(t => t.toLowerCase().includes(needle)));
+ }
+ if (aesthetic && aesthetic !== 'all') list = list.filter(p => p.aesthetic === aesthetic);
+ if (vendor && vendor !== 'all') list = list.filter(p => p.vendor === vendor);
+ list = sortProducts(list, sort);
+ const total = list.length;
+ const pageNum = Math.max(1, parseInt(page) || 1);
+ const lim = Math.min(60, parseInt(limit) || 24);
+ const start = (pageNum - 1) * lim;
+ res.json({ total, page: pageNum, limit: lim, pages: Math.ceil(total/lim), sort, items: list.slice(start, start + lim) });
+ // (replaced) old: pages: Math.ceil(total / lim), items: list.slice(start, start + lim) });
+});
+
+app.get('/api/sliders', (req, res) => {
+ const SLIDER_AESTHETICS = ["mylar","chrome","gold","copper","iridescent","abstract"];
+ const out = [];
+ for (const a of SLIDER_AESTHETICS) {
+ const items = PRODUCTS_NICHE.filter(p => p.aesthetic === a).slice(0, 12);
+ if (items.length >= 4) out.push({ aesthetic: a, items });
+ }
+ res.json({ rails: out });
+});
+
+app.get('/api/facets', (req, res) => {
+ const aesthetics = {}; const vendors = {};
+ for (const p of PRODUCTS_NICHE) {
+ aesthetics[p.aesthetic] = (aesthetics[p.aesthetic] || 0) + 1;
+ vendors[p.vendor] = (vendors[p.vendor] || 0) + 1;
+ }
+ res.json({ aesthetics, vendors, total: PRODUCTS.length });
+});
+
+app.get('/api/health', (req, res) => res.json({ status: 'ok', count: PRODUCTS_NICHE.length, dropped: DROPPED }));
+
+app.get('/sample/:handle', (req, res) => {
+ const p = PRODUCTS_NICHE.find(x => x.handle === req.params.handle || x.sku === req.params.handle);
+ if (!p) return res.status(404).send('Not found');
+ res.redirect(302, p.product_url || `${DW_SHOPIFY}/products/${encodeURIComponent(p.handle)}#sample`);
+});
+
+// sitemap.xml + robots.txt for SEO
+app.get('/robots.txt', (req, res) => {
+ res.type('text/plain').send(`User-agent: *
+Allow: /
+Sitemap: https://mylarwallpaper.com/sitemap.xml
+`);
+});
+app.get('/sitemap.xml', (req, res) => {
+ const urls = ['/'];
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+${urls.map(u => ` <url><loc>https://mylarwallpaper.com${u}</loc><changefreq>weekly</changefreq></url>`).join('\n')}
+</urlset>`;
+ res.type('application/xml').send(xml);
+});
+
+app.listen(PORT, '127.0.0.1', () => {
+ console.log(`mylarwallpaper listening on http://127.0.0.1:${PORT}`);
+});
← e316e04 fleet-grid refine: chip_uniform_aspect (mylarwallpaper)
·
back to Mylarwallpaper
·
header: remove duplicate <header> with dwmOpen-contact (was 98cdf99 →