[object Object]

← back to Consulting Designerwallcoverings Com

P2 fixes: honest null fleet counts, Gallery concept to light marketplace-luxe

d4a733e5ac2e42123268c99aac50eabb3283c09d · 2026-07-26 08:18:43 -0700 · Steve Abrams

Files touched

Diff

commit d4a733e5ac2e42123268c99aac50eabb3283c09d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Jul 26 08:18:43 2026 -0700

    P2 fixes: honest null fleet counts, Gallery concept to light marketplace-luxe
---
 build.mjs                    |   2 +-
 data/dw-analysis.json        | 220 +++++++++++++++++++++----------------------
 public/portal.html           |  32 +++----
 public/versions/gallery.html |  34 +++----
 scripts/collect-dw.mjs       |   8 +-
 5 files changed, 148 insertions(+), 148 deletions(-)

diff --git a/build.mjs b/build.mjs
index 8d03c79..2c74b2d 100644
--- a/build.mjs
+++ b/build.mjs
@@ -52,7 +52,7 @@ const HOUSES = [
   { key:'studio',   label:'Studio',   model:'Backdrop (DTC)',    bg:'#faf7f2', panel:'#f0e9dd', ink:'#1d1b17', gold:'#d96a3b', line:'rgba(29,27,23,.14)',  disp:"'Inter',system-ui,sans-serif",       sans:"'Inter',system-ui,sans-serif", dark:false, tag:'Wallpaper, without the intimidation.', mood:'DTC-playful — bold color blocks, plain language, sample-first funnel.' },
   { key:'heritage', label:'Heritage', model:'Farrow & Ball',     bg:'#232820', panel:'#2e352a', ink:'#efeee6', gold:'#b7a878', line:'rgba(183,168,120,.26)', disp:"'Cormorant Garamond',Georgia,serif", sans:"'Jost',system-ui,sans-serif", dark:true,  tag:'Colour, considered for a century.', mood:'Estate heritage — muted greens, archival typography, room-story merchandising.' },
   { key:'texture',  label:'Texture',  model:'Arte International',bg:'#0f0d0b', panel:'#191510', ink:'#f1ece3', gold:'#c9a24b', line:'rgba(201,162,75,.28)',  disp:"'Cormorant Garamond',Georgia,serif", sans:"'Jost',system-ui,sans-serif", dark:true,  tag:'Material is the message.', mood:'Immersive texture — full-bleed material macros, dark gallery chrome, slow motion.' },
-  { key:'gallery',  label:'Gallery',  model:'1stDibs',           bg:'#101012', panel:'#1a1a1e', ink:'#f4f2ee', gold:'#caa96a', line:'rgba(202,169,106,.26)', disp:"'Playfair Display',Georgia,serif",  sans:"'Inter',system-ui,sans-serif", dark:true,  tag:'The marketplace of extraordinary walls.', mood:'Marketplace-luxe — curated collections, provenance chips, designer-first navigation.' },
+  { key:'gallery',  label:'Gallery',  model:'1stDibs',           bg:'#f7f5f1', panel:'#ebe7df', ink:'#191919', gold:'#a3803c', line:'rgba(25,25,25,.14)',    disp:"'Playfair Display',Georgia,serif",  sans:"'Inter',system-ui,sans-serif", dark:false, tag:'The marketplace of extraordinary walls.', mood:'Marketplace-luxe — white-gallery ground, curated collections, provenance chips, designer-first navigation.' },
 ];
 
 /* ---- chart data straight from the snapshot ---------------------------------- */
diff --git a/data/dw-analysis.json b/data/dw-analysis.json
index 5387582..a1b6c80 100644
--- a/data/dw-analysis.json
+++ b/data/dw-analysis.json
@@ -1,5 +1,5 @@
 {
-  "collected_at": "2026-07-26T15:13:42.396Z",
+  "collected_at": "2026-07-26T15:18:43.298Z",
   "sources": {
     "mirror": "dw_unified local mirror (host=/tmp) — READ ONLY",
     "mcc": "marketing.designerwallcoverings.com/api/channels/status",
@@ -289,306 +289,306 @@
     }
   ],
   "fleet": {
-    "count": 281,
+    "count": 234,
     "sites": [
       {
         "host": "all.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "japan.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "kravet.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "cowtan.designerwallcoverings.com",
-        "products": 24,
-        "ok": null
-      },
-      {
-        "host": "coastline-reserve.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "cowtan-tout.designerwallcoverings.com",
-        "products": 24,
-        "ok": null
-      },
-      {
-        "host": "phillipe-romano-textiles.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "astek.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "ascreation.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "wolfgordon.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "pf-fabric-10110.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "pierrefreyfabrics.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "scalamandre.designerwallcoverings.com",
-        "products": 24,
-        "ok": null
-      },
-      {
-        "host": "sangetsu.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "milton-king.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "phillipjeffries.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "rebelwalls.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "jeffreystevens.designerwallcoverings.com",
-        "products": 24,
-        "ok": null
-      },
-      {
-        "host": "china.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "quadrille.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "malibu.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "marburg.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "hollywood.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "sancar.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "philliperomano.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "graham-brown.designerwallcoverings.com",
-        "products": 24,
-        "ok": null
-      },
-      {
-        "host": "coordonn.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "coordonne.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "designtex.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "chinaseas.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "romo.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
         "ok": null
       },
       {
         "host": "jf-fabrics.designerwallcoverings.com",
-        "products": 24,
+        "products": null,
+        "ok": null
+      },
+      {
+        "host": "koroseal.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "goodrich.designerwallcoverings.com",
-        "products": 24,
+        "host": "philipjeffries.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "eijffinger.designerwallcoverings.com",
-        "products": 24,
+        "host": "holly-hunt.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "koroseal.designerwallcoverings.com",
-        "products": 24,
+        "host": "arte.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "murals.designerwallcoverings.com",
-        "products": 24,
+        "host": "thibaut.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "philipjeffries.designerwallcoverings.com",
-        "products": 24,
+        "host": "maharam.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "phillipe-romano-vinyls.designerwallcoverings.com",
-        "products": 24,
+        "host": "trestintas.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "holly-hunt.designerwallcoverings.com",
-        "products": 24,
+        "host": "colouranddesign.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "arte.designerwallcoverings.com",
-        "products": 24,
+        "host": "fabricut.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "thibaut.designerwallcoverings.com",
-        "products": 24,
+        "host": "designersguild.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "j-josephson.designerwallcoverings.com",
-        "products": 24,
+        "host": "newmor.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "omexco.designerwallcoverings.com",
-        "products": 24,
+        "host": "coleandson.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "koroseal-sg.designerwallcoverings.com",
-        "products": 24,
+        "host": "relativity-textiles.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "maharam.designerwallcoverings.com",
-        "products": 24,
+        "host": "denovowall.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "trestintas.designerwallcoverings.com",
-        "products": 24,
+        "host": "elitis.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "colour-design.designerwallcoverings.com",
-        "products": 24,
+        "host": "pierre-frey.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "colouranddesign.designerwallcoverings.com",
-        "products": 24,
+        "host": "andrewmartin.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "cole-son-sg.designerwallcoverings.com",
-        "products": 24,
+        "host": "sandberg.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "fabricut.designerwallcoverings.com",
-        "products": 24,
+        "host": "rwltd.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "designersguild.designerwallcoverings.com",
-        "products": 24,
+        "host": "mindthegap.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "newmor.designerwallcoverings.com",
-        "products": 24,
+        "host": "markalexander.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "coleandson.designerwallcoverings.com",
-        "products": 24,
+        "host": "reidwitlin.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "ardsley-textiles.designerwallcoverings.com",
-        "products": 24,
+        "host": "cole-son.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "relativity-textiles.designerwallcoverings.com",
-        "products": 24,
+        "host": "tecnografica.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "denovo-wall.designerwallcoverings.com",
-        "products": 24,
+        "host": "harlequin.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "elitis.designerwallcoverings.com",
-        "products": 24,
+        "host": "maya.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "pierre-frey.designerwallcoverings.com",
-        "products": 24,
+        "host": "brunschwig.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "andrewmartin.designerwallcoverings.com",
-        "products": 24,
+        "host": "surfacestick.designerwallcoverings.com",
+        "products": null,
         "ok": null
       },
       {
-        "host": "sandberg.designerwallcoverings.com",
-        "products": 24,
+        "host": "fromental.designerwallcoverings.com",
+        "products": null,
+        "ok": null
+      },
+      {
+        "host": "fromental-internal.designerwallcoverings.com",
+        "products": null,
+        "ok": null
+      },
+      {
+        "host": "carlisle.designerwallcoverings.com",
+        "products": null,
+        "ok": null
+      },
+      {
+        "host": "catchii.designerwallcoverings.com",
+        "products": null,
+        "ok": null
+      },
+      {
+        "host": "annafrench.designerwallcoverings.com",
+        "products": null,
         "ok": null
       }
     ]
diff --git a/public/portal.html b/public/portal.html
index d496e25..e51f003 100644
--- a/public/portal.html
+++ b/public/portal.html
@@ -110,7 +110,7 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
 </style></head><body>
 <header class="bar">
   <button class="burger" onclick="document.body.classList.toggle('nav')" aria-label="Menu" aria-expanded="false" aria-controls="portalmenu"><span></span><span></span><span></span></button>
-  <div class="stamp"><span>Data collected Jul 26, 2026, 8:13 AM</span><button id="refbtn" title="Re-run the read-only collector">↻ Refresh data</button></div>
+  <div class="stamp"><span>Data collected Jul 26, 2026, 8:18 AM</span><button id="refbtn" title="Re-run the read-only collector">↻ Refresh data</button></div>
 </header>
 <div class="scrim" onclick="document.body.classList.remove('nav')"></div>
 <nav class="menu" id="portalmenu" onclick="if(event.target.closest('a'))document.body.classList.remove('nav')">
@@ -124,11 +124,11 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
   <div class="in">
     <div class="kick">Los Angeles · nationwide e-commerce + trade · Confidential strategy brief · prepared for Steve Abrams</div>
     <h1 class="disp">Designer <span>Wallcoverings</span></h1>
-    <p>Thirty years of trade authority, <b>80,522 live SKUs</b> across <b>174 vendor lines</b>, a <b>281-site</b> discovery fleet, and <b>7 connected social channels</b> — the deepest designer-wallcovering operation online. The opportunity isn't building an audience; it's converting the catalog's dormant depth (a 22,952-product sellable-variant backlog, 16,055 staged drafts) into measured revenue. This brief maps exactly that, from the live data.</p>
+    <p>Thirty years of trade authority, <b>80,522 live SKUs</b> across <b>174 vendor lines</b>, a <b>234-site</b> discovery fleet, and <b>7 connected social channels</b> — the deepest designer-wallcovering operation online. The opportunity isn't building an audience; it's converting the catalog's dormant depth (a 22,952-product sellable-variant backlog, 16,055 staged drafts) into measured revenue. This brief maps exactly that, from the live data.</p>
     <div class="metrics">
       <div class="m"><div class="v" data-c="80522">0</div><div class="l">Live SKUs (active)</div></div>
       <div class="m"><div class="v" data-c="174">0</div><div class="l">Vendor lines</div></div>
-      <div class="m"><div class="v" data-c="281">0</div><div class="l">Microsite fleet</div></div>
+      <div class="m"><div class="v" data-c="234">0</div><div class="l">Microsite fleet</div></div>
       <div class="m"><div class="v" data-c="16055">0</div><div class="l">Staged drafts (fuel)</div></div>
     </div>
   </div>
@@ -137,19 +137,19 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
 <div class="accbar"><button id="xall">Expand all</button><button id="call">Collapse all</button></div>
 
 <section id="swot"><div class="eyebrow">Strategic Snapshot · SWOT</div><h2 class="disp">The whole board on one screen.</h2><div class="accbody">
-  <p class="lead2">Four lenses over the live snapshot — internal <b>Strengths</b> and <b>Weaknesses</b>, external <b>Opportunities</b> and <b>Threats</b> — so the strategy that follows starts from one honest picture. Every number here is from the Jul 26, 2026, 8:13 AM collection.</p>
-  <div class="swotgrid"><div class="swotq pos"><h3>Strengths</h3><ul><li>80,522 live SKUs across 174 vendor lines — one of the deepest designer-wallcovering catalogs online</li><li>A 281-site microsite fleet feeding discovery back to the flagship</li><li>7/7 social channels connected through one marketing command center</li><li>Private-label lines with owned margin (Phillipe Romano, Hollywood Wallcoverings, Malibu Wallpaper)</li><li>30+ years of trade relationships; memo-sample program ($4.25) as a proven funnel entry</li><li>Automated activation drip already shipping ~500 products/day, textures-first</li></ul></div><div class="swotq neg"><h3>Weaknesses</h3><ul><li>22,952 active products are sample-only WITHOUT a quote-only designation — browseable but not buyable</li><li>1,444 actives carry zero/null pricing; 333 lack a featured image</li><li>Social reach is broad (80 FB pages, 34 IG accounts) but thin — distribution without engagement depth</li><li>No social→revenue attribution discipline (UTM/coupon per channel) yet</li><li>Flagship UX carries catalog weight — 80k SKUs need stronger guided curation for retail buyers</li></ul></div><div class="swotq pos"><h3>Opportunities</h3><ul><li>Convert the 22,952 sample-only backlog into sellable variants — the single largest dormant-revenue pool in the business</li><li>16,055 staged drafts (2,793 fully stageable today) = months of "New Arrivals" marketing fuel</li><li>AEO/AI-answer citations for wallcovering queries — the flagship already ships an AEO block; extend it fleet-wide</li><li>Sample-order → full-roll conversion funnel instrumentation (order sync to the back office already exists)</li><li>Licensing original design IP (settlement-gated) into marketplaces as a zero-inventory revenue line</li></ul></div><div class="swotq neg"><h3>Threats</h3><ul><li>DTC-native entrants own the "approachable wallpaper" narrative with modern brand voices</li><li>Marketplace aggregators (Amazon, Wayfair, Etsy) commoditize mid-tier patterns</li><li>AI answer engines could disintermediate catalog-depth advantages if citations go to competitors</li><li>Vendor MAP / brand-control tightening limits pricing latitude on marquee lines</li></ul></div></div>
+  <p class="lead2">Four lenses over the live snapshot — internal <b>Strengths</b> and <b>Weaknesses</b>, external <b>Opportunities</b> and <b>Threats</b> — so the strategy that follows starts from one honest picture. Every number here is from the Jul 26, 2026, 8:18 AM collection.</p>
+  <div class="swotgrid"><div class="swotq pos"><h3>Strengths</h3><ul><li>80,522 live SKUs across 174 vendor lines — one of the deepest designer-wallcovering catalogs online</li><li>A 234-site microsite fleet feeding discovery back to the flagship</li><li>7/7 social channels connected through one marketing command center</li><li>Private-label lines with owned margin (Phillipe Romano, Hollywood Wallcoverings, Malibu Wallpaper)</li><li>30+ years of trade relationships; memo-sample program ($4.25) as a proven funnel entry</li><li>Automated activation drip already shipping ~500 products/day, textures-first</li></ul></div><div class="swotq neg"><h3>Weaknesses</h3><ul><li>22,952 active products are sample-only WITHOUT a quote-only designation — browseable but not buyable</li><li>1,444 actives carry zero/null pricing; 333 lack a featured image</li><li>Social reach is broad (80 FB pages, 34 IG accounts) but thin — distribution without engagement depth</li><li>No social→revenue attribution discipline (UTM/coupon per channel) yet</li><li>Flagship UX carries catalog weight — 80k SKUs need stronger guided curation for retail buyers</li></ul></div><div class="swotq pos"><h3>Opportunities</h3><ul><li>Convert the 22,952 sample-only backlog into sellable variants — the single largest dormant-revenue pool in the business</li><li>16,055 staged drafts (2,793 fully stageable today) = months of "New Arrivals" marketing fuel</li><li>AEO/AI-answer citations for wallcovering queries — the flagship already ships an AEO block; extend it fleet-wide</li><li>Sample-order → full-roll conversion funnel instrumentation (order sync to the back office already exists)</li><li>Licensing original design IP (settlement-gated) into marketplaces as a zero-inventory revenue line</li></ul></div><div class="swotq neg"><h3>Threats</h3><ul><li>DTC-native entrants own the "approachable wallpaper" narrative with modern brand voices</li><li>Marketplace aggregators (Amazon, Wayfair, Etsy) commoditize mid-tier patterns</li><li>AI answer engines could disintermediate catalog-depth advantages if citations go to competitors</li><li>Vendor MAP / brand-control tightening limits pricing latitude on marquee lines</li></ul></div></div>
   <div class="flagbox" style="margin-top:34px"><div class="i">⚡</div><div><h3 class="disp">The one-sentence thesis</h3><p>DW's moat is <b>catalog depth + trade authority</b>; its constraint is <b>conversion infrastructure</b>. The fastest wins activate what already exists — the sample-only backlog, the staged-draft drip, the connected-but-quiet channels — before building anything new.</p></div></div>
 </div></section>
 
 <section id="empire"><div class="eyebrow">01 · The Catalog Empire</div><h2 class="disp">Not a store. A catalog empire.</h2><div class="accbody">
-  <p class="lead2">The live mirror shows <b>80,522</b> active products, <b>16,055</b> staged drafts, and <b>80,473</b> archived — a merchandising engine with more inventory in reserve than most competitors have in total. Distribution runs through the flagship plus a <b>281-site</b> microsite fleet.</p>
+  <p class="lead2">The live mirror shows <b>80,522</b> active products, <b>16,055</b> staged drafts, and <b>80,473</b> archived — a merchandising engine with more inventory in reserve than most competitors have in total. Distribution runs through the flagship plus a <b>234-site</b> microsite fleet.</p>
   <div class="chartwrap tall"><div class="ct">Top vendor lines by live products</div><canvas id="vendorChart"></canvas></div>
   <div class="chartwrap"><div class="ct">Live catalog by product type</div><canvas id="typeChart"></canvas></div>
   <table><thead><tr><th>#</th><th>Vendor line</th><th>Active products</th></tr></thead><tbody><tr><td class="mo">01</td><td><b>Phillipe Romano</b></td><td>11,270</td></tr><tr><td class="mo">02</td><td><b>Rebel Walls</b></td><td>3,770</td></tr><tr><td class="mo">03</td><td><b>Clarke And Clarke</b></td><td>3,570</td></tr><tr><td class="mo">04</td><td><b>Hollywood Wallcoverings</b></td><td>3,515</td></tr><tr><td class="mo">05</td><td><b>Malibu Wallpaper</b></td><td>3,232</td></tr><tr><td class="mo">06</td><td><b>Thibaut</b></td><td>2,987</td></tr><tr><td class="mo">07</td><td><b>Jeffrey Stevens</b></td><td>2,884</td></tr><tr><td class="mo">08</td><td><b>Brunschwig & Fils</b></td><td>2,761</td></tr><tr><td class="mo">09</td><td><b>Kravet</b></td><td>2,616</td></tr><tr><td class="mo">10</td><td><b>Phillip Jeffries</b></td><td>2,469</td></tr><tr><td class="mo">11</td><td><b>Koroseal</b></td><td>2,455</td></tr><tr><td class="mo">12</td><td><b>Gaston Y Daniela</b></td><td>2,148</td></tr><tr><td class="mo">13</td><td><b>Lee Jofa</b></td><td>2,040</td></tr><tr><td class="mo">14</td><td><b>Los Angeles Fabrics</b></td><td>1,833</td></tr></tbody></table>
   <div class="eyebrow" style="margin-top:52px">The discovery fleet</div>
-  <p class="lead2">281 microsites — material-, era-, and city-specific storefront satellites that catch long-tail search and funnel to the flagship. A sample:</p>
-  <div class="fchips"><span class="fchip">all</span><span class="fchip">japan</span><span class="fchip">kravet</span><span class="fchip">cowtan</span><span class="fchip">coastline-reserve</span><span class="fchip">cowtan-tout</span><span class="fchip">phillipe-romano-textiles</span><span class="fchip">astek</span><span class="fchip">ascreation</span><span class="fchip">wolfgordon</span><span class="fchip">pf-fabric-10110</span><span class="fchip">pierrefreyfabrics</span><span class="fchip">scalamandre</span><span class="fchip">sangetsu</span><span class="fchip">milton-king</span><span class="fchip">phillipjeffries</span><span class="fchip">rebelwalls</span><span class="fchip">jeffreystevens</span><span class="fchip">china</span><span class="fchip">quadrille</span><span class="fchip">malibu</span><span class="fchip">marburg</span><span class="fchip">hollywood</span><span class="fchip">sancar</span><span class="fchip">philliperomano</span><span class="fchip">graham-brown</span><span class="fchip">coordonn</span><span class="fchip">coordonne</span><span class="fchip">designtex</span><span class="fchip">chinaseas</span><span class="fchip">romo</span><span class="fchip">jf-fabrics</span><span class="fchip">goodrich</span><span class="fchip">eijffinger</span><span class="fchip">koroseal</span><span class="fchip">murals</span><span class="fchip">philipjeffries</span><span class="fchip">phillipe-romano-vinyls</span><span class="fchip">holly-hunt</span><span class="fchip">arte</span><span class="fchip">thibaut</span><span class="fchip">j-josephson</span><span class="fchip">omexco</span><span class="fchip">koroseal-sg</span><span class="fchip">maharam</span><span class="fchip">trestintas</span><span class="fchip">colour-design</span><span class="fchip">colouranddesign</span></div>
+  <p class="lead2">234 microsites — material-, era-, and city-specific storefront satellites that catch long-tail search and funnel to the flagship. A sample:</p>
+  <div class="fchips"><span class="fchip">all</span><span class="fchip">japan</span><span class="fchip">kravet</span><span class="fchip">cowtan</span><span class="fchip">cowtan-tout</span><span class="fchip">astek</span><span class="fchip">ascreation</span><span class="fchip">wolfgordon</span><span class="fchip">pf-fabric-10110</span><span class="fchip">pierrefreyfabrics</span><span class="fchip">scalamandre</span><span class="fchip">milton-king</span><span class="fchip">phillipjeffries</span><span class="fchip">rebelwalls</span><span class="fchip">jeffreystevens</span><span class="fchip">quadrille</span><span class="fchip">malibu</span><span class="fchip">marburg</span><span class="fchip">hollywood</span><span class="fchip">sancar</span><span class="fchip">philliperomano</span><span class="fchip">graham-brown</span><span class="fchip">coordonne</span><span class="fchip">designtex</span><span class="fchip">chinaseas</span><span class="fchip">romo</span><span class="fchip">jf-fabrics</span><span class="fchip">koroseal</span><span class="fchip">philipjeffries</span><span class="fchip">holly-hunt</span><span class="fchip">arte</span><span class="fchip">thibaut</span><span class="fchip">maharam</span><span class="fchip">trestintas</span><span class="fchip">colouranddesign</span><span class="fchip">fabricut</span><span class="fchip">designersguild</span><span class="fchip">newmor</span><span class="fchip">coleandson</span><span class="fchip">relativity-textiles</span><span class="fchip">denovowall</span><span class="fchip">elitis</span><span class="fchip">pierre-frey</span><span class="fchip">andrewmartin</span><span class="fchip">sandberg</span><span class="fchip">rwltd</span><span class="fchip">mindthegap</span><span class="fchip">markalexander</span></div>
 </div></section>
 
 <section id="integrity"><div class="eyebrow">02 · Catalog Integrity — the 5-Field Read</div><h2 class="disp">Where the catalog leaks revenue.</h2><div class="accbody">
@@ -233,10 +233,10 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
     <div class="vname">Texture</div><div class="vmodel">after Arte International</div>
     <div class="vmood">Immersive texture — full-bleed material macros, dark gallery chrome, slow motion.</div><div class="vopen">Open live concept →</div>
   </a>
-  <a class="vtile rv" href="/versions/gallery.html" target="_blank" style="--vb:#101012;--vi:#f4f2ee;--vg:#caa96a">
-    <div class="vswatch"><span style="background:#101012"></span><span style="background:#1a1a1e"></span><span style="background:#caa96a"></span><span style="background:#f4f2ee"></span></div>
+  <a class="vtile rv" href="/versions/gallery.html" target="_blank" style="--vb:#f7f5f1;--vi:#191919;--vg:#a3803c">
+    <div class="vswatch"><span style="background:#f7f5f1"></span><span style="background:#ebe7df"></span><span style="background:#a3803c"></span><span style="background:#191919"></span></div>
     <div class="vname">Gallery</div><div class="vmodel">after 1stDibs</div>
-    <div class="vmood">Marketplace-luxe — curated collections, provenance chips, designer-first navigation.</div><div class="vopen">Open live concept →</div>
+    <div class="vmood">Marketplace-luxe — white-gallery ground, curated collections, provenance chips, designer-first navigation.</div><div class="vopen">Open live concept →</div>
   </a></div>
 </div></section>
 
@@ -259,7 +259,7 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
 </div></section>
 
 <section id="desk"><div class="eyebrow">11 · Live Commerce Desk</div><h2 class="disp">The operation, on one screen.</h2><div class="accbody">
-  <p class="lead2">Live KPIs from the Jul 26, 2026, 8:13 AM snapshot — the numbers a weekly growth review should open with. Hit ↻ Refresh (top right) to re-collect on demand.</p>
+  <p class="lead2">Live KPIs from the Jul 26, 2026, 8:18 AM snapshot — the numbers a weekly growth review should open with. Hit ↻ Refresh (top right) to re-collect on demand.</p>
   <div class="kpis">
     <div class="kpi"><div class="kv">80,522</div><div class="kl">Active products</div></div>
     <div class="kpi"><div class="kv">16,055</div><div class="kl">Staged drafts</div></div>
@@ -268,7 +268,7 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
     <div class="kpi"><div class="kv">1,444</div><div class="kl">Zero-price actives</div></div>
     <div class="kpi"><div class="kv">333</div><div class="kl">Image-less actives</div></div>
     <div class="kpi"><div class="kv">174</div><div class="kl">Vendor lines live</div></div>
-    <div class="kpi"><div class="kv">281</div><div class="kl">Fleet microsites</div></div>
+    <div class="kpi"><div class="kv">234</div><div class="kl">Fleet microsites</div></div>
   </div>
   <div class="chartwrap"><div class="ct">Weekly activation cadence (same data as Section 05 — the desk's pulse line)</div><canvas id="deskChart"></canvas></div>
 </div></section>
@@ -283,13 +283,13 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
 </div></section>
 
 <section id="sources"><div class="eyebrow">13 · Sources &amp; Methodology</div><h2 class="disp">Where every number comes from.</h2><div class="accbody">
-  <p class="lead2">Snapshot collected <b>Jul 26, 2026, 8:13 AM</b> by a read-only collector. Live rows are measured; analyst rows are authored judgment; anything illustrative says so.</p>
+  <p class="lead2">Snapshot collected <b>Jul 26, 2026, 8:18 AM</b> by a read-only collector. Live rows are measured; analyst rows are authored judgment; anything illustrative says so.</p>
   <div class="srclegend"><span class="srcb r">Live snapshot</span><span class="srcb o">Observed live</span><span class="srcb a">Analyst view</span><span class="srcb d">Computed</span><span class="srcb e">Illustrative</span></div>
-  <table><thead><tr><th>Section</th><th>Where it comes from</th><th>How it's produced</th><th>Provenance</th></tr></thead><tbody><tr><td><b>Catalog KPIs — statuses, vendors, types, integrity, cadence</b></td><td>The dw_unified local mirror (READ-ONLY psql over the /tmp socket)</td><td>Collected by <code>scripts/collect-dw.mjs</code> at <b>Jul 26, 2026, 8:13 AM</b>; every number on this page renders from that snapshot</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>5-field / sample-only split</b></td><td>Mirror rollup columns (has_sample_variant, has_product_variant, has_description, image_url) + the quotes tag</td><td>Direct SQL counts; quote-only lines (by-design sample-only) separated from true backlog</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Social channel status</b></td><td>The DW marketing command center API (marketing.designerwallcoverings.com)</td><td>Authenticated status read at collection time — connected flags + account counts per platform</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Microsite fleet</b></td><td>The fleet aggregator directory API (all.designerwallcoverings.com)</td><td>281 sites enumerated at collection time</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Competitor watch-list</b></td><td>The connie_competitors table (the DW competitor-scan registry)</td><td>Rendered verbatim: domain, watch status, products found by prior scans</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Competitor paid-ads table</b></td><td>A $0 homepage pixel scan of each tracked domain (Google/Meta/TikTok/Pinterest/Bing tag signatures)</td><td>Measured at seed time by <code>scripts/seed-buckets.mjs</code>; unreachable homepages say so rather than guessing</td><td class="srccell"><span class="srcb o">Observed live</span></td></tr><tr><td><b>Competitor scoring chart + map pins</b></td><td>Analyst assessment over public sites; HQ geo compiled from public records</td><td>Authored consulting view — NOT scraped metrics; the map is oriented, not surveyed</td><td class="srccell"><span class="srcb a">Analyst view</span></td></tr><tr><td><b>Price-band chart</b></td><td>products whose minimum variant exceeds the $4.25 memo sample — the priced subset of the mirror (~3.8k); most actives resolve min-variant to the sample, and full variant-level pricing lives Shopify-side</td><td>Partial-basis chart, labeled as such — full variant pricing lives Shopify-side</td><td class="srccell"><span class="srcb d">Computed</span></td></tr><tr><td><b>Website & social audits, partners, revenue plays, roadmap</b></td><td>Analyst strategy grounded in the operating knowledge of the DW stack</td><td>Consulting recommendations — models and plays, not measurements</td><td class="srccell"><span class="srcb a">Analyst view</span></td></tr><tr><td><b>Hero & section imagery</b></td><td>Unsplash editorial stock (luxury materials, per the luxe-only imagery rule)</td><td>Hotlinked, decorative only — carries no data meaning</td><td class="srccell"><span class="srcb e">Illustrative</span></td></tr></tbody></table>
+  <table><thead><tr><th>Section</th><th>Where it comes from</th><th>How it's produced</th><th>Provenance</th></tr></thead><tbody><tr><td><b>Catalog KPIs — statuses, vendors, types, integrity, cadence</b></td><td>The dw_unified local mirror (READ-ONLY psql over the /tmp socket)</td><td>Collected by <code>scripts/collect-dw.mjs</code> at <b>Jul 26, 2026, 8:18 AM</b>; every number on this page renders from that snapshot</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>5-field / sample-only split</b></td><td>Mirror rollup columns (has_sample_variant, has_product_variant, has_description, image_url) + the quotes tag</td><td>Direct SQL counts; quote-only lines (by-design sample-only) separated from true backlog</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Social channel status</b></td><td>The DW marketing command center API (marketing.designerwallcoverings.com)</td><td>Authenticated status read at collection time — connected flags + account counts per platform</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Microsite fleet</b></td><td>The fleet aggregator directory API (all.designerwallcoverings.com)</td><td>234 sites enumerated at collection time</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Competitor watch-list</b></td><td>The connie_competitors table (the DW competitor-scan registry)</td><td>Rendered verbatim: domain, watch status, products found by prior scans</td><td class="srccell"><span class="srcb r">Live snapshot</span></td></tr><tr><td><b>Competitor paid-ads table</b></td><td>A $0 homepage pixel scan of each tracked domain (Google/Meta/TikTok/Pinterest/Bing tag signatures)</td><td>Measured at seed time by <code>scripts/seed-buckets.mjs</code>; unreachable homepages say so rather than guessing</td><td class="srccell"><span class="srcb o">Observed live</span></td></tr><tr><td><b>Competitor scoring chart + map pins</b></td><td>Analyst assessment over public sites; HQ geo compiled from public records</td><td>Authored consulting view — NOT scraped metrics; the map is oriented, not surveyed</td><td class="srccell"><span class="srcb a">Analyst view</span></td></tr><tr><td><b>Price-band chart</b></td><td>products whose minimum variant exceeds the $4.25 memo sample — the priced subset of the mirror (~3.8k); most actives resolve min-variant to the sample, and full variant-level pricing lives Shopify-side</td><td>Partial-basis chart, labeled as such — full variant pricing lives Shopify-side</td><td class="srccell"><span class="srcb d">Computed</span></td></tr><tr><td><b>Website & social audits, partners, revenue plays, roadmap</b></td><td>Analyst strategy grounded in the operating knowledge of the DW stack</td><td>Consulting recommendations — models and plays, not measurements</td><td class="srccell"><span class="srcb a">Analyst view</span></td></tr><tr><td><b>Hero & section imagery</b></td><td>Unsplash editorial stock (luxury materials, per the luxe-only imagery rule)</td><td>Hotlinked, decorative only — carries no data meaning</td><td class="srccell"><span class="srcb e">Illustrative</span></td></tr></tbody></table>
   <div class="srcnote"><div class="i">&#9881;</div><div><h4>How this document is built</h4><p>Generated, not hand-typed. A read-only collector (<code>scripts/collect-dw.mjs</code>) snapshots the DW systems into <code>data/dw-analysis.json</code>; the build (<code>build.mjs</code>) renders that snapshot into this page. The ↻ Refresh button re-runs collector + build on demand. Nothing writes to any DW production system.</p></div></div>
 </div></section>
 
-<footer><span>Designer Wallcoverings · Growth Strategy Brief</span><span>Data as of Jul 26, 2026, 8:13 AM</span><span>Confidential — for discussion</span></footer>
+<footer><span>Designer Wallcoverings · Growth Strategy Brief</span><span>Data as of Jul 26, 2026, 8:18 AM</span><span>Confidential — for discussion</span></footer>
 
 <script>
 (function(){var s=document.querySelectorAll('.hero .slide'),i=0;if(s.length<2)return;setInterval(function(){s[i].classList.remove('on');i=(i+1)%s.length;s[i].classList.add('on');},5200);})();
diff --git a/public/versions/gallery.html b/public/versions/gallery.html
index 6560937..5aee39c 100644
--- a/public/versions/gallery.html
+++ b/public/versions/gallery.html
@@ -4,11 +4,11 @@
 <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;1,400&family=Cormorant+Garamond:ital,wght@0,400;0,500;1,400&family=Inter:wght@300;400;600;800&family=Jost:wght@300;400;500&display=swap" rel="stylesheet">
 <style>
-:root{--bg:#101012;--panel:#1a1a1e;--ink:#f4f2ee;--gold:#caa96a;--line:rgba(202,169,106,.26);--cols:4}
+:root{--bg:#f7f5f1;--panel:#ebe7df;--ink:#191919;--gold:#a3803c;--line:rgba(25,25,25,.14);--cols:4}
 *{margin:0;padding:0;box-sizing:border-box}
 body{background:var(--bg);color:var(--ink);font-family:'Inter',system-ui,sans-serif;font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
 .disp{font-family:'Playfair Display',Georgia,serif}a{color:inherit;text-decoration:none}
-.badge{position:fixed;left:16px;bottom:16px;z-index:60;background:var(--gold);color:#0b0b0c;font-size:10px;letter-spacing:.2em;text-transform:uppercase;padding:7px 13px;border-radius:2px}
+.badge{position:fixed;left:16px;bottom:16px;z-index:60;background:var(--gold);color:#fff;font-size:10px;letter-spacing:.2em;text-transform:uppercase;padding:7px 13px;border-radius:2px}
 .rv{opacity:0;transform:translateY(24px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}.rv.in{opacity:1;transform:none}
 header{max-width:1240px;margin:0 auto;padding:26px 22px;display:flex;justify-content:space-between;align-items:flex-end;border-bottom:2px solid var(--gold)}
 .logo{font-family:'Playfair Display',Georgia,serif;font-size:30px;letter-spacing:-.3px}.logo span{color:var(--gold)}
@@ -21,7 +21,7 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
 .heroc h1{font-family:'Playfair Display',Georgia,serif;font-size:clamp(34px,4.6vw,58px);line-height:1.06}
 .heroc p{margin-top:16px;opacity:.75;font-size:17px;max-width:52ch}
 .cta{display:inline-block;margin-top:26px;border:1px solid var(--gold);color:var(--gold);font-size:12px;letter-spacing:.22em;text-transform:uppercase;padding:13px 26px;border-radius:999px;transition:.25s}
-.cta:hover{background:var(--gold);color:#0b0b0c}
+.cta:hover{background:var(--gold);color:#fff}
 .heroimg{aspect-ratio:4/3;border-radius:6px;background:linear-gradient(135deg,var(--panel),var(--gold))}
 .wrap{max-width:1240px;margin:0 auto;padding:0 22px}
 .sh{display:flex;align-items:center;justify-content:space-between;gap:18px;border-top:3px solid var(--gold);padding-top:12px;margin:34px 0 8px;flex-wrap:wrap}
@@ -38,7 +38,7 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
 .ns{max-width:1240px;margin:10px auto 0;padding:44px 22px;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:30px;align-items:center}
 .ns h3{font-family:'Playfair Display',Georgia,serif;font-size:26px}.ns p{opacity:.7;font-size:14px;margin-top:8px}
 .ns form{display:flex;gap:10px}.ns input[type=email]{flex:1;padding:13px;border:1px solid var(--line);background:var(--panel);color:var(--ink);border-radius:4px;font-size:14px}
-.ns button{padding:13px 22px;background:var(--gold);color:#0b0b0c;border:0;border-radius:4px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:11px;cursor:pointer}
+.ns button{padding:13px 22px;background:var(--gold);color:#fff;border:0;border-radius:4px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:11px;cursor:pointer}
 footer{border-top:1px solid var(--line);margin-top:14px}
 footer .in{max-width:1240px;margin:0 auto;padding:36px 22px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-size:12px;opacity:.65}
 @media(max-width:960px){.heroc{grid-template-columns:1fr}.ns{grid-template-columns:1fr}}
@@ -48,7 +48,7 @@ footer .in{max-width:1240px;margin:0 auto;padding:36px 22px;display:flex;justify
 <header><div class="logo">Designer <span>Wallcoverings</span><small>Gallery · The marketplace of extraordinary walls.</small></div><div style="font-size:12px;opacity:.65;text-align:right">Los Angeles · To the Trade<br>Samples $4.25 · Free shipping</div></header>
 <nav class="sec"><div class="in"><a>Wallcoverings</a><a>Fabrics</a><a>Murals</a><a>By Color</a><a>By Room</a><a>New Arrivals</a><a>Trade Program</a><a>Samples</a></div></nav>
 <div class="heroc">
-  <div class="rv"><h1 class="disp">The marketplace of extraordinary walls.</h1><p>Marketplace-luxe — curated collections, provenance chips, designer-first navigation. A curated face for the deepest designer-wallcovering catalog online — every pattern sampled for $4.25, every order backed by thirty years of trade expertise.</p><a class="cta">Explore the collection</a></div>
+  <div class="rv"><h1 class="disp">The marketplace of extraordinary walls.</h1><p>Marketplace-luxe — white-gallery ground, curated collections, provenance chips, designer-first navigation. A curated face for the deepest designer-wallcovering catalog online — every pattern sampled for $4.25, every order backed by thirty years of trade expertise.</p><a class="cta">Explore the collection</a></div>
   <div class="heroimg rv"></div>
 </div>
 <div class="wrap">
@@ -61,40 +61,40 @@ footer .in{max-width:1240px;margin:0 auto;padding:36px 22px;display:flex;justify
     </div>
   </div>
   <div class="grid" id="grid"><article class="gcard" data-title="Chinois Garden" data-hue="28" data-tier="0">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(28,22%,24%),hsl(68,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(28,22%,78%),hsl(68,30%,64%))"></div>
       <h4>Chinois Garden</h4><div class="gmeta"><span>Wallcovering</span><span class="tier">casual</span></div>
     </article><article class="gcard" data-title="Venetian Plaster" data-hue="152" data-tier="1">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(152,22%,24%),hsl(192,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(152,22%,78%),hsl(192,30%,64%))"></div>
       <h4>Venetian Plaster</h4><div class="gmeta"><span>Fabric</span><span class="tier">signature</span></div>
     </article><article class="gcard" data-title="Grasscloth No. 9" data-hue="208" data-tier="2">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(208,22%,24%),hsl(248,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(208,22%,78%),hsl(248,30%,64%))"></div>
       <h4>Grasscloth No. 9</h4><div class="gmeta"><span>Mural</span><span class="tier">reserve</span></div>
     </article><article class="gcard" data-title="Deco Fan" data-hue="12" data-tier="0">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(12,22%,24%),hsl(52,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(12,22%,78%),hsl(52,30%,64%))"></div>
       <h4>Deco Fan</h4><div class="gmeta"><span>Wallcovering</span><span class="tier">casual</span></div>
     </article><article class="gcard" data-title="Midnight Damask" data-hue="262" data-tier="1">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(262,22%,24%),hsl(302,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(262,22%,78%),hsl(302,30%,64%))"></div>
       <h4>Midnight Damask</h4><div class="gmeta"><span>Fabric</span><span class="tier">signature</span></div>
     </article><article class="gcard" data-title="Coastal Weave" data-hue="88" data-tier="2">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(88,22%,24%),hsl(128,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(88,22%,78%),hsl(128,30%,64%))"></div>
       <h4>Coastal Weave</h4><div class="gmeta"><span>Mural</span><span class="tier">reserve</span></div>
     </article><article class="gcard" data-title="Rosewood Toile" data-hue="340" data-tier="0">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(340,22%,24%),hsl(20,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(340,22%,78%),hsl(20,30%,64%))"></div>
       <h4>Rosewood Toile</h4><div class="gmeta"><span>Wallcovering</span><span class="tier">casual</span></div>
     </article><article class="gcard" data-title="Celadon Silk" data-hue="190" data-tier="1">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(190,22%,24%),hsl(230,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(190,22%,78%),hsl(230,30%,64%))"></div>
       <h4>Celadon Silk</h4><div class="gmeta"><span>Fabric</span><span class="tier">signature</span></div>
     </article><article class="gcard" data-title="Gilt Trellis" data-hue="46" data-tier="2">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(46,22%,24%),hsl(86,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(46,22%,78%),hsl(86,30%,64%))"></div>
       <h4>Gilt Trellis</h4><div class="gmeta"><span>Mural</span><span class="tier">reserve</span></div>
     </article><article class="gcard" data-title="Amethyst Moire" data-hue="300" data-tier="0">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(300,22%,24%),hsl(340,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(300,22%,78%),hsl(340,30%,64%))"></div>
       <h4>Amethyst Moire</h4><div class="gmeta"><span>Wallcovering</span><span class="tier">casual</span></div>
     </article><article class="gcard" data-title="Sage Stripe" data-hue="130" data-tier="1">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(130,22%,24%),hsl(170,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(130,22%,78%),hsl(170,30%,64%))"></div>
       <h4>Sage Stripe</h4><div class="gmeta"><span>Fabric</span><span class="tier">signature</span></div>
     </article><article class="gcard" data-title="Terra Fresco" data-hue="20" data-tier="2">
-      <div class="gimg" style="background:linear-gradient(135deg,hsl(20,22%,24%),hsl(60,30%,14%))"></div>
+      <div class="gimg" style="background:linear-gradient(135deg,hsl(20,22%,78%),hsl(60,30%,64%))"></div>
       <h4>Terra Fresco</h4><div class="gmeta"><span>Mural</span><span class="tier">reserve</span></div>
     </article></div>
 </div>
diff --git a/scripts/collect-dw.mjs b/scripts/collect-dw.mjs
index f753854..8012264 100644
--- a/scripts/collect-dw.mjs
+++ b/scripts/collect-dw.mjs
@@ -107,12 +107,12 @@ const siteList = Array.isArray(microsites) ? microsites
 // downstream surface (fleet chips, JSON export) can leak them.
 const FORBIDDEN = /schumacher|momentum|versa|wallquest|chesapeake|seabrook|nextwall|command54|greenland|rigo|tokiwa|justindavid|justin-david/i;
 const fleet = (Array.isArray(siteList) ? siteList : []).map(s => {
-  // Coerce products to a COUNT — some fleet entries carry full product arrays
-  // (titles + upstream image URLs); raw objects must never enter the snapshot.
-  const p = Array.isArray(s.products) ? s.products.length : (s.products ?? s.product_count ?? s.count ?? null);
+  // Raw product arrays (titles + upstream image URLs) must never enter the
+  // snapshot; and an array length is just the feed's page size (24), not real
+  // per-site depth — so no honest count exists here. Keep hosts only.
   return {
     host: s.host || s.subdomain || s.domain || String(s.name || ''),
-    products: typeof p === 'number' ? p : null,
+    products: null,
     ok: s.ok ?? s.reachable ?? null,
   };
 }).filter(s => s.host && !FORBIDDEN.test(s.host));

← 2c9b6e0 contrarian FIX-FIRST pass: data-layer forbidden-vendor filte  ·  back to Consulting Designerwallcoverings Com  ·  graphics+analysis pass: catalog DNA (style/color/needs-tags) d75255d →