[object Object]

← back to Model Arena

mood-board-studio: cycle-2 polish — honest export, no stale prices, dead-code purge

493c6dc0b83c52f55d7f48cfdd76d4ba989cc9d4 · 2026-07-30 16:04:54 -0700 · Steve

- Export: replaced the abstract preset-palette strip (colors that weren't on the
  board) with a REAL color-story strip sampled from the drawn product photos
  (getImageData before the vignette; canvas stays CORS-clean). Dropped the
  abstract hex color-name row for a truthful caption.
- Prices: removed the numeric price from tile labels + tooltip — the dw_unified
  mirror price column is known stale (memory dw-mirror-price-column-stale); a
  wrong price on a client export is worse than none. Name + vendor only.
- Raffia: swapped the 'Designer Wallcoverings' house-vendor entry (Madagascar
  Cloth) for Thibaut Bankun Raffia Spa Blue (real manufacturer, verified image).
- Dead code: removed 6 unused tile-factory/canvas fns + MATERIALS const + 3 dead
  export branches (~5.8KB). Set willReadFrequently on export ctx (0 warnings).

Verified: 0 price labels, real vendors, export clean (untainted, 3.4MB), 0 console errors/warnings.

Files touched

Diff

commit 493c6dc0b83c52f55d7f48cfdd76d4ba989cc9d4
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 30 16:04:54 2026 -0700

    mood-board-studio: cycle-2 polish — honest export, no stale prices, dead-code purge
    
    - Export: replaced the abstract preset-palette strip (colors that weren't on the
      board) with a REAL color-story strip sampled from the drawn product photos
      (getImageData before the vignette; canvas stays CORS-clean). Dropped the
      abstract hex color-name row for a truthful caption.
    - Prices: removed the numeric price from tile labels + tooltip — the dw_unified
      mirror price column is known stale (memory dw-mirror-price-column-stale); a
      wrong price on a client export is worse than none. Name + vendor only.
    - Raffia: swapped the 'Designer Wallcoverings' house-vendor entry (Madagascar
      Cloth) for Thibaut Bankun Raffia Spa Blue (real manufacturer, verified image).
    - Dead code: removed 6 unused tile-factory/canvas fns + MATERIALS const + 3 dead
      export branches (~5.8KB). Set willReadFrequently on export ctx (0 warnings).
    
    Verified: 0 price labels, real vendors, export clean (untainted, 3.4MB), 0 console errors/warnings.
---
 public/games/dw-mood-board-studio.html | 239 +++++++--------------------------
 1 file changed, 45 insertions(+), 194 deletions(-)

diff --git a/public/games/dw-mood-board-studio.html b/public/games/dw-mood-board-studio.html
index 65e1d38..993ce61 100644
--- a/public/games/dw-mood-board-studio.html
+++ b/public/games/dw-mood-board-studio.html
@@ -907,7 +907,7 @@ header {
    real cdn.shopify.com photos). Keyed by material type; each product:
    { name, vendor, sku, handle, img, price }
    ============================================================ */
-const PRODUCTS = {"chinoiserie":[{"name":"Jardin Fleuri - Ivory Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102285","handle":"dwkk-102285","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_192_950782b7-bc9c-4b7a-a0a9-49fae23ee1a0.jpg?v=1725922617","price":1567},{"name":"La Pagode - Teal By Brunschwig & Fils | Les Ensembliers Wallcoverings | Chinoiserie Wallcovering Embroidery","vendor":"Brunschwig & Fils","sku":"DWKK-102331","handle":"dwkk-102331","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8020108_35_f3afd4ba-dbe6-4ac9-a195-b930f188a780.jpg?v=1725922727","price":393},{"name":"Tongli - Fern Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102274","handle":"dwkk-102274","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_33_a7361bcf-88e8-40df-b0fa-23c228b55301.jpg?v=1725922594","price":1394},{"name":"Ming Dragon Print - Claret Multi By Brunschwig & Fils | Summer Palace |Chinoiserie Novelty Multipurpose Print","vendor":"Brunschwig & Fils","sku":"DWKK-100756","handle":"dwkk-gc1f32da2","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8019140_195_1fb0f24d-239b-41e5-a453-692799b39101.jpg?v=1725919361","price":298},{"name":"Jardin Fleuri - Delft Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102282","handle":"dwkk-102282","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_153_b7b10748-93ce-4c18-9649-24aa6370d0cc.jpg?v=1725922610","price":1567},{"name":"Ming Dragon - Indigo Multi By Brunschwig & Fils | Summer Palace Wallcoverings | Chinoiserie Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102269","handle":"dwkk-102269","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019113_50_c18abe3c-8f2d-4eda-9618-afb98f493602.jpg?v=1725922585","price":605},{"name":"Tongli - Lagoon Turquoise By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102272","handle":"dwkk-102272","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_133_9415dc52-c6cd-4caf-8098-030e271046f5.jpg?v=1725922590","price":1394},{"name":"Jardin Fleuri - Opal Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102283","handle":"dwkk-102283","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_157_3d36ee49-50bf-4eb9-9487-f3ad353c0648.jpg?v=1725922612","price":1567}],"damask":[{"name":"Lido Paper - Mist Turquoise By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139824","handle":"dwkk-g3debcaad","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_123_ed9eb126-b3a9-4eb9-b8d6-cb30c87ba09f.jpg?v=1753291200","price":613},{"name":"Lido Paper - Sky Blue By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139826","handle":"dwkk-g6d5d7dd3","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_5_ee195d96-83ec-42cd-8d7b-1fac955bba72.jpg?v=1753291195","price":613},{"name":"Lido Paper - Petal Pink By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139827","handle":"dwkk-gc00f95a0","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_7_69da694e-811e-404f-bf77-7ee042dcfe90.jpg?v=1753291193","price":613},{"name":"Lido Paper - Fog Grey By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139823","handle":"dwkk-gf4b29cec","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_11_a8350620-d0f1-4139-9d1b-7cbe4af4c42e.jpg?v=1753291202","price":613},{"name":"Lido Paper - Leaf Green By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139825","handle":"dwkk-g6d4685ef","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_3_67c4052d-2912-4eac-b0ae-3247d5c50cc5.jpg?v=1753291197","price":613},{"name":"Balmuccia Damask Soft Green Wallcovering","vendor":"Anna French","sku":"DWTT-80288","handle":"dwtt-80288-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Bristol-BalmucciaDamaskWP-softgreen-EnsburyFernFAB-green-detail.jpg?v=1770340093","price":4},{"name":"Canal Damask Durable Vinyl | Hollywood Wallcoverings","vendor":"Hollywood Wallcoverings","sku":"XWA-52078","handle":"canal-damask-durable-vinyl-xwa-52078","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwa-52078-sample-canal-damask-durable-vinyl-hollywood-wallcoverings.jpg?v=1775707053","price":4},{"name":"Damasco Damask Stripe Crocus | Designers Guild Europe","vendor":"Designers Guild","sku":"EUR-70081","handle":"eur-70081-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/47451_5cf553c7-3554-4629-b8e5-3132c3c2f066.webp?v=1782461907","price":null}],"grasscloth":[{"name":"Grasscloth Slubs Natura | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1811","handle":"grasscloth-slubs-natura-grs-1811","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a731e8e333ad16ef3b05543b830e00de_7ec623bc-ba2d-44dd-8884-176af8ed4f39.jpg?v=1745460826","price":23},{"name":"Hula - Black Black By Lee Jofa Modern | Hunt Slonem Ii | Modern Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139617","handle":"dwkk-139617","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3713_84_e688a483-e43f-4d03-b8a3-d9a6741c8a75.jpg?v=1753291483","price":444},{"name":"Diamond Grasscloth Tribal | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1804","handle":"diamond-grasscloth-tribal-grs-1804","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9014b0c5b6e28bcffc717479cca2f5e0.jpg?v=1745460833","price":23},{"name":"Plantation Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1806","handle":"plantation-grasscloth-grs-1806","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/plantation-grasscloth-grs-1806-cropped.jpg?v=1774341392","price":23},{"name":"Pali Basketweave Paperweave Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRA-39052","handle":"pali-basketweave-paperweave-grasscloth-gra-39052","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/da6ddb3316744cc200ef1ea31be33850.jpg?v=1745459005","price":5},{"name":"Hank's Horizontal Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-38023","handle":"hank-s-horizontal-grasscloth-wall-paper-grs-38023","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grs-1495926177904-cropped_5f436f24-2e50-4830-ac9a-898a00c493f6.jpg?v=1774344984","price":4},{"name":"Nantucket Grasscloth Warm Cool Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWLA-50091","handle":"nantucket-grasscloth-warm-cool-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/88a720c068d2b31c60cfe77582123886.jpg?v=1784232024","price":null},{"name":"Roma Sisal Grasscloth Horizontal Weave Light Brown | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRT-38309","handle":"roma-tight-woven-grasscloth-grt-38309","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f4f84be58dc46b61384a5065ac13eb4f.jpg?v=1745459404","price":4}],"linen":[{"name":"Camellia Garden - Navy and Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65014","handle":"camellia-garden-navy-and-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24553_c53cd2fa-1662-4475-83c7-95b4bfa6e5e9.jpg?v=1773967647","price":157},{"name":"Annette - Metallic Silver on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65598","handle":"annette-metallic-silver-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34111.jpg?v=1773963751","price":118},{"name":"Dahlia - Navy on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65019","handle":"dahlia-navy-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24540.jpg?v=1773967664","price":208},{"name":"Carmel-Misty Blue Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"LINN-500060","handle":"carmel-misty-blue-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/61e4c00a6dee9dc19b41d15900f6ca45.jpg?v=1783879027","price":null},{"name":"Rehoboth-Plain Linen Patterns Hemp Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"HEMP-500500","handle":"rehoboth-plain-linen-patterns-hemp-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/f59b5045838f468cf1ca2c6cb0ec64ed.jpg?v=1783879715","price":null},{"name":"Belgian Linen Wallcovering - Steel Blue Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31401","handle":"dwk-31401-koroseal-arte-type-2-vinyls-67130-belgian-linen","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67130_45d13979-c715-4239-bb8c-2d79fc2d701f.jpg?v=1751962288","price":null},{"name":"Athens Katari Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWPP-207945","handle":"athens-katari-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3501KT.jpg?v=1785089900","price":null},{"name":"Summer Wall - Linen wallcovering | Donghia","vendor":"Donghia","sku":"DWDH-188069","handle":"summer-wall-linen-wallcovering-donghia","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DG-09700_018.jpg?v=1772818831","price":null}],"raffia":[{"name":"Fine Raffia - Natural Beige By Lee Jofa Modern | Elements Ii Naturals |Solid Texture Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139575","handle":"dwkk-g328a6d2a","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3415_16_ae628f14-0e94-479b-bfd8-a11a13484a57.jpg?v=1753291589","price":138},{"name":"Cabo Raffia Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80391","handle":"dwtt-80391-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T41160_d90c5f1b-3086-4237-851f-332ec133f1c8.jpg?v=1781202567","price":196},{"name":"Bethany Raffia Off White - Off White Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80363","handle":"dwtt-80363-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T19602_05477fe1-50d1-4fa8-b5ec-f23c50e31727.jpg?v=1781202597","price":379},{"name":"Sea Bright Plain Paper Weave Raffia Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"PWV-500950","handle":"sea-bright-plain-paper-weave-raffia-paper-weave-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/baf2884af6422e26083a1b2f6e07e3cd.jpg?v=1783880263","price":null},{"name":"Raffia Decor - Smoke | Scalamandre","vendor":"Scalamandre Wallpaper","sku":"DWA-88550","handle":"wtt661468","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WTT661468.jpg?v=1745346442","price":null},{"name":"Bankun Raffia Antique - Antique Natural Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-72328","handle":"dwtt-72328-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T6817_89424133-37e8-4acd-9f01-2b49bbf46f15.jpg?v=1781202941","price":4},{"name":"Madagascar Cloth 3 Raffia","vendor":"Designer Wallcoverings","sku":"DWC-278566","handle":"dwc-278566-designerwallcoverings-com","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWC-278566-DesignerWallcoverings-Los-Angeles-1_a3bede8c-b94d-477d-b0c2-97ad23dba752.png?v=1741881338","price":null},{"name":"Taiki Paper Weave Raffia | Phillipe Romano","vendor":"Phillipe Romano","sku":"XQA-33723","handle":"taiki-paper-weave-raffia-xqa-33723","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/69007e51570bb9c98f02694ac9a82280_13600e9f-b3b4-4f31-9801-14c9e2a4965a.jpg?v=1745457371","price":4}],"silk":[{"name":"Watered Silk, Platinum Grey Wallcoverings | Zoffany","vendor":"Zoffany","sku":"DWZF-187032","handle":"watered-silk-platinum-grey-dwzf-187032","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZRHW312915_d9df_1d698e8d-35e1-44ae-893d-bcdfa5caff5c.jpg?v=1782315651","price":null},{"name":"Seijun - Wheat By Brunschwig & Fils | |Solid Texture Wallcovering Silk","vendor":"Brunschwig & Fils","sku":"DWKK-102232","handle":"dwkk-102232","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8015147_614_c235fc43-02e2-4b31-a124-a591b9091b29.jpg?v=1725922499","price":null},{"name":"Ipswich-Snow Silk Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"SILK-500850","handle":"ipswich-snow-silk-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/034c378753fce9d5ca67c42f155319c8.jpg?v=1783879517","price":null},{"name":"Manchester Silk-Black Ink Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969464","handle":"xxp-969464-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LK-08_1fbbb96d-63c4-48f9-a745-e4085ad058a8.jpg?v=1733890863","price":null},{"name":"Milford Silk-Dusk Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969682","handle":"xxp-969682-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-SL-03_730e8632-1d44-4317-b0f5-79497ea74c9c.jpg?v=1733890246","price":null},{"name":"Portsmouth Silk-Palladium Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969547","handle":"xxp-969547-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LX-05_fdec728e-7f70-4452-beca-8066a1c731fc.jpg?v=1733890636","price":null},{"name":"Silkx Wallcovering - Light Gray Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31451","handle":"dwk-31451-koroseal-arte-type-2-vinyls-67009-silkx","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67009_1fe3b816-0112-4df5-a70a-968ceab7545b.jpg?v=1751962467","price":null},{"name":"Silken One Palatial - Beige Commercial Wallcovering | Koroseal","vendor":"Koroseal","sku":"DWK-31563","handle":"dwk-31563-koroseal-roger-thomas-s522-10-silken-one-costly","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SILKEN_ONE-PALATIAL_S522-10_f3e44120-9a03-4bf0-9b08-899d74d13262.jpg?v=1751949423","price":null}]};
+const PRODUCTS = {"chinoiserie":[{"name":"Jardin Fleuri - Ivory Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102285","handle":"dwkk-102285","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_192_950782b7-bc9c-4b7a-a0a9-49fae23ee1a0.jpg?v=1725922617","price":1567},{"name":"La Pagode - Teal By Brunschwig & Fils | Les Ensembliers Wallcoverings | Chinoiserie Wallcovering Embroidery","vendor":"Brunschwig & Fils","sku":"DWKK-102331","handle":"dwkk-102331","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8020108_35_f3afd4ba-dbe6-4ac9-a195-b930f188a780.jpg?v=1725922727","price":393},{"name":"Tongli - Fern Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102274","handle":"dwkk-102274","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_33_a7361bcf-88e8-40df-b0fa-23c228b55301.jpg?v=1725922594","price":1394},{"name":"Ming Dragon Print - Claret Multi By Brunschwig & Fils | Summer Palace |Chinoiserie Novelty Multipurpose Print","vendor":"Brunschwig & Fils","sku":"DWKK-100756","handle":"dwkk-gc1f32da2","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8019140_195_1fb0f24d-239b-41e5-a453-692799b39101.jpg?v=1725919361","price":298},{"name":"Jardin Fleuri - Delft Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102282","handle":"dwkk-102282","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_153_b7b10748-93ce-4c18-9649-24aa6370d0cc.jpg?v=1725922610","price":1567},{"name":"Ming Dragon - Indigo Multi By Brunschwig & Fils | Summer Palace Wallcoverings | Chinoiserie Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102269","handle":"dwkk-102269","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019113_50_c18abe3c-8f2d-4eda-9618-afb98f493602.jpg?v=1725922585","price":605},{"name":"Tongli - Lagoon Turquoise By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102272","handle":"dwkk-102272","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_133_9415dc52-c6cd-4caf-8098-030e271046f5.jpg?v=1725922590","price":1394},{"name":"Jardin Fleuri - Opal Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102283","handle":"dwkk-102283","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_157_3d36ee49-50bf-4eb9-9487-f3ad353c0648.jpg?v=1725922612","price":1567}],"damask":[{"name":"Lido Paper - Mist Turquoise By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139824","handle":"dwkk-g3debcaad","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_123_ed9eb126-b3a9-4eb9-b8d6-cb30c87ba09f.jpg?v=1753291200","price":613},{"name":"Lido Paper - Sky Blue By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139826","handle":"dwkk-g6d5d7dd3","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_5_ee195d96-83ec-42cd-8d7b-1fac955bba72.jpg?v=1753291195","price":613},{"name":"Lido Paper - Petal Pink By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139827","handle":"dwkk-gc00f95a0","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_7_69da694e-811e-404f-bf77-7ee042dcfe90.jpg?v=1753291193","price":613},{"name":"Lido Paper - Fog Grey By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139823","handle":"dwkk-gf4b29cec","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_11_a8350620-d0f1-4139-9d1b-7cbe4af4c42e.jpg?v=1753291202","price":613},{"name":"Lido Paper - Leaf Green By Lee Jofa | Westport |Damask  Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139825","handle":"dwkk-g6d4685ef","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_3_67c4052d-2912-4eac-b0ae-3247d5c50cc5.jpg?v=1753291197","price":613},{"name":"Balmuccia Damask Soft Green Wallcovering","vendor":"Anna French","sku":"DWTT-80288","handle":"dwtt-80288-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Bristol-BalmucciaDamaskWP-softgreen-EnsburyFernFAB-green-detail.jpg?v=1770340093","price":4},{"name":"Canal Damask Durable Vinyl | Hollywood Wallcoverings","vendor":"Hollywood Wallcoverings","sku":"XWA-52078","handle":"canal-damask-durable-vinyl-xwa-52078","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwa-52078-sample-canal-damask-durable-vinyl-hollywood-wallcoverings.jpg?v=1775707053","price":4},{"name":"Damasco Damask Stripe Crocus | Designers Guild Europe","vendor":"Designers Guild","sku":"EUR-70081","handle":"eur-70081-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/47451_5cf553c7-3554-4629-b8e5-3132c3c2f066.webp?v=1782461907","price":null}],"grasscloth":[{"name":"Grasscloth Slubs Natura | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1811","handle":"grasscloth-slubs-natura-grs-1811","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a731e8e333ad16ef3b05543b830e00de_7ec623bc-ba2d-44dd-8884-176af8ed4f39.jpg?v=1745460826","price":23},{"name":"Hula - Black Black By Lee Jofa Modern | Hunt Slonem Ii | Modern Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139617","handle":"dwkk-139617","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3713_84_e688a483-e43f-4d03-b8a3-d9a6741c8a75.jpg?v=1753291483","price":444},{"name":"Diamond Grasscloth Tribal | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1804","handle":"diamond-grasscloth-tribal-grs-1804","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9014b0c5b6e28bcffc717479cca2f5e0.jpg?v=1745460833","price":23},{"name":"Plantation Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1806","handle":"plantation-grasscloth-grs-1806","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/plantation-grasscloth-grs-1806-cropped.jpg?v=1774341392","price":23},{"name":"Pali Basketweave Paperweave Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRA-39052","handle":"pali-basketweave-paperweave-grasscloth-gra-39052","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/da6ddb3316744cc200ef1ea31be33850.jpg?v=1745459005","price":5},{"name":"Hank's Horizontal Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-38023","handle":"hank-s-horizontal-grasscloth-wall-paper-grs-38023","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grs-1495926177904-cropped_5f436f24-2e50-4830-ac9a-898a00c493f6.jpg?v=1774344984","price":4},{"name":"Nantucket Grasscloth Warm Cool Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWLA-50091","handle":"nantucket-grasscloth-warm-cool-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/88a720c068d2b31c60cfe77582123886.jpg?v=1784232024","price":null},{"name":"Roma Sisal Grasscloth Horizontal Weave Light Brown | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRT-38309","handle":"roma-tight-woven-grasscloth-grt-38309","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f4f84be58dc46b61384a5065ac13eb4f.jpg?v=1745459404","price":4}],"linen":[{"name":"Camellia Garden - Navy and Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65014","handle":"camellia-garden-navy-and-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24553_c53cd2fa-1662-4475-83c7-95b4bfa6e5e9.jpg?v=1773967647","price":157},{"name":"Annette - Metallic Silver on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65598","handle":"annette-metallic-silver-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34111.jpg?v=1773963751","price":118},{"name":"Dahlia - Navy on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65019","handle":"dahlia-navy-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24540.jpg?v=1773967664","price":208},{"name":"Carmel-Misty Blue Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"LINN-500060","handle":"carmel-misty-blue-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/61e4c00a6dee9dc19b41d15900f6ca45.jpg?v=1783879027","price":null},{"name":"Rehoboth-Plain Linen Patterns Hemp Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"HEMP-500500","handle":"rehoboth-plain-linen-patterns-hemp-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/f59b5045838f468cf1ca2c6cb0ec64ed.jpg?v=1783879715","price":null},{"name":"Belgian Linen Wallcovering - Steel Blue Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31401","handle":"dwk-31401-koroseal-arte-type-2-vinyls-67130-belgian-linen","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67130_45d13979-c715-4239-bb8c-2d79fc2d701f.jpg?v=1751962288","price":null},{"name":"Athens Katari Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWPP-207945","handle":"athens-katari-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3501KT.jpg?v=1785089900","price":null},{"name":"Summer Wall - Linen wallcovering | Donghia","vendor":"Donghia","sku":"DWDH-188069","handle":"summer-wall-linen-wallcovering-donghia","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DG-09700_018.jpg?v=1772818831","price":null}],"raffia":[{"name":"Fine Raffia - Natural Beige By Lee Jofa Modern | Elements Ii Naturals |Solid Texture Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139575","handle":"dwkk-g328a6d2a","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3415_16_ae628f14-0e94-479b-bfd8-a11a13484a57.jpg?v=1753291589","price":138},{"name":"Cabo Raffia Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80391","handle":"dwtt-80391-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T41160_d90c5f1b-3086-4237-851f-332ec133f1c8.jpg?v=1781202567","price":196},{"name":"Bethany Raffia Off White - Off White Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80363","handle":"dwtt-80363-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T19602_05477fe1-50d1-4fa8-b5ec-f23c50e31727.jpg?v=1781202597","price":379},{"name":"Sea Bright Plain Paper Weave Raffia Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"PWV-500950","handle":"sea-bright-plain-paper-weave-raffia-paper-weave-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/baf2884af6422e26083a1b2f6e07e3cd.jpg?v=1783880263","price":null},{"name":"Raffia Decor - Smoke | Scalamandre","vendor":"Scalamandre Wallpaper","sku":"DWA-88550","handle":"wtt661468","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WTT661468.jpg?v=1745346442","price":null},{"name":"Bankun Raffia Antique - Antique Natural Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-72328","handle":"dwtt-72328-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T6817_89424133-37e8-4acd-9f01-2b49bbf46f15.jpg?v=1781202941","price":4},{"name":"Bankun Raffia, Spa Blue Wallcoverings | Thibaut","vendor":"Thibaut","sku":"DWTT-73839","handle":"bankun-raffia-spa-blue-dwtt-73839","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T14519.jpg?v=1783471222","price":null},{"name":"Taiki Paper Weave Raffia | Phillipe Romano","vendor":"Phillipe Romano","sku":"XQA-33723","handle":"taiki-paper-weave-raffia-xqa-33723","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/69007e51570bb9c98f02694ac9a82280_13600e9f-b3b4-4f31-9801-14c9e2a4965a.jpg?v=1745457371","price":4}],"silk":[{"name":"Watered Silk, Platinum Grey Wallcoverings | Zoffany","vendor":"Zoffany","sku":"DWZF-187032","handle":"watered-silk-platinum-grey-dwzf-187032","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZRHW312915_d9df_1d698e8d-35e1-44ae-893d-bcdfa5caff5c.jpg?v=1782315651","price":null},{"name":"Seijun - Wheat By Brunschwig & Fils | |Solid Texture Wallcovering Silk","vendor":"Brunschwig & Fils","sku":"DWKK-102232","handle":"dwkk-102232","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8015147_614_c235fc43-02e2-4b31-a124-a591b9091b29.jpg?v=1725922499","price":null},{"name":"Ipswich-Snow Silk Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"SILK-500850","handle":"ipswich-snow-silk-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/034c378753fce9d5ca67c42f155319c8.jpg?v=1783879517","price":null},{"name":"Manchester Silk-Black Ink Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969464","handle":"xxp-969464-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LK-08_1fbbb96d-63c4-48f9-a745-e4085ad058a8.jpg?v=1733890863","price":null},{"name":"Milford Silk-Dusk Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969682","handle":"xxp-969682-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-SL-03_730e8632-1d44-4317-b0f5-79497ea74c9c.jpg?v=1733890246","price":null},{"name":"Portsmouth Silk-Palladium Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969547","handle":"xxp-969547-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LX-05_fdec728e-7f70-4452-beca-8066a1c731fc.jpg?v=1733890636","price":null},{"name":"Silkx Wallcovering - Light Gray Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31451","handle":"dwk-31451-koroseal-arte-type-2-vinyls-67009-silkx","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67009_1fe3b816-0112-4df5-a70a-968ceab7545b.jpg?v=1751962467","price":null},{"name":"Silken One Palatial - Beige Commercial Wallcovering | Koroseal","vendor":"Koroseal","sku":"DWK-31563","handle":"dwk-31563-koroseal-roger-thomas-s522-10-silken-one-costly","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SILKEN_ONE-PALATIAL_S522-10_f3e44120-9a03-4bf0-9b08-899d74d13262.jpg?v=1751949423","price":null}]};
 
 /* Rotating picker — each spawn surfaces the next real product for its material,
    so switching / reshuffling presets keeps revealing different live SKUs. */
@@ -1213,30 +1213,6 @@ function buildSwatchSVG(type, palette) {
 /* ============================================================
    MATERIAL CHIP CONFIGS
    ============================================================ */
-const MATERIALS = [
-  {
-    name: 'Brass',
-    bg: 'linear-gradient(135deg,#d4b44a 0%,#c9a961 45%,#e0c870 100%)',
-    color: '#3a2e10',
-    iconBg: 'rgba(201,169,97,0.3)',
-    icon: `<svg width="16" height="16" viewBox="0 0 16 16"><circle cx="8" cy="8" r="5" stroke="#7a5a20" stroke-width="1.2" fill="none"/><circle cx="8" cy="8" r="2" fill="#c9a961"/></svg>`
-  },
-  {
-    name: 'Marble',
-    bg: 'linear-gradient(135deg,#f0eee8 0%,#e8e4dc 40%,#f4f2ea 100%)',
-    color: '#2a2824',
-    iconBg: 'rgba(100,90,80,0.15)',
-    icon: `<svg width="16" height="16" viewBox="0 0 16 16"><ellipse cx="8" cy="8" rx="6" ry="5" stroke="#aaa" stroke-width="0.8" fill="none"/><path d="M4 6 C6 8 7 10 10 10" stroke="#bbb" stroke-width="0.7" fill="none"/><path d="M6 4 C8 6 9 8 12 9" stroke="#ccc" stroke-width="0.5" fill="none"/></svg>`
-  },
-  {
-    name: 'White Oak',
-    bg: 'linear-gradient(135deg,#d8c8a4 0%,#c4b48e 50%,#d0c09a 100%)',
-    color: '#3c2e14',
-    iconBg: 'rgba(100,80,40,0.2)',
-    icon: `<svg width="16" height="16" viewBox="0 0 16 16"><rect x="3" y="2" width="10" height="12" rx="1" stroke="#8a6a30" stroke-width="0.8" fill="none"/><line x1="3" y1="5" x2="13" y2="5" stroke="#a08040" stroke-width="0.5"/><line x1="3" y1="8" x2="13" y2="8" stroke="#a08040" stroke-width="0.5"/><line x1="3" y1="11" x2="13" y2="11" stroke="#a08040" stroke-width="0.5"/></svg>`
-  },
-];
-
 /* ============================================================
    LAYOUT COMPOSER — determines tile positions
    ============================================================ */
@@ -1343,15 +1319,17 @@ function createSwatchTile(type, palette, x, y, z, id) {
   el.dataset.material = type;
   el.dataset.product  = JSON.stringify(prod);
   const short    = productShortName(prod.name);
-  const priceStr = (typeof prod.price === 'number' && prod.price > 0) ? ' · $' + prod.price : '';
   const esc = s => String(s || '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
-  el.title = `${prod.name}  —  ${prod.vendor}${prod.sku ? '  ·  ' + prod.sku : ''}${priceStr}\n(double-click to open on designerwallcoverings.com)`;
+  // Price intentionally NOT shown: the dw_unified mirror price column is known to
+  // be stale/wrong (memory dw-mirror-price-column-stale) — a wrong number on a
+  // client-facing export is worse than none. Name + vendor only; SKU in tooltip.
+  el.title = `${prod.name}  —  ${prod.vendor}${prod.sku ? '  ·  ' + prod.sku : ''}\n(double-click to open on designerwallcoverings.com)`;
 
   el.innerHTML =
     `<img class="swatch-img" crossorigin="anonymous" loading="lazy" alt="${esc(short)}" src="${esc(prod.img)}">` +
     `<div class="tile-label">` +
       `<span class="tl-name">${esc(short)}</span>` +
-      `<span class="tl-vendor">${esc(prod.vendor)}${esc(priceStr)}</span>` +
+      `<span class="tl-vendor">${esc(prod.vendor)}</span>` +
     `</div>`;
 
   // Degrade gracefully to the procedural texture if a photo ever fails to load
@@ -1365,56 +1343,6 @@ function createSwatchTile(type, palette, x, y, z, id) {
 
   return el;
 }
-
-function createColorChip(colorData, x, y, z, id) {
-  const el = document.createElement('div');
-  el.className = 'tile color-chip';
-  el.dataset.id = id;
-  el.style.left = x + 'px';
-  el.style.top  = y + 'px';
-  el.style.zIndex = z;
-  el.innerHTML = `
-    <div class="chip-swatch" style="background:${colorData.hex};"></div>
-    <div class="chip-info">
-      <div class="chip-name">${colorData.name}</div>
-      <div class="chip-hex">${colorData.hex}</div>
-    </div>
-  `;
-  return el;
-}
-
-function createTypeTile(palette, x, y, z, id) {
-  const el = document.createElement('div');
-  el.className = 'tile type-tile';
-  el.dataset.id = id;
-  el.style.left = x + 'px';
-  el.style.top  = y + 'px';
-  el.style.zIndex = z;
-  el.style.borderLeftColor = palette[2]?.hex || '#c9a961';
-  el.innerHTML = `
-    <div class="type-tile-serif">Living Room</div>
-    <div class="type-tile-sans" style="font-weight:700;letter-spacing:.08em;font-size:8.5px;text-transform:uppercase;color:${palette[2]?.hex||'#c9a961'};margin-bottom:2px;">Cormorant Garamond + Helvetica</div>
-    <div class="type-tile-sans">Wallcovering specification<br>reference for client presentation.</div>
-    <div class="type-tile-label">Type Pairing</div>
-  `;
-  return el;
-}
-
-function createMaterialChip(mat, x, y, z, id) {
-  const el = document.createElement('div');
-  el.className = 'tile material-chip';
-  el.dataset.id = id;
-  el.style.left = x + 'px';
-  el.style.top  = y + 'px';
-  el.style.zIndex = z;
-  el.style.background = mat.bg;
-  el.innerHTML = `
-    <div class="mat-icon" style="background:${mat.iconBg};">${mat.icon}</div>
-    <div class="mat-label" style="color:${mat.color};">${mat.name}</div>
-  `;
-  return el;
-}
-
 /* ============================================================
    BOARD POPULATION
    ============================================================ */
@@ -1735,7 +1663,7 @@ async function openExport() {
   await new Promise(r => setTimeout(r, 50));
 
   const exportCanvas = document.getElementById('exportCanvas');
-  const ctx   = exportCanvas.getContext('2d');
+  const ctx   = exportCanvas.getContext('2d', { willReadFrequently: true });
   const W     = 1080;
   const H     = 1350;
   const data  = PRESETS[currentPreset];
@@ -1781,30 +1709,35 @@ async function openExport() {
   // --- Render each tile as a colored block with label ---
   const sortedTiles = [...tiles].sort((a, b) => (a.z || 0) - (b.z || 0));
 
+  // Board is real-products-only, so every tile is a swatch tile.
   for (const t of sortedTiles) {
-    const el  = t.el;
-    const ex  = (t.x * scaleX);
-    const ey  = (t.y * scaleY);
-
-    if (el.classList.contains('swatch-tile')) {
-      const sw = 160 * scaleX;
-      const sh = 160 * scaleY;
-      drawSwatchOnCanvas(ctx, t, ex, ey, sw, sh, data.palette);
-    } else if (el.classList.contains('color-chip')) {
-      const cw = 80 * scaleX;
-      const ch = 110 * scaleY;
-      drawChipOnCanvas(ctx, el, ex, ey, cw, ch);
-    } else if (el.classList.contains('type-tile')) {
-      const tw = 220 * scaleX;
-      const th = 130 * scaleY;
-      drawTypeOnCanvas(ctx, ex, ey, tw, th, data.palette);
-    } else if (el.classList.contains('material-chip')) {
-      const mw = 100 * scaleX;
-      const mh = 56 * scaleY;
-      drawMaterialOnCanvas(ctx, el, ex, ey, mw, mh);
-    }
+    if (!t.el.classList.contains('swatch-tile')) continue;
+    drawSwatchOnCanvas(ctx, t, t.x * scaleX, t.y * scaleY, 160 * scaleX, 160 * scaleY, data.palette);
   }
 
+  // --- Color story: sample average colors from the REAL product photos now,
+  //     BEFORE the vignette/bar darken the canvas. Truthful "real products only"
+  //     palette (replaces the old abstract preset-palette strip). ---
+  const _storyColors = (() => {
+    const st = sortedTiles.filter(t => t.el.classList.contains('swatch-tile'));
+    const out = [];
+    const step = Math.max(1, Math.floor(st.length / 6));
+    for (let i = 0; i < st.length && out.length < 6; i += step) {
+      const t = st[i];
+      const cx = Math.round(t.x * scaleX + 80 * scaleX);
+      const cy = Math.round(t.y * scaleY + 80 * scaleY);
+      try {
+        const px = Math.min(W - 16, Math.max(16, cx)) - 8;
+        const py = Math.min(H - 16, Math.max(16, cy)) - 8;
+        const d = ctx.getImageData(px, py, 16, 16).data;
+        let R = 0, G = 0, B = 0, n = 0;
+        for (let k = 0; k < d.length; k += 4) { R += d[k]; G += d[k+1]; B += d[k+2]; n++; }
+        out.push(`rgb(${Math.round(R/n)},${Math.round(G/n)},${Math.round(B/n)})`);
+      } catch (e) { out.push('#7a6a4a'); }
+    }
+    return out;
+  })();
+
   // --- Vignette ---
   const vig = ctx.createRadialGradient(W/2, H/2, H*0.35, W/2, H/2, H*0.75);
   vig.addColorStop(0, 'rgba(0,0,0,0)');
@@ -1822,30 +1755,25 @@ async function openExport() {
   ctx.fillStyle = barGrad;
   ctx.fillRect(0, barY - 40, W, barH + 40);
 
-  // --- Color palette strip ---
+  // --- Color-story strip: real colors sampled from the actual wallcoverings ---
   const stripY  = H - 108;
   const stripH  = 10;
   const stripW  = W - 120;
   const stripX  = 60;
-  const colW    = stripW / data.palette.length;
-  data.palette.forEach((c, i) => {
-    ctx.fillStyle = c.hex;
+  const storyColors = _storyColors.length ? _storyColors : ['#7a6a4a'];
+  const colW    = stripW / storyColors.length;
+  storyColors.forEach((c, i) => {
+    ctx.fillStyle = c;
     ctx.fillRect(stripX + i * colW, stripY, colW, stripH);
   });
 
-  // Palette names
-  ctx.font = `500 ${Math.round(18)}px -apple-system,Helvetica,Arial,sans-serif`;
-  ctx.fillStyle = 'rgba(201,169,97,0.65)';
-  ctx.textAlign = 'left';
-  data.palette.forEach((c, i) => {
-    const cx = stripX + i * colW + colW/2;
-    ctx.save();
-    ctx.font = `500 16px -apple-system,Helvetica,Arial,sans-serif`;
-    ctx.fillStyle = 'rgba(232,227,218,0.55)';
-    ctx.textAlign = 'center';
-    ctx.fillText(c.name.toUpperCase(), cx, stripY + stripH + 24);
-    ctx.restore();
-  });
+  // Caption — truthful about where the palette came from (no abstract color names)
+  ctx.save();
+  ctx.font = `500 15px -apple-system,Helvetica,Arial,sans-serif`;
+  ctx.fillStyle = 'rgba(232,227,218,0.50)';
+  ctx.textAlign = 'center';
+  ctx.fillText('COLOR STORY · SAMPLED FROM SELECTED WALLCOVERINGS', W/2, stripY + stripH + 24);
+  ctx.restore();
 
   // --- Brass separator line ---
   ctx.strokeStyle = 'rgba(201,169,97,0.50)';
@@ -2032,83 +1960,6 @@ function drawProceduralSwatch(ctx, t, x, y, w, h, palette) {
     ctx.globalAlpha = 1;
   }
 }
-
-function drawChipOnCanvas(ctx, el, x, y, w, h) {
-  const hex  = el.querySelector('.chip-swatch')?.style.background || '#ccc';
-  const name = el.querySelector('.chip-name')?.textContent || '';
-  const hexV = el.querySelector('.chip-hex')?.textContent || '';
-  const swatchH = h * 0.68;
-  const infoH   = h - swatchH;
-
-  ctx.fillStyle = hex;
-  ctx.fillRect(x, y, w, swatchH);
-  ctx.fillStyle = '#fff';
-  ctx.fillRect(x, y + swatchH, w, infoH);
-
-  ctx.font      = `700 ${Math.round(w * 0.11)}px -apple-system,Helvetica,Arial,sans-serif`;
-  ctx.fillStyle = '#1c1a17';
-  ctx.textAlign = 'left';
-  ctx.fillText(name.toUpperCase(), x + w*0.08, y + swatchH + infoH * 0.48);
-
-  ctx.font      = `400 ${Math.round(w * 0.09)}px -apple-system,Helvetica,Arial,sans-serif`;
-  ctx.fillStyle = '#888';
-  ctx.fillText(hexV, x + w*0.08, y + swatchH + infoH * 0.80);
-}
-
-function drawTypeOnCanvas(ctx, x, y, w, h, palette) {
-  const acc = palette[2]?.hex || '#c9a961';
-  ctx.fillStyle = '#ffffff';
-  ctx.fillRect(x, y, w, h);
-  ctx.fillStyle = acc;
-  ctx.fillRect(x, y, 3, h);
-
-  ctx.font      = `600 ${Math.round(h * 0.20)}px Georgia,serif`;
-  ctx.fillStyle = '#1c1a17';
-  ctx.textAlign = 'left';
-  ctx.fillText('Living Room', x + w*0.07, y + h*0.35);
-
-  ctx.font      = `700 ${Math.round(h * 0.083)}px -apple-system,Helvetica,Arial,sans-serif`;
-  ctx.fillStyle = acc;
-  ctx.fillText('CORMORANT + HELVETICA', x + w*0.07, y + h*0.55);
-
-  ctx.font      = `400 ${Math.round(h * 0.083)}px -apple-system,Helvetica,Arial,sans-serif`;
-  ctx.fillStyle = '#888';
-  ctx.fillText('Wallcovering specification', x + w*0.07, y + h*0.73);
-  ctx.fillText('reference for client decks.', x + w*0.07, y + h*0.86);
-}
-
-function drawMaterialOnCanvas(ctx, el, x, y, w, h) {
-  const name = el.querySelector('.mat-label')?.textContent || '';
-  // Gradient based on material
-  let grad;
-  if (name === 'Brass') {
-    grad = ctx.createLinearGradient(x, y, x+w, y+h);
-    grad.addColorStop(0, '#d4b44a');
-    grad.addColorStop(0.5, '#c9a961');
-    grad.addColorStop(1, '#e0c870');
-  } else if (name === 'Marble') {
-    grad = ctx.createLinearGradient(x, y, x+w, y+h);
-    grad.addColorStop(0, '#f0eee8');
-    grad.addColorStop(0.5, '#e8e4dc');
-    grad.addColorStop(1, '#f4f2ea');
-  } else {
-    grad = ctx.createLinearGradient(x, y, x+w, y+h);
-    grad.addColorStop(0, '#d8c8a4');
-    grad.addColorStop(0.5, '#c4b48e');
-    grad.addColorStop(1, '#d0c09a');
-  }
-  ctx.fillStyle = grad;
-  ctx.beginPath();
-  ctx.roundRect(x, y, w, h, 4);
-  ctx.fill();
-
-  const textColor = name === 'Marble' ? '#2a2824' : '#3a2e10';
-  ctx.font      = `700 ${Math.round(h * 0.22)}px -apple-system,Helvetica,Arial,sans-serif`;
-  ctx.fillStyle = textColor;
-  ctx.textAlign = 'center';
-  ctx.fillText(name.toUpperCase(), x + w/2, y + h*0.62);
-}
-
 /* ============================================================
    EXPORT OVERLAY CONTROLS
    ============================================================ */

← f6f19f3 mood-board-studio: material fidelity — replace fabric-mislab  ·  back to Model Arena  ·  mood-board-studio: cycle-2 Cody-gate fixes — honest export + e76e1ab →